我如何重用同一个神经网络来重新创建我在 training/creating 网络时得到的相同结果?

How can I reuse the same neural network to recreate the same results I had while training/creating the network?

我刚刚训练了一个神经网络,我想用训练中未包含的新数据集对其进行测试,以检查其在新数据上的性能。这是我的代码:

net = patternnet(30);
net = train(net,x,t);
save (net);
y = net(x);
perf = perform(net,t,y)
classes = vec2ind(y);

其中 x 和 t 分别是我的输入和目标。我明白可以使用save netload net;,但是我的问题如下:

  1. 在我的代码中什么时候应该使用 save net

  2. 使用save net;,训练好的网络保存在系统的哪个位置?

  3. 当我退出并再次打开 MATLAB 时,如何加载经过训练的网络并提供我想用来测试它的新数据?

请注意:我发现每次我 运行 我的代码时,它都会给出不同的输出,一旦我得到了可接受的结果,我就不想要了。我希望能够保存经过训练的神经网络,这样当我 运行 使用训练数据集反复编写代码时,它会给出相同的输出。

如果您只调用 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)]);

它 returns 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)]);

它returns 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)]);

它 returns performance: 0.12666 在我的例子中。