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

如何使用训练好的模型测试数据并绘制图表?已搭建含Sigmoid与Softmax层的TensorFlow模型

我完全懂你的感受——训练模型的流程走通了,但到了测试和可视化这一步就卡壳,确实有点挠头。结合你给出的模型代码,我一步步给你讲清楚怎么用训练好的模型测试数据,还有怎么把结果可视化成直观的图表。

一、用训练好的模型测试数据

你的模型结构是先过Sigmoid全连接层,再用Softmax输出二分类的概率:

fl = tf.layers.dense(x, 10,activation=tf.sigmoid)
output = tf.layers.dense(fl, 2,activation=tf.nn.softmax)

首先,我们需要从output里拿到预测结果,然后和测试集的真实标签对比,计算评估指标。

1. 获取预测结果与测试准确率

假设你已经有测试集的输入x_test和对应的真实标签y_test(注意如果y_test是one-hot编码的,后续要转成类别标签):

# 从Softmax输出中提取预测的类别(取概率最大的索引)
predictions = tf.argmax(output, axis=1)
# 计算测试集的准确率:对比预测标签和真实标签,求平均值
true_labels = tf.argmax(y_test, axis=1)
test_accuracy = tf.reduce_mean(tf.cast(tf.equal(predictions, true_labels), tf.float32))

接下来分两种情况执行:

  • 如果训练和测试在同一个会话中:直接在训练完的会话里运行上面的操作就行
with tf.Session() as sess:
    # 这里是你之前的初始化、训练代码
    sess.run(tf.global_variables_initializer())
    # ...(你的训练循环代码)
    
    # 训练完成后,测试
    test_acc, pred_labels, true_labels_np = sess.run(
        [test_accuracy, predictions, true_labels], 
        feed_dict={x: x_test}
    )
    print(f"测试集准确率: {test_acc:.4f}")
  • 如果训练和测试是分开的会话:需要先保存模型,再加载
    训练时添加保存逻辑:
saver = tf.train.Saver()  # 初始化模型保存器
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    # ...(训练循环)
    saver.save(sess, './my_trained_model')  # 保存模型到指定路径

测试时加载模型:

with tf.Session() as sess:
    saver.restore(sess, './my_trained_model')  # 加载训练好的模型
    test_acc, pred_labels, true_labels_np = sess.run(
        [test_accuracy, predictions, true_labels], 
        feed_dict={x: x_test}
    )
    print(f"测试集准确率: {test_acc:.4f}")
二、绘制可视化图表

可视化能帮你更直观地看到模型的表现,下面是几种常用的图表实现:

1. 训练/测试的损失&准确率曲线

首先你需要在训练过程中记录每一轮的训练损失、训练准确率,以及测试损失、测试准确率(比如每训练10轮就在测试集上评估一次),把这些值存在列表里,比如train_losses、train_accs、test_losses、test_accs。然后用Matplotlib绘制:

import matplotlib.pyplot as plt

plt.figure(figsize=(12, 5))

# 绘制损失曲线
plt.subplot(1, 2, 1)
plt.plot(train_losses, label='训练损失', linewidth=2)
plt.plot(test_losses, label='测试损失', linewidth=2)
plt.title('训练与测试损失变化')
plt.xlabel('迭代轮数')
plt.ylabel('损失值')
plt.legend()
plt.grid(alpha=0.3)

# 绘制准确率曲线
plt.subplot(1, 2, 2)
plt.plot(train_accs, label='训练准确率', linewidth=2)
plt.plot(test_accs, label='测试准确率', linewidth=2)
plt.title('训练与测试准确率变化')
plt.xlabel('迭代轮数')
plt.ylabel('准确率')
plt.legend()
plt.grid(alpha=0.3)

plt.tight_layout()
plt.show()

2. 混淆矩阵

混淆矩阵能清晰展示模型在每个类别上的分类正确/错误情况,结合Seaborn绘制会更美观:

from sklearn.metrics import confusion_matrix
import seaborn as sns
import numpy as np

# 生成混淆矩阵
cm = confusion_matrix(true_labels_np, pred_labels)

plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', 
            xticklabels=['类别0', '类别1'], 
            yticklabels=['类别0', '类别1'])
plt.title('测试集混淆矩阵')
plt.xlabel('预测类别')
plt.ylabel('真实类别')
plt.show()

3. 错误分类样本可视化(如果是图像数据)

如果你的数据集是图像(比如MNIST、自定义图像数据集),可以把分类错误的样本展示出来,帮你分析模型容易错在哪里:

# 找到所有错误分类的样本索引
wrong_indices = np.where(pred_labels != true_labels_np)[0]

plt.figure(figsize=(10, 10))
for i in range(9):
    if i >= len(wrong_indices):
        break
    idx = wrong_indices[i]
    plt.subplot(3, 3, i+1)
    # 这里根据你的图像形状调整reshape,比如MNIST是(28,28)
    plt.imshow(x_test[idx].reshape(28, 28), cmap='gray')
    plt.title(f"真实: {true_labels_np[idx]}\n预测: {pred_labels[idx]}")
    plt.axis('off')
plt.tight_layout()
plt.show()
一些小提醒
  • 如果你用的是TensorFlow 2.x,代码逻辑会稍有不同(因为TF2默认是eager执行,不需要会话),但你的代码用了tf.layers,应该是TF1.x版本,上面的代码都是适配TF1.x的。
  • 训练时一定要定期在测试集上评估,不然没法绘制损失/准确率曲线,也没法及时发现过拟合问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:35:39