python - 如何将 Keras 预测输出转换为所需的二进制值

标签 python machine-learning keras neural-network

我有一个包含 32 个输入节点、20 个隐藏节点和 65 个输出节点的网络。 我的网络输入实际上是长度为 32 的哈希码,输出是单词。

输入是Hash中每个字符的ascii值除以256。 网络的输出是我制作的二进制表示。例如,a 等于 00000,b 等于 00001,依此类推。它只包含字母表和空格,因此每个字符只有 5 位。我的训练输入最多只能输入 13 个字符。所以我的输出节点是 13 * 5 = 65。我期待像 10101010101010101010101010101010101010101010101010101010101001011 这样的二进制输出。给定 32 长度的哈希码作为输入,位序列最多可以预测 16 个字符的单词。

model = Sequential([
    Dense(32, input_shape=(32,), activation = 'relu'),
    Dense(20, activation='relu'),
    Dense(65, input_shape=(65,), activation='softmax')
])

model.summary()
model.compile(Adam(lr=.001), loss='binary_crossentropy', metrics=  ['accuracy'])
model.fit(train_samples, train_labels, batch_size=1000, epochs=10000,shuffle = True, verbose=2)

当我尝试使用下面的代码进行预测时:

clf.predict(X)

它总是输出小于 0.5 的小十进制值。

[[8.95109400e-03 1.11340620e-02 1.27389077e-02 1.90807953e-02
 1.56925414e-02 7.47500360e-03 1.30378362e-02 1.67052317e-02
 1.07944654e-02 9.68935993e-03 9.82633699e-03 1.29385451e-02
 1.56633276e-02 1.38113154e-02 1.50949452e-02 8.81231762e-03
 1.26177669e-02 1.46279763e-02 1.42763760e-02 1.31389238e-02
 8.32264405e-03 1.52036361e-02 1.52883027e-02 1.47563582e-02
 1.19247697e-02 1.16073946e-02 1.72672570e-02 1.35995271e-02
 1.77132934e-02 1.33292647e-02 1.41840307e-02 1.78522542e-02
 9.77656059e-03 1.82192177e-02 9.86329466e-03 1.62205566e-02
 1.95278302e-02 9.18696448e-03 2.06225738e-02 1.01496875e-02
 2.08229423e-02 2.36334335e-02 6.02523983e-03 2.36746706e-02
 6.56269025e-03 2.44314633e-02 2.70614270e-02 4.14136378e-03
 2.72923186e-02 3.86772421e-03 2.90246904e-02 2.92722285e-02
 3.06371972e-03 2.97660977e-02 1.89558265e-03 3.17853205e-02
 3.13901827e-02 1.13886443e-03 3.24600078e-02 1.15508994e-03
 3.36604454e-02 3.36041413e-02 4.59054590e-08 3.35478485e-02
 4.63940282e-08]]

我期待一个二进制输出。我如何获得所需的二进制值?我尝试过在接近 0 时将其近似为 0 ,在接近 1 时将其近似为 1 。对吗?如果是这样,那么我的输出总是0,因为所有的都接近0。我认为这是不对的。请帮忙。

最佳答案

您的激活函数可能存在误解。

softmax 是为“一个正确的类别”设计的,而不是为 65 个可能正确的类别设计的。
softmax 结果的总和将始终为 1,因此您实际上可能不会有任何高于 0.5 的东西。

使用sigmoid激活。

关于python - 如何将 Keras 预测输出转换为所需的二进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53482251/

相关文章:

python - twill - 在运行时更改代理服务器设置

Python - linalg.eigsh 如何找到*所有*特征向量?

machine-learning - Keras:如何在训练和测试阶段使用 dropout?

python - 检测图片中表格的模型

machine-learning - 了解生成对抗网络

python - 为什么我收到 KeyError : "Django settings doesn' t define RESOLVER"?

python - 如何找到200到400之间的友好数字?

r - 相对于前两个值绘制第三个值

machine-learning - 如何验证两个文本数据集是否来自不同的分布?

python - 更改 kmeans 模型的集群标签