问题描述
我是一名深度学习方向的初学者,最近在按照《python深度学习》这本书学习Tensorflow和keras.在新闻的多分类问题中,我按照书本上的代码编写绘制训练损失和验证损失的函数,但在运行结果并没有绘制出曲线。
题目来源:《Python深度学习》
题目内容:
对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))
训练网络输出的结果:
以下是有问题的代码段:
# 绘制训练损失和验证损失
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。但问题代码段输出的结果如下:
为了找到问题,我打印出了epochs和loss_values中的值,我猜测是epochs中的这个值有问题,但是我不知道应该如何解决。因此想请教一下大家,如何解决这个问题。
程序应该输出的结果如下: