You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow 1.x中绘制训练/验证精度与损失曲线的方法

给你的TensorFlow 1.x RNN训练代码添加训练曲线绘制功能

嘿,作为刚接触TensorFlow 1.x的新手,能写出这样的RNN训练代码已经很棒啦!要实现随训练轮次绘制精度和损失曲线,咱们只需要做几个小改动:导入绘图库、记录每轮的指标数据,最后用这些数据画图就行。

下面是修改后的完整代码,我已经标注了新增的部分:

# 新增:导入绘图库,Colab里自带matplotlib
import matplotlib.pyplot as plt
# 在Colab里让图像直接显示(可选,但很实用)
%matplotlib inline

import tensorflow as tf

# hyperparameters
n_neurons = 128
learning_rate = 0.001
batch_size = 128
n_epochs = 5
# parameters
n_steps = 32
n_inputs = 32
n_outputs = 10

# build a rnn model
X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])
y = tf.placeholder(tf.int32, [None])
cell = tf.nn.rnn_cell.BasicRNNCell(num_units=n_neurons)
output, state = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)
logits = tf.layers.dense(state, n_outputs)
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits)
loss = tf.reduce_mean(cross_entropy)
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)
prediction = tf.nn.in_top_k(logits, y, 1)
accuracy = tf.reduce_mean(tf.cast(prediction, tf.float32))

# input data
# 假设你已经有x_train, y_train, x_test, y_test的定义
x_test = x_test.reshape([-1, n_steps, n_inputs])

# 新增:初始化四个列表,用来保存每轮的训练/验证指标
train_loss_history = []
train_acc_history = []
test_loss_history = []
test_acc_history = []

# initialize the variables
init = tf.global_variables_initializer()

# train the model
with tf.Session() as sess:
    sess.run(init)
    n_batches = 100
    for epoch in range(n_epochs):
        for batch in range(n_batches):
            # 这里注意:原代码里每次batch都用整个x_train和y_train?应该是取batch数据哦
            # 如果你有生成batch的代码,记得替换这里,比如用x_train[batch*batch_size:(batch+1)*batch_size]
            sess.run(optimizer, feed_dict={X: x_train, y: y_train})
        
        # 获取当前轮次的训练和验证指标
        loss_train, acc_train = sess.run([loss, accuracy], feed_dict={X: x_train, y: y_train})
        loss_test, acc_test = sess.run([loss, accuracy], feed_dict={X: x_test, y: y_test})
        
        # 新增:把指标存入历史列表
        train_loss_history.append(loss_train)
        train_acc_history.append(acc_train)
        test_loss_history.append(loss_test)
        test_acc_history.append(acc_test)
        
        print('Epoch: {}, Train Loss: {:.3f}, Train Acc: {:.3f}'.format(epoch + 1, loss_train, acc_train))
        print('Test Loss: {:.3f}, Test Acc: {:.3f}\n'.format(loss_test, acc_test))

# 新增:绘制训练曲线
plt.figure(figsize=(12, 5))

# 绘制损失曲线
plt.subplot(1, 2, 1)
plt.plot(range(1, n_epochs+1), train_loss_history, label='Train Loss')
plt.plot(range(1, n_epochs+1), test_loss_history, label='Test Loss')
plt.title('Loss Curve')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()

# 绘制精度曲线
plt.subplot(1, 2, 2)
plt.plot(range(1, n_epochs+1), train_acc_history, label='Train Accuracy')
plt.plot(range(1, n_epochs+1), test_acc_history, label='Test Accuracy')
plt.title('Accuracy Curve')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()

plt.tight_layout()
plt.show()

几个小提醒:

  • 原代码里的batch训练部分有点小问题:每次循环都用整个x_train和y_train,这其实不是真正的batch训练哦。如果你的数据集很大,记得改成按batch_size取切片,或者用生成器来生成batch数据,不然训练效率会很低,也容易过拟合。
  • 如果你运行代码时发现图像没显示,确保开头的%matplotlib inline已经加上,这是Colab里让matplotlib图像直接在单元格中显示的魔法命令。
  • 曲线的样式可以自己调整,比如改变线条颜色、添加标记点,只需要修改plt.plot的参数就行(比如加marker='o')。

内容的提问来源于stack exchange,提问作者rajpal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 22:27:34