【问题标题】:Plotting val_loss and loss in Keras gives incorrect figure在 Keras 中绘制 val_loss 和 loss 给出了不正确的数字
【发布时间】:2020-07-29 04:22:48
【问题描述】:

[![在此处输入图像描述][1]][1]我在下面运行一段代码来绘制 Keras 中的训练和测试损失曲线。

train_x, test_x, train_y, test_y = train_test_split(features, target_classes , test_size=0.30)

epochs = 4
batch_size = 256

for i in range(epochs):
    print("epoch Value", i)

    ix_train = np.random.choice(train_x.shape[0], size=batch_size)

    score = model.fit(
        train_x[ix_train], train_y[ix_train]
        , epochs=1
        , validation_data=(test_x, test_y)
    )

scores.append(score)

//这段代码绘制val_loss和train_loss

for i in range(0, len(scores)):
    val_loss_change.append(scores[i].history['val_loss'])
    loss_change.append(scores[i].history['loss'])

plt.plot(val_loss_change, label='val_loss')
plt.plot(loss_change, label='train_loss')
plt.legend(loc='upper right')
plt.show()
plt.savefig('LossVal_loss')

生成绘图时,绘图值看起来不切实际。请参见附图LossVal_loss。 我已经从 Python 调试提示符复制了 val_loss_change 和 loss_change。

loss_change =:[[4.3783984780311584],[3.9744645059108734],[3.921104222536087],[3.5381810665130615],[3.3796855211257935],[3.161308079957962],[2.9224385917186737],[2.80639386177063],[2.5576193928718567],[2.1081390380859375]] P >

val_loss_change =:[[4.315125052134196],[4.105147279103597],[4.0108651924133305],[3.9794070688883463],[4.025013980865478],[4.060481491088868],[4.1542660458882645],[4.011785678863525],[3.989632488886515],[4.240501753489176]] P >

当我简单地从 pyhton 调试提示符复制 val_loss_change 和 loss_change 并创建一个新的 python 文件并尝试按以下代码运行它时。 绘制的图是正确的。请看附图LossVal_loss1


val_loss_change = [[4.315125052134196], [4.105147279103597], [4.0108651924133305], [3.9794070688883463], [4.025013980865478], [4.060481491088868], [4.1542660458882645], [4.011785678863525], [3.989632488886515], [4.240501753489176]]
loss_change = [[4.3783984780311584], [3.9744645059108734], [3.921104222536087], [3.5381810665130615], [3.3796855211257935], [3.161308079957962], [2.9224385917186737], [2.80639386177063], [2.5576193928718567], [2.1081390380859375]]

plt.plot(val_loss_change, label='val_loss')
plt.plot(loss_change, label='train_loss')
plt.legend(loc='upper right')
plt.show()
plt.savefig('LossVal_loss1')





Can anyone tell what goes wrong in 1st code?
I want to run fit function multiple times and then plot a curve for loss and val_loss.




  [1 Correct Figure from 2nd code ]: https://i.stack.imgur.com/fVg4o.png
  [2 Incorrect Figure from 1st Code ]: https://i.stack.imgur.com/dcRSE.png

【问题讨论】:

    标签: python matplotlib keras


    【解决方案1】:

    您一遍又一遍地用 1 个 epoch 拟合模型。将 epochs 更改为 epochs 的总值并删除额外的循环。我在移动设备上,所以我现在无法测试代码。

    为了获得更好的动态图,请使用 TensorBoard

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2018-04-28
      • 2019-07-21
      • 2019-05-17
      • 2018-02-24
      • 2020-08-30
      • 2019-05-05
      相关资源
      最近更新 更多