【问题标题】:Machine Learning (MATLAB) - Neural network is saved as 'struct' instead of 'network' in checkpoint机器学习 (MATLAB) - 神经网络在检查点保存为“结构”而不是“网络”
【发布时间】:2026-02-07 18:15:01
【问题描述】:

我正在训练一个神经网络来学习一个函数。到目前为止一切都很好。

我有 4x10000 的输入矩阵和 3x10000 的输出矩阵。我有比 10000 个多得多的数据点。但并非所有数据点都可以一次拟合,所以我决定提供 10000-10000 个数据点的数据包并在其上训练相同的神经网络。

隐藏层共有三层,7个单元。

所以我要做的是,我用 10000 个数据点随机训练网络,然后再次在另一个随机 10000 个数据点上训练,依此类推。

为此,我存储CheckPoints(神经网络工具包的内置功能)。但是发生的情况是,正在训练的networkCheckPoints 中存储为struct,而不是network 类型本身。所以当我下次运行程序时加载检查点时,它会显示如下错误。

Undefined function 'train' for input arguments of type 'struct'

我正在使用fitnet 网络。

% Create a Fitting Network
hiddenLayerSize = 7;
net = fitnet(hiddenLayerSize,'trainlm');

% Setup Division of Data for Training, Validation, Testing
net.divideParam.trainRatio = 60/100;
net.divideParam.valRatio = 20/100;
net.divideParam.testRatio = 20/100;


load('Highlights_Checkpoint.mat');
existanceOfCheckpoint = exist('checkpoint', 'var');
if existanceOfCheckpoint==0
else
net = (checkpoint.net);
end

% Train the Network
[net,tr] = train(net,x,t,'useParallel', 'yes','showResources','yes', 'CheckpointFile','Highlights_Checkpoint.mat');

【问题讨论】:

  • 看起来您没有将正确的对象保存到checkpoint.net。设置该字段的代码在哪里?
  • @Naveh 存储检查点的工作在 train 函数内部完成。我没有明确存储检查点。
  • 您似乎是从文件中加载checkpoint,因为它没有在您发布的代码中初始化。如果您使用从fitnet 返回的net 而不是net = (checkpoint.net),一切正常吗?
  • 当然。我在train 函数CheckpointFileHighlights_Checkpoint.mat 中传递了两个参数。所以该函数会以一定的时间间隔将network 存储在mat 文件中。我在第一次运行程序时保留了load('Highlights_Checkpoint.mat') 行的注释(因为第一次不会有任何检查点文件)。我在之后的处决中取消评论它。
  • 所以它第一次运行,第二次调用抛出错误?因为这证明了我的观点。

标签: matlab machine-learning neural-network


【解决方案1】:

这个问题的解决方法很简单。

我所要做的就是:

net = network(checkpoint.net);

一切就绪。 :D

【讨论】: