keras - 如果可以激活多个输出,softmax 层的替代品是什么?

标签 keras conv-neural-network mnist softmax

例如,我有一个 CNN,它试图从 MNIST 数据集(使用 Keras 编写的代码)中预测数字。它有 10 个输出,形成 softmax 层。只有一个输出可以为真(独立于 0 到 9 的每个数字):

Real: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
Predicted: [0.02, 0.9, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01]

由于 softmax 的定义,预测总和等于 1.0。

假设我有一个任务,我需要对一些可能属于几个类别的对象进行分类:
Real: [0, 1, 0, 1, 0, 1, 0, 0, 0, 1]

所以我需要以其他方式正常化。我需要在范围 [0, 1] 上给出值并且总和可以大于 1 的函数。

我需要这样的东西:
Predicted: [0.1, 0.9, 0.05, 0.9, 0.01, 0.8, 0.1, 0.01, 0.2, 0.9]

每个数字是对象属于给定类别的概率。之后,我可以使用一些阈值(如 0.5)来区分给定对象所属的类别。

出现以下问题:
  • 那么可以使用哪个激活函数呢?
  • 这个功能可能已经存在于 Keras 中了吗?
  • 在这种情况下,您是否可以提出其他一些预测方法?
  • 最佳答案

    您的问题是多标签分类之一,在 Keras 的上下文中进行了讨论,例如,这里:https://github.com/fchollet/keras/issues/741

    简而言之,在 keras 中建议的解决方案是用 sigmoid 层替换 softmax 层,并使用 binary_crossentropy 作为成本函数。

    该线程中的一个示例:

    # Build a classifier optimized for maximizing f1_score (uses class_weights)
    
    clf = Sequential()
    
    clf.add(Dropout(0.3))
    clf.add(Dense(xt.shape[1], 1600, activation='relu'))
    clf.add(Dropout(0.6))
    clf.add(Dense(1600, 1200, activation='relu'))
    clf.add(Dropout(0.6))
    clf.add(Dense(1200, 800, activation='relu'))
    clf.add(Dropout(0.6))
    clf.add(Dense(800, yt.shape[1], activation='sigmoid'))
    
    clf.compile(optimizer=Adam(), loss='binary_crossentropy')
    
    clf.fit(xt, yt, batch_size=64, nb_epoch=300, validation_data=(xs, ys), class_weight=W, verbose=0)
    
    preds = clf.predict(xs)
    
    preds[preds>=0.5] = 1
    preds[preds<0.5] = 0
    
    print f1_score(ys, preds, average='macro')
    

    关于keras - 如果可以激活多个输出,softmax 层的替代品是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41589126/

    相关文章:

    neural-network - 卷积神经网络为什么使用ReLU作为激活单元?

    machine-learning - Keras CNN - 损失不断减少,但准确率快速收敛

    javascript - 使用 javascript/node.js 读取 MNIST 数据集

    python - LSTM MNIST 数据集中的特征和时间步

    pytorch - 属性错误: 'builtin_function_or_method' object has no attribute 'requires_grad'

    python - 将 gensim doc2vec 与 Keras Conv1d 结合使用。值错误

    python - Keras 模型的矩阵大小错误

    python - Keras:完成训练过程后释放内存

    python - 具有矢量输出和 2D 图像图输入的 CNN(输入是数组)

    python - 输入多个数据集到tensorflow模型