在训练中,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发布于 2019-07-11 16:48:34
在keras github repo中,我们有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。
https://stackoverflow.com/questions/56984897
复制相似问题