Keras验证准确性为0,在整个培训过程中保持不变

时间:2019-02-14 11:37:14

标签: tensorflow keras neural-network time-series lstm

当前,我正在使用Python中的Tensorflow / Keras进行时间序列分析。 整个LSTM模型看起来像

model = keras.models.Sequential()
model.add(keras.layers.LSTM(25, input_shape = (1,1), activation =    'relu', dropout = 0.2, return_sequences = False))
model.add(keras.layers.Dense(1))
model.compile(optimizer = 'adam', loss = 'mean_squared_error', metrics=['acc'])
tensorboard = keras.callbacks.TensorBoard(log_dir="logs/{}".format(time()))
es = keras.callbacks.EarlyStopping(monitor='val_acc', mode='max', verbose=1, patience=50)
mc = keras.callbacks.ModelCheckpoint('/home/sukriti/best_model.h5',   monitor='val_loss', mode='min', save_best_only=True)
history = model.fit(trainX_3d, trainY_1d, epochs=50, batch_size=10, verbose=2, validation_data = (testX_3d, testY_1d), callbacks=[mc, es, tensorboard])

我有以下结果

Train on 14015 samples, validate on 3503 samples
Epoch 1/50
- 3s - loss: 0.0222 - acc: 7.1352e-05 - val_loss: 0.0064 - val_acc:  0.0000e+00
Epoch 2/50
- 2s - loss: 0.0120 - acc: 7.1352e-05 - val_loss: 0.0054 - val_acc: 0.0000e+00
Epoch 3/50
- 2s - loss: 0.0108 - acc: 7.1352e-05 - val_loss: 0.0047 - val_acc: 0.0000e+00

现在 val_acc 保持不变。正常吗 它代表什么?

非常感谢您。

3 个答案:

答案 0 :(得分:1)

loss = 'mean_squared_error'表示,您处于回归设置,其中准确度毫无意义(仅在分类问题)。

不幸的是,尽管事实证明Keras对您的问题毫无意义且不合适,但Keras不会在这种情况下“保护”您,而是坚持计算并向您报告“准确性”-请参阅What function defines accuracy in Keras when the loss is mean squared error (MSE)?中我的回答

您只需要从模型编译中删除metrics=['acc'],就不要打扰-在回归设置中,MSE本身也可以(并且通常确实)用作性能指标。

答案 1 :(得分:0)

在我的情况下,当我的批次大小为64时,在整个培训(使用Keras和CNTK-GPU后端)中,我的验证准确性为0.0000e + 00,但我的验证集中只有120个样本(分为三类)。将批次大小更改为60后,我得到了正常的精度值。

答案 2 :(得分:0)

它不会随着批量大小或指标的改变而改善。我遇到了同样的问题,但是当我洗牌训练和验证数据集时,0.0000e+00 消失了。