在训练中,Keras categorical_accuracy值为 100%。但是我保存的相同训练数据将其输出到一个文件中,显示了几个(实际上是相当多的(分类到错误类的数据。我已经检查了标签的输入文件,它是正确的。
categorical_accuracy衡量什么?有没有更好的指标来调试 LSTM?
model = Sequential()
model.add(LSTM(64, batch_input_shape=(7763, TimeStep.TIME_STEP + 1, 10), return_sequences=True, activation='relu'))
model.add(LSTM(128, activation='relu', return_sequences=True))
model.add(LSTM(64, activation='relu', return_sequences=True))
model.add(LSTM(32, activation='relu'))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=[categorical_accuracy])
history = model.fit(TimeStep.fodder, TimeStep.target, epochs=300, batch_size=7763)
Epoch 400/400
7763/31052 [======>.......................] - ETA: 1s - loss: 2.7971e-04 - categorical_accuracy: 1.0000
15526/31052 [==============>...............] - ETA: 1s - loss: 3.0596e-04 - categorical_accuracy: 1.0000
23289/31052 [=====================>........] - ETA: 0s - loss: 3.0003e-04 - categorical_accuracy: 1.0000
31052/31052 [==============================] - 2s 78us/step - loss: 2.9869e-04 - categorical_accuracy: 1.0000
从 keras github 存储库中,我们有categorical_accuracy
函数。
def categorical_accuracy(y_true, y_pred):
return K.cast(K.equal(K.argmax(y_true, axis=-1),
K.argmax(y_pred, axis=-1)),
K.floatx())
在这里我们可以看到,如果最大值 y_true 的位置与 y_pred 相同,则返回 1,否则返回 0。100% 的准确度应表明 y_true 最大值的位置始终与y_pred相同(此处的位置是类,因此始终预测相同的类(。
造成这种情况的一个可能原因可能是您只有一个输出(单个二进制类(。 因此,对于y_true和y_pred,最大值的位置将始终为 0。
在这种情况下,请改用binary_accuracy
。