keras验证精度为0,并且在整个训练过程中保持不变

vtwuwzda  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(727)

我正在python中使用tensorflow/keras进行时间序列分析。整个lstm模型看起来像,

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

我有以下结果,

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

现在 val_acc 保持不变。正常吗?它意味着什么?

bcs8qyzn

bcs8qyzn1#

如所示 loss = 'mean_squared_error' ,您处于一个回归设置中,精确性没有意义(它仅在分类问题中才有意义)。
不幸的是,在这种情况下,keras不会“保护”你,坚持计算并报告一个“准确度”,尽管这对你的问题来说毫无意义和不合适——看看我的答案,当损失是均方误差(mse)时,keras中什么函数定义了准确度?
你应该简单地删除 metrics=['acc'] 从您的模型编译中,不用担心-在回归设置中,mse本身也可以(通常也可以)作为性能度量。

uinbv5nw

uinbv5nw2#

在我的例子中,当我的批大小为64时,我在整个培训过程中(使用keras和cntk gpu后端)的验证精度为0.0000e+00,但在我的验证集中只有120个样本(分为三个类)。我把批量大小改为60后,得到了正常的精度值。

xwmevbvl

xwmevbvl3#

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

相关问题