如何重用相同的神经网络来重建我在培训/创建网络时获得的相同结果?

时间:2016-01-25 14:41:05

标签: matlab neural-network pattern-recognition

我刚刚训练了一个神经网络,我想用一个未包含在训练中的新数据集来测试它,以便检查它在新数据上的表现。这是我的代码:

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时,如何加载经过训练的网络并提供我想要测试的新数据?

  4. 请注意:我发现每次运行我的代码时,它会提供一个不同的输出,一旦我有一个可接受的结果,我就不想要了。我希望能够保存训练好的神经网络,这样当我使用训练数据集一遍又一遍地运行代码时,它会提供相同的输出。

1 个答案:

答案 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