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

如何在MATLAB训练网络时通过OutputFcn获取每轮迭代的准确率列表?

如何在MATLAB神经网络训练中收集每轮迭代的准确率并整理为列表

我来帮你搞定这个问题!在MATLAB里用OutputFcn收集每轮训练的准确率其实很直观,关键是写一个自定义的输出函数来记录数据,下面是具体的步骤和代码示例:

核心思路

OutputFcn是MATLAB神经网络训练时的回调函数,每完成一轮迭代(或一个小批量)就会被调用一次。我们可以在这个函数里计算当前轮次的准确率,并把它存入一个预先定义的数组中,训练结束后这个数组就是完整的准确率列表。

具体实现步骤

1. 准备基础数据与网络

假设你已经有了训练输入X、标签Y,以及初始化好的神经网络net(这里用前馈网络做示例):

% 示例:创建一个简单的前馈神经网络
net = feedforwardnet([12 6]);
% 假设你已经加载了训练数据 X(输入)和 Y(标签,分类任务建议用one-hot编码)

2. 定义准确率存储容器与自定义OutputFcn

推荐用嵌套函数来避免全局变量的冲突问题,直接在脚本里定义即可:

% 初始化空数组,用来存储每轮的准确率
accuracyHistory = [];

% 自定义输出函数,每轮训练后自动调用
function stop = customOutputFcn(net, info)
    % 计算当前轮次的准确率(分类任务示例)
    % 1. 用当前网络预测训练数据
    yPred = net(X); % X是完整训练输入,若要算验证集准确率可替换成验证数据
    % 2. 将one-hot编码的预测结果和标签转为类别索引
    yPredClass = vec2ind(yPred);
    yTrueClass = vec2ind(Y);
    % 3. 计算准确率
    currentAcc = mean(yPredClass == yTrueClass);
    
    % 将当前准确率追加到历史列表中
    accuracyHistory(end+1) = currentAcc;
    
    % 设置是否停止训练:返回false表示继续训练,true则终止
    stop = false;
end

3. 配置训练选项并启动训练

在trainingOptions里指定我们的自定义OutputFcn,然后开始训练:

% 配置训练选项(这里用trainlm优化器,可替换为你需要的如traingd、trainbr等)
trainOpts = trainingOptions('trainlm', ...
    'OutputFcn', @customOutputFcn, ...
    'Epochs', 100, % 训练轮次
    'Verbose', true); % 显示训练过程

% 启动训练
[trainedNet, trainInfo] = train(net, X, Y, trainOpts);

4. 获取并使用准确率列表

训练结束后,accuracyHistory就是每轮迭代的准确率列表了,你可以直接打印、保存或可视化:

% 打印准确率列表
disp('每轮迭代的准确率:');
disp(accuracyHistory);

% 可视化准确率变化趋势
plot(1:length(accuracyHistory), accuracyHistory, '-o', 'LineWidth', 1.5);
xlabel('迭代轮次');
ylabel('准确率');
title('训练过程中准确率变化');
grid on;

注意事项

  • 如果是回归任务,你需要把准确率换成对应的评估指标(如R²、均方误差MSE),只需修改自定义函数里的计算逻辑即可。
  • 如果你用的是小批量训练,默认info.X是当前小批量的输入,若要计算全训练集的准确率,记得在自定义函数里用完整的训练数据X和Y,而不是info里的批量数据。
  • 若要同时记录验证集准确率,只需在自定义函数里加入验证数据的预测和计算逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:41:29