我如何重用同一个神经网络来重新创建我在 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 net
和load net;
,但是我的问题如下:
在我的代码中什么时候应该使用 save net
?
使用save net;
,训练好的网络保存在系统的哪个位置?
当我退出并再次打开 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
在我的例子中。
我刚刚训练了一个神经网络,我想用训练中未包含的新数据集对其进行测试,以检查其在新数据上的性能。这是我的代码:
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 时,如何加载经过训练的网络并提供我想用来测试它的新数据?
请注意:我发现每次我 运行 我的代码时,它都会给出不同的输出,一旦我得到了可接受的结果,我就不想要了。我希望能够保存经过训练的神经网络,这样当我 运行 使用训练数据集反复编写代码时,它会给出相同的输出。
如果您只调用 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
在我的例子中。