【问题标题】:Why the probabilities of CNN output don't match? [duplicate]为什么CNN输出的概率不匹配? [复制]
【发布时间】:2020-05-12 23:14:39
【问题描述】:

我正在训练一个包含两个类别的 CNN 模型进行预测。我知道它给了我一个类和另一个类的概率,我也知道我可以得到预测的标签,但我没有给出结果。每个评估输入的输出总和不应该等于 1.0 吗?例如:

[[0.2858745  0.85059494]
 [0.2858745  0.85059494]
 [0.6040499  0.5927084 ]
 [0.8403308  0.291448  ]
 [0.04195209 0.95504093]
 [0.79433376 0.21279709]
 [0.79433376 0.21279709]
 [0.01326967 0.9891382 ]
 [0.0153821  0.9867737 ]
 [0.79433376 0.21279709]
 [0.01617167 0.98520505]
 [0.01351487 0.98596036]
 [0.01473185 0.9846144 ]
 [0.00896762 0.9899838 ]
 [0.00936404 0.9893628 ]]

有什么我没有得到的吗?

我的代码:

model_05_01 = Sequential()
model_05_01.add(Conv1D(filters=16, kernel_size=12, 
                 input_shape=(x_train.shape[1], 1)))
model_05_01.add(MaxPooling1D(pool_size=4))

model_05_01.add(Conv1D(filters=32, kernel_size=12))
model_05_01.add(MaxPooling1D(pool_size=4))

model_05_01.add(Conv1D(filters=16, kernel_size=12))
model_05_01.add(MaxPooling1D(pool_size=4))

model_05_01.add(Flatten())

model_05_01.add(Dense(16, activation='relu'))
model_05_01.add(Dense(2, activation='sigmoid'))

model_05_01.compile(loss='logcosh', optimizer='adam', 
              metrics=['accuracy'])

【问题讨论】:

    标签: machine-learning keras deep-learning conv-neural-network


    【解决方案1】:

    您应该在最后一层使用activation='softmax',并确保您的训练标签已经过单热编码。

    另外,与您的问题无关,但您也应该在卷积层中添加 activation='relu' 参数。

    最后但同样重要的是,您应该在分类问题中使用logcosh 损失,因为它是regression 损失;在使用 one-hot 编码标签的 softmax 分类的给定设置中,您应该坚持使用categorical_crossentropy(如下面的 cmets 中指出的,损失 不是超参数)。

    【讨论】:

    • 它们是 OHE,我尝试过使用 softmax,但使用 sigmoid 的结果更好,无论是在我的个人测试中还是在使用 Talos 的超参数测试中。
    • 是的,是分类问题。我正在尝试对复杂的 DNA 序列进行分类。和上面的例子一样,我首先使用了 categorical_crossentropy,但是通过测试超参数,logcosh 给了我更好的结果。
    • @TiagoMinuzzi 损失不是超参数,你根据任务选择。输出端的激活也是如此,使用 sigmoid 不会产生有效的概率分布,因此在这种情况下使用它是错误的。你必须使用softmax
    • 为什么当我从 locosh 更改为 categorical_crossentropy 时,val_loss 会增加 10 倍? Logcosh val_loss 为 ≃ 0.0270,categorical_crossentropy ≃ 0.260。
    • @TiagoMinuzzi 将 logcosh 的值与分类交叉熵(或任何其他不同的损失函数)进行比较就像将苹果与橙子进行比较;这些值具有可比性。这里的最终判断是您的业务指标(即准确性)。
    猜你喜欢
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2017-01-04
    • 1970-01-01
    • 2016-04-15
    相关资源
    最近更新 更多