如何检测输入是否与任何输出选项不匹配



如何准确识别预测结果,以确定输入是否匹配,或者输入是否与任何训练数据完全不同。

例如,如果我有一个模型;"圆圈"正方形";和其他形状,但随后用户输入了一个";混乱的歪歪扭扭";,我该如何阻止它意外匹配最高概率?

我的知识比较低,目前我的模型是这样的。

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
dense (Dense)                (None, 512)               262656
_________________________________________________________________
dropout (Dropout)            (None, 512)               0
_________________________________________________________________
dense_1 (Dense)              (None, 256)               131328
_________________________________________________________________
dropout_1 (Dropout)          (None, 256)               0
_________________________________________________________________
dense_2 (Dense)              (None, 100)               25700
_________________________________________________________________
dropout_2 (Dropout)          (None, 100)               0
_________________________________________________________________
dense_3 (Dense)              (None, 5)                 505
=================================================================
Total params: 420,189
Trainable params: 420,189
Non-trainable params: 0
_________________________________________________________________

然后,当进行预测时,我使用np.argmax来获得最高概率。

我通过观察和阅读一系列资源,反复尝试,得出了这个布局。对此的指导也非常受欢迎:(

在这种情况下,softmax仍然可以提供帮助。它是一个近似值,而不是一个精确的单位阶跃函数。您可以随时检查两个最高项之间的差异,并设置阈值以检查是否存在多个形状。

例如,如果输入包含所有三种形状,则softmax的理想输出为:

[0.3333 0.3333 0.3333]

考虑到一个相对训练有素的模型,输出可能类似于:

[0.34, 0.30, 0.36]

对于只有一个形状的输入,结果会非常不同。它可能类似于:

[0.9999, 1e-6, 2e-6]

在所有这些情况下,您可以使用最可能元素和第二可能元素之间的差来识别";乱七八糟";。或者,你也可以对softmax本身的输出设置阈值,例如,说softmax值>0.9表示形状,任何低于0.9的值都是无效输入。

请记住,这些仍然是近似值,可能会导致一些错误。整个过程在很大程度上取决于模型的实际性能。

最新更新