《python深度学习》中多分类问题在绘制loss曲线出现问题,请问问题出现在哪里?

新手上路,请多包涵

问题描述

我是一名深度学习方向的初学者,最近在按照《python深度学习》这本书学习Tensorflow和keras.在新闻的多分类问题中,我按照书本上的代码编写绘制训练损失和验证损失的函数,但在运行结果并没有绘制出曲线。

题目来源:《Python深度学习》QQ截图20200407094510.png

题目内容:

对keras自带的路透社数据集的新闻评论进行分类。该数据集包括46个类别。

相关代码

我实现代码的平台是colab,与书本中示例代码不同的是我更改Tensorflow的版本,采用的是Tensorflow2。一下是我的关键代码段

# 构建网络
from keras import models
from keras import layers



model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(10000,)),
    tf.keras.layers.Dense(64, activation=tf.nn.relu),
    tf.keras.layers.Dense(64, activation=tf.nn.relu),
    tf.keras.layers.Dense(46, activation=tf.nn.softmax)
])

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])
# 训练网络
history = model.fit(partial_x_train,
                    partial_y_train,
                    epoch=60,
                    batch_size=512,
                    validation_data=(x_val, y_val))

训练网络输出的结果:
QQ截图20200407095430.png

以下是有问题的代码段:

# 绘制训练损失和验证损失
import matplotlib.pyplot as plt

history_dict = history.history
loss_values = history_dict['loss']
val_loss_values = history_dict['val_loss']

epochs = range(1, len(loss_values) + 1)

plt.plot(epochs, loss_values, 'bo', label='Training loss')
print(epochs)
plt.plot(epochs, val_loss_values, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.xlabel('Epochs')
plt.xlim(0, 50)
plt.ylabel('Loss')
plt.legend()
plt.show()

问题细节

按照书上的例程此时应该绘制出训练损失和验证损失的曲线,并根据该曲线可以确定训练最佳的epochs。但问题代码段输出的结果如下:
QQ截图20200407100012.png

为了找到问题,我打印出了epochs和loss_values中的值,我猜测是epochs中的这个值有问题,但是我不知道应该如何解决。因此想请教一下大家,如何解决这个问题。

程序应该输出的结果如下:
QQ截图20200407100550.png

阅读 2.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进