在训练中,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
答案 0 :(得分:0)
在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
。