【发布时间】:2018-02-01 20:51:48
【问题描述】:
我只用很少的数据训练了一个 epoch 的 CNN 模型。我使用 Keras 2.05。
这是 CNN 模型的(部分)最后 2 层,number_outputs = 201。训练数据输出是一个热编码的 201 输出。
model.add(Dense(200, activation='relu', name='full_2'))
model.add(Dense(40, activation='relu', name='full_3'))
model.add(Dense(number_outputs, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy'])
模型保存为 h5 文件。然后,使用与上述相同的模型加载保存的模式。 batch_image 是一个图片文件。
prediction = loaded_model.predict(batch_image, batch_size=1)
我得到这样的预测:
ndarray: [[ 0.00498065 0.00497852 0.00498095 0.00496987 0.00497506 0.00496112
0.00497585 0.00496474 0.00496769 0.0049708 0.00497027 0.00496049
0.00496767 0.00498348 0.00497927 0.00497842 0.00497095 0.00496493
0.00498282 0.00497441 0.00497477 0.00498019 0.00497417 0.00497654
0.00498381 0.00497481 0.00497533 0.00497961 0.00498793 0.00496556
0.0049665 0.00498809 0.00498689 0.00497886 0.00498933 0.00498056
问题:
预测数组应该是
1, 0?为什么我会得到像输出激活为 sigmoid 的输出,而损失是binary_crossentropy。怎么了?我想再次强调,该模型并没有真正用数据训练好。它几乎只是用随机权重初始化。如果我没有很好地训练网络(还没有收敛),比如只是用随机数初始化权重,那么预测是否仍然是
1, 0?如果我想得到预测的概率,然后,我决定如何解释它,CNN训练好后如何得到概率预测输出?
【问题讨论】:
-
np.argmax(preds, axis=1) 是你的朋友。