我刚刚训练了一个神经网络,我想用一个未包含在训练中的新数据集来测试它,以便检查它在新数据上的表现。这是我的代码:
net = patternnet(30);
net = train(net,x,t);
save (net);
y = net(x);
perf = perform(net,t,y)
classes = vec2ind(y);
其中x和t分别是我的输入和目标。我了解可以使用save net
和load net;
,但我的问题如下:
我的代码中的哪一点应该使用save net
?
使用save net;
,系统上的哪个位置是已保存的经过培训的网络?
当我再次退出并打开MATLAB时,如何加载经过训练的网络并提供我想要测试的新数据?
请注意:我发现每次运行我的代码时,它会提供一个不同的输出,一旦我有一个可接受的结果,我就不想要了。我希望能够保存训练好的神经网络,这样当我使用训练数据集一遍又一遍地运行代码时,它会提供相同的输出。
答案 0 :(得分:0)
如果您只是致电save net
,工作区中的所有当前变量都将保存为net.mat
。您只想保存经过培训的网络,因此需要使用save('path_to_file', 'variable')
。例如:
save('C:\Temp\trained_net.mat','net');
在这种情况下,网络将以给定的文件名保存。
下次要使用已保存的预训练网络时,只需拨打load('path_to_file')
即可。如果您不重新初始化或重新训练此网络,则性能将与之前相同,因为所有权重和偏差值都相同。
您可以通过检查net.IW{i,j}
(输入权重),net.LW{i,j}
(图层权重)和net.b{i}
(偏差)等变量来查看已使用的权重和偏差值。只要它们保持不变,网络的性能就会保持不变。
训练并保存
[x,t] = iris_dataset;
net = patternnet;
net = configure(net,x,t);
net = train(net,x,t);
save('C:\Temp\trained_net.mat','net');
y = net(x);
perf = perform(net,t,y);
display(['performance: ', num2str(perf)]);
在我的情况下返回performance: 0.11748
。每次新培训后,这些数值都会有所不同。
加载并使用
clear;
[x,t] = iris_dataset;
load('C:\Temp\trained_net.mat');
y = net(x);
perf = perform(net,t,y);
display(['performance: ', num2str(perf)]);
返回performance: 0.11748
。在同一数据集上使用网络时,这些值将相同。在这里,我们再次使用训练集。
如果您获得了一个绝对新的数据集,性能会有所不同,但对于这个特定的数据集,性能总是相同的。
clear;
[x,t] = iris_dataset;
%simulate a new data set of size 50
data_set = [x; t];
data_set = data_set(:,randperm(size(data_set,2)));
x = data_set(1:4, 1:50);
t = data_set(5:7, 1:50);
load('C:\Temp\trained_net.mat');
y = net(x);
perf = perform(net,t,y);
display(['performance: ', num2str(perf)]);
在我的情况下返回performance: 0.12666
。