大家! 我的深度学习项目在图像回归任务中遇到问题,我想知道如何获取模型执行的每个时期的 RMSE 值,并导出到 .xlsx 存档中。
rmseValues = zeros(numEpochs, 1);
for epoch = 1:numEpochs
[net, info] = trainNetwork(XTrain, YTrain, layers, options);
YPred = predict(net, XTrain);
rmseValues(epoch) = calculateRMSE(YTrain, YPred);
end
rmseTable = array2table(rmseValues, 'VariableNames', {'RMSE'});
disp(rmseTable)
但是,由于
for
循环的性质,训练的执行速率与定义的 epoch 数相同。因此,我想知道是否有一个函数可以让我获取执行数据数组。
动机是我想将这些数据用于另一个项目。
我想将数据导出为 .xlsx 或 .csv 存档,但我想找到获取方法。
要在 MATLAB 中的训练过程中捕获每个时期的 RMSE 值,您可以使用自定义训练循环或修改训练选项,以便它具有计算每个时期的 RMSE 的自定义函数。
使用自定义培训低可以让您控制培训过程。为此,您需要:
这是我推荐的一个例子:
% Initialize variables
numEpochs = 50; % Define your number of epochs
rmseValues = zeros(numEpochs, 1);
% Custom training loop
for epoch = 1:numEpochs
% Perform a training step
[net, info] = trainNetwork(XTrain, YTrain, layers, options);
% Make predictions
YPred = predict(net, XTrain);
% Calculate RMSE
rmseValues(epoch) = sqrt(mean((YTrain - YPred).^2));
% Optionally, display the RMSE value for this epoch
fprintf('Epoch %d: RMSE = %.4f\n', epoch, rmseValues(epoch));
end
% Convert to table and save to .xlsx or .csv
rmseTable = array2table(rmseValues, 'VariableNames', {'RMSE'});
writetable(rmseTable, 'RMSE_per_epoch.xlsx'); % Save as .xlsx
% Alternatively, you can use writetable(rmseTable, 'RMSE_per_epoch.csv'); for CSV
如果这不是您的强项或偏好,您可以将
trainingOptions
与自定义 outputFcn
结合使用来捕获 RMSE。其方法如下:
trainingOptions
这里有一个编码大纲以供帮助:
% Initialize a variable to store RMSE values
rmseValues = [];
% Define the custom output function
function stop = myOutputFcn(info)
global rmseValues;
if info.State == 'iteration'
YPred = predict(info.TrainingAccuracy); % Adjust for your needs
rmse = sqrt(mean((info.TrainingLoss - YPred).^2)); % Replace TrainingLoss with your targets
rmseValues = [rmseValues; rmse];
end
stop = false; % Continue training
end
% Set training options with custom output function
options = trainingOptions('sgdm', ...
'MaxEpochs', numEpochs, ...
'OutputFcn', @myOutputFcn);
% Train the network
net = trainNetwork(XTrain, YTrain, layers, options);
% Export RMSE values to .xlsx or .csv
rmseTable = array2table(rmseValues, 'VariableNames', {'RMSE'});
writetable(rmseTable, 'RMSE_per_epoch.xlsx'); % Save as .xlsx
此方法将记录 RMSE 并导出与选项 1 类似的数据。在我看来,第一个选项是更好的选项,我建议您坚持使用该选项。