Tensorflow2.x框架-神经网络八股扩展-acc曲线与loss曲线

loss / loss 可视化,可视化出准确率上升、损失函数下降的过程

博主微信公众号(左)、Python+智能大数据+AI学习交流群(右):欢迎关注和加群,大家一起学习交流,共同进步!

目录

摘要

一、acc 曲线与 loss 曲线

二、完整代码


摘要

loss / loss 可视化,可视化出准确率上升、损失函数下降的过程

一、acc 曲线与 loss 曲线

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

history:

    losss:训练集 loss

    val_losss:测试集 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/val_acc 图
plt.subplot(1, 2, 1)    # 将图像分为一行两列,这里画出第1列
plt.plot(acc, label="Training Accuracy")    # 画出 acc 数据
plt.plot(val_acc, label="Validation Accuracy")  # 画出 val_acc 数据
plt.title("Training and Validation Accuracy")   # 设置图标题
plt.legend()  # 画出图例

# 画 loss/val_loss 图
plt.subplot(1, 2, 2)    # 将图像分为一行两列,这里画出第2列
plt.plot(loss, label="Training Loss")   # 画出 loss 数据
plt.plot(val_loss, label="Validation Loss")     # 画出 val_loss 数据
plt.title("Training and Validation Loss")   # 设置图标题
plt.legend()  # 画出图例

plt.show()  # 显示图像

二、完整代码

"""
acc 与 loss 可视化,可视化出准确率上升、损失函数下降的过程
"""
# 模块导入
import os
import numpy as np
import tensorflow as tf
from matplotlib import pyplot as plt

# 设置显示全部内容,np.inf 表示无穷大
np.set_printoptions(threshold=np.inf)

# 导入数据集,分别为输入特征和标签
mnist = tf.keras.datasets.mnist
# (x_train, y_train):(训练集输入特征,训练集标签)
# (x_test, y_test):(测试集输入特征,测试集标签)
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 对输入网络的输入特征进行归一化,使原本0到255之间的灰度值,变为0到1之间的数值
# (把输入特征的数值变小更适合神经网络吸收)
x_train, x_test = x_train / 255.0, x_test / 255.0

# 搭建网络结构
model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),  # 将输入特征拉直为一维数组,也就是拉直为28*28=784个数值
    tf.keras.layers.Dense(128, activation="relu"),  # 第一层网络128个神经元,使用relu激活函数
    tf.keras.layers.Dense(10, activation="softmax")     # 第二层网络10个神经元,使用softmax激活函数,使输出符合概率分布
])

# 配置训练方法
model.compile(optimizer="adam",     # 优化器
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),    # 损失函数,输出是概率分布,from_logits=False
              metrics=["sparse_categorical_accuracy"])  # 数据集中的标签是数值,神经网络输出y是概率分布

# 读取模型
base_path = os.path.dirname(os.path.abspath(__file__))
# ../MNIST_FC/checkpoint/
base_path = os.path.join(base_path, "MNIST_FC")
base_path = os.path.join(base_path, "checkpoint")
checkpoint_save_path = os.path.join(base_path, "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,    # 每次喂入网络32组数据
                    epochs=5,     # 数据集迭代5次
                    validation_data=(x_test, y_test),     # 测试集输入特征,测试集标签
                    validation_freq=1,  # 每迭代1次训练集执行一次测试集的评测
                    callbacks=[cp_callback]
                    )

# 打印出网络结构和参数统计
model.summary()

# 打印模型参数,存入文本
print(model.trainable_variables)
file_path = os.path.join(base_path, "weights.txt")
file = open(file_path, "w", encoding="utf-8")
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()

# 显示训练集和验证集的 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"]

# 画 acc/val_acc 图
plt.subplot(1, 2, 1)    # 将图像分为一行两列,这里画出第1列
plt.plot(acc, label="Training Accuracy")    # 画出 acc 数据
plt.plot(val_acc, label="Validation Accuracy")  # 画出 val_acc 数据
plt.title("Training and Validation Accuracy")   # 设置图标题
plt.legend()  # 画出图例

# 画 loss/val_loss 图
plt.subplot(1, 2, 2)    # 将图像分为一行两列,这里画出第2列
plt.plot(loss, label="Training Loss")   # 画出 loss 数据
plt.plot(val_loss, label="Validation Loss")     # 画出 val_loss 数据
plt.title("Training and Validation Loss")   # 设置图标题
plt.legend()  # 画出图例

plt.show()  # 显示图像

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要绘制TensorFlowloss曲线,可以使用TensorBoard。TensorBoard是TensorFlow的可视化工具,可以帮助用户可视化训练过程中的各种指标,包括loss曲线。 具体步骤如下: 1. 在训练代码中,使用tf.summary.scalar()函数记录loss值,例如: ``` loss_summary = tf.summary.scalar('loss', loss) ``` 2. 在训练代码中,使用tf.summary.FileWriter()函数将summary写入磁盘,例如: ``` summary_writer = tf.summary.FileWriter(log_dir, sess.graph) ``` 其中log_dir是保存summary的目录。 3. 在终端中运行TensorBoard,例如: ``` tensorboard --logdir=log_dir ``` 其中log_dir是保存summary的目录。 4. 在浏览器中打开TensorBoard的网址,例如: ``` http://localhost:6006/ ``` 5. 在TensorBoard的界面中,选择SCALARS选项卡,可以看到loss曲线。 以上就是使用TensorFlow绘制loss曲线的步骤。 ### 回答2: TensorFlow是一种广泛应用于各个领域的机器学习框架,其模型训练过程中,监测训练曲线是非常有必要的。其中,loss曲线是最常用的一种监测方式。 TensorFlow 提供了一个非常方便的方法,可以直接在训练过程中绘制 loss 曲线。首先,在训练代码中需要定义一个 TensorBoard 的文件写入器: ```python # 定义 TensorBoard 文件写入器 summary_writer = tf.summary.create_file_writer(log_dir) ``` 接下来,在训练过程中,可以通过下面的代码将训练过程中的 loss 值和训练步数写入 TensorBoard 文件: ```python # 定义 TensorBoard 中的 Scalar(标量)曲线 with summary_writer.as_default(): tf.summary.scalar('loss', loss, step=global_step) ``` 其中,第一个参数 'loss' 是 scalar 图表的名称,第二个参数 loss 是当前训练步数中的 loss 值,第三个参数 global_step 是训步数步数。 最后,在 TensorBoard 中查看 loss 曲线,可以运行以下命令: ```bash tensorboard --logdir=log_dir ``` 其中,log_dir是保存TensorBoard文件的目录路径。运行 tensorboard 命令后,会在终端中输出类似如下的信息: ```bash TensorBoard 2.2.0 at http://localhost:6006/ (Press CTRL+C to quit) ``` 在浏览器中访问该链接,就可以看到 TensorBoard 页面,可以选择 Scalar 选项卡,在其中可以看到已经绘制了 loss 曲线。 在 TensorBoard 中,不仅可以展示 loss 曲线,还可以展示各种其他曲线,例如准确率曲线、参数分布曲线、梯度分布曲线等等。TensorBoard提供了强大的可视化功能,可以帮助我们更加深入地理解模型的训练过程,并能够更好地优化我们的模型。 ### 回答3: TensorFlow是一个开源的人工智能框架,它支持多种机器学习算法的实现。在训练一个深度学习网络时,往往需要绘制训练的loss曲线来监控模型的训练效果,同时也便于作出相应的优化策略。 以下是用TensorFlow绘制loss曲线的具体步骤: 第一步,定义网络结构: 首先需要定义深度学习网络结构,例如使用tf.keras.Sequential()函数按顺序堆叠多个层。然后定义激活函数、优化器、损失函数等,例如使用tf.keras.optimizers.Adam()优化器、tf.keras.losses.CategoricalCrossentropy()损失函数等,以提高模型的训练效果。 第二步,定义回调函数: 在TensorFlow中,回调函数是一种函数或一组函数,它在训练阶段的特定时刻被调用。我们需要使用tf.keras.callbacks.Callback()函数来定义自己的回调函数,并覆盖其中的on_train_begin()、on_epoch_end()等方法。在回调函数中,我们可以记录每个epoch的loss,并将其存储起来。 第三步,训练模型: 接下来需要使用model.fit()函数进行模型训练,并将自己定义的回调函数加入其中。例如: ``` history = model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test), callbacks=[MyCallback()]) ``` 第四步,绘制loss曲线: 训练结束后,我们可以使用历史数据中的loss记录来绘制loss曲线。例如: ``` import matplotlib.pyplot as plt loss = history.history['loss'] val_loss = history.history['val_loss'] plt.plot(loss, label='Training Loss') plt.plot(val_loss, label='Validation Loss') plt.xlabel('Epochs') plt.ylabel('Loss') plt.legend() plt.show() ``` 通过以上步骤,我们就可以使用TensorFlow绘制loss曲线了。同时,我们也可以使用回调函数记录其它指标,例如accuracy、precision等,并用相应的方法进行可视化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值