DL with python(11)——TensorFlow实现神经网络训练过程的可视化

本文涉及到的是中国大学慕课《人工智能实践:Tensorflow笔记》第四讲第六节的内容,通过tensorflow实现神经网络参数的acc/loss可视化,从而查看网络的训练效果。

准确率acc与损失值loss的保存

在下面所示的代码中,model.fit执行网络的训练时,已经同步记录了acc和loss的信息,保存在history中。

# 第五步,执行训练
history=model.fit( 训练集数据, 训练集标签, batch_size=, epochs=,
validation_split=用作测试数据的比例,validation_data=测试集,
validation_freq=测试频率)

history中含有的信息及其代码如下所示,可以用history.history提取出来。

训练集的损失: loss
测试集的损失: val_loss
训练集的准确率: sparse_categorical_accuracy
测试集的准确率: val_sparse_categorical_accuracy

acc = history.history['sparse_categorical_accuracy']
val_acc = history.history['val_sparse_categorical_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']

具体代码

将acc和loss的调用以及曲线的绘制体现在代码中,从神经网络搭建的六步法来看,是在DL with python(10)——TensorFlow实现神经网络参数的打印保存中实现断点续训和参数提取的代码的基础上,加入了绘制曲线的代码,仅在第一步和第六步有所改动。具体代码如下,代码的主要功能见注释。

# 第一步,导入相关模块,os模块用于判断文件是否存在,plot用于画图
import tensorflow as tf
import os
import numpy as np
from matplotlib import pyplot as plt
tf.enable_eager_execution()
# 设置输出格式,超过threshold个忽略显示,这里为无限大(全部显示)
np.set_printoptions(threshold=np.inf)
# 第二步,导入数据集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
# 第三步,搭建网络结构
model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])
# 第四步,配置训练方法,并设置模型的断点续训
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])
checkpoint_save_path = "./checkpoint/mnist.ckpt"
if os.path.exists(checkpoint_save_path + '.index'):
    print('-------------load the model-----------------')
    model.load_weights(checkpoint_save_path)
cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,
                                                 save_weights_only=True,
                                                 save_best_only=True)
# 第五步,执行训练
history = model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1,
                    callbacks=[cp_callback])
# 第六步,打印网络结构和参数统计
model.summary()
# 打印参数,并保存到txt文档中
print(model.trainable_variables)     # 返回模型中可训练的参数
file = open('./weights.txt', 'w')    # 打开一个可写入的文本
for v in model.trainable_variables:  # 将参数的名称,格式,数值写入文本
    file.write(str(v.name) + '\n')
    file.write(str(v.shape) + '\n')
    file.write(str(v.numpy()) + '\n')
file.close()  # 关闭文本

###############################################    show   ###############################################

# 显示训练集和验证集的acc和loss曲线
acc = history.history['sparse_categorical_accuracy']            # 训练集准确率
val_acc = history.history['val_sparse_categorical_accuracy']    # 测试集准确率
loss = history.history['loss']                                  # 训练集损失值
val_loss = history.history['val_loss']                          # 测试集损失值

plt.subplot(1, 2, 1)                            # 将2个图画在一个界面中,第1个图
plt.plot(acc, label='Training Accuracy')        # 绘制训练集准确率
plt.plot(val_acc, label='Validation Accuracy')  # 绘制测试集准确率
plt.title('Training and Validation Accuracy')   # 设置标题
plt.legend()                                    # 画出图例

plt.subplot(1, 2, 2)                            # 将2个图画在一个界面中,第2个图
plt.plot(loss, label='Training Loss')           # 绘制训练集准损失值
plt.plot(val_loss, label='Validation Loss')     # 绘制测试集损失值
plt.title('Training and Validation Loss')       # 设置标题
plt.legend()                                    # 画出图例
plt.show()                                      # 输出图片

运行结果

如果之前运行过,程序再次运行会进行断点续训,最后绘制出图像。通过图像可以较为直观的看到准确率和损失值的变化趋势。这也是大多数神经网络的重要性能指标。
在这里插入图片描述

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值