【问题标题】:Keras validation accuracy is 0, and stays constant throughout the trainingKeras 验证准确率为 0,并且在整个训练过程中保持不变
【发布时间】:2019-07-08 10:14:33
【问题描述】:

我正在使用 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 保持不变。正常吗? 代表什么?

【问题讨论】:

    标签: machine-learning keras neural-network time-series lstm


    【解决方案1】:

    正如loss = 'mean_squared_error' 所表示的,您处于回归设置中,其中准确性毫无意义(它仅在分类问题中有意义)。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 您在 regression 设置(例如此处)中获得了“正常”准确度值,而准确度毫无意义?
      【解决方案3】:

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

      【讨论】:

      • 这里accuracy被用于一个回归问题,所以这里和shuffle = True无关。
      猜你喜欢
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 2018-09-18
      • 2020-10-25
      • 2019-01-30
      • 2019-06-09
      相关资源
      最近更新 更多