Matlab:如何在神经网络中禁用验证和测试数据集

时间:2017-03-22 14:40:08

标签: matlab

我需要使用训练集中的整个数据集训练patternnet神经网络,而不是用于验证或测试。我发现了两种方法,它们在命令窗口中运行良好,但在脚本中却没有,返回错误。

方法1:

mynet.divideFcn = '';

方法2:

mynet.divideParam.trainRatio = 1;
mynet.divideParam.valRatio   = 0;
mynet.divideParam.testRatio  = 0;

和代码:

mynet=patternnet([]);

P=rand(10,1000);
T=rand(2,1000);

[mynet,tr]=train(mynet,P,T);

使用 Matlab R2012b Windows XP 32位

1 个答案:

答案 0 :(得分:1)

为什么你不能在脚本中使用任何一种方法?

将问题的不同部分放在一个脚本中,如下所示在2015b中运行没有错误...

mynet=patternnet([]);
% Edit mynet before training it
mynet.divideParam.trainRatio = 1;
mynet.divideParam.valRatio   = 0;
mynet.divideParam.testRatio  = 0;

P=rand(10,1000);
T=rand(2,1000);

[mynet,tr]=train(mynet,P,T);

修改

您的难度可能是使用2012b语法的细微变化,因此参考旧文档很好:

https://uk.mathworks.com/help/releases/R2012b/nnet/ref/patternnet.html

您希望使用dividetrain,它会为您的数据指定索引,完全用于培训。

  

[trainInd,valInd,testInd] = dividetrain(Q,trainRatio,valRatio,testRatio)将所有目标分配给训练集,而不将任何目标分配给验证或测试集

Inputs:
Q = Number of targets to divide up.
Ratios = ratios of each data use type

Outputs:
trainInd = Training indices equal to 1:Q
valInd = Empty validation indices, []
testInd = Empty test indices, []

在您的情况下,您可以手动创建此功能,但值得了解这些功能是否存在,例如,如果您需要特定比率,请使用divideint

然后尝试使用

P=rand(10,1000);
T=rand(2,1000);

mynet=patternnet([]);
% Edit mynet before training it
mynet.divideParam.trainInd = trainInd; % 1:size(P,1)
mynet.divideParam.valInd   = valInd;   % []
mynet.divideParam.testInd  = testInd;  % []

[mynet,tr]=train(mynet,P,T);

注意:我没有2012b,因此无法为您完全测试。