训练网络matlab,Matlab – 神经网络训练

我正在努力创建一个带有反向传播的2层神经网络. NN应该从20001×17向量中获取其数据,该向量在每行中包含以下信息:

– 前16个单元格保存0到15之间的整数,这些整数作为变量来帮助我们确定在看到这些变量时我们要表达的26个字母中的哪一个.例如,如下的一系列16个值表示字母A:[2 8 4 5 2 7 5 3 1 6 0 8 2 7 2 7].

– 第17个单元格包含1到26之间的数字,表示我们想要的字母. 1代表A,2代表B等.

NN的输出层由26个输出组成.每当NN被输入如上所述的输入时,它应该输出包含零的1×26向量,除了与输入值要表示的字母相对应的一个单元.例如,输出[1 0 0 … 0]将是字母A,而[0 0 0 … 1]将是字母Z.

在我提出代码之前一些重要的事情:我需要使用traingdm函数,隐藏的图层编号在21处是固定的(现在).

试着创建上面的概念我编写了以下matlab代码:

%%%%%%%%

%Start of code%

%%%%%%%%

%

%Initialize the input and target vectors

%

p = zeros(16,20001);

t = zeros(26,20001);

%

%Fill the input and training vectors from the dataset provided

%

for i=2:20001

for k=1:16

p(k,i-1) = data(i,k);

end

t(data(i,17),i-1) = 1;

end

net = newff(minmax(p),[21 26],{'logsig' 'logsig'},'traingdm');

y1 = sim(net,p);

net.trainParam.epochs = 200;

net.trainParam.show = 1;

net.trainParam.goal = 0.1;

net.trainParam.lr = 0.8;

net.trainParam.mc = 0.2;

net.divideFcn = 'dividerand';

net.divideParam.trainRatio = 0.7;

net.divideParam.testRatio = 0.2;

net.divideParam.valRatio = 0.1;

%[pn,ps] = mapminmax(p);

%[tn,ts] = mapminmax(t);

net = init(net);

[net,tr] = train(net,p,t);

y2 = sim(net,pn);

%%%%%%%%

%End of code%

%%%%%%%%

现在我的问题:我希望我的输出如上所述,即y2向量的每一列例如应该是一个字母的表示.我的代码不会这样做.相反,它产生的结果在0和1之间变化很大,值从0.1到0.9.

我的问题是:我需要进行一些转换,我不是吗?意思是,我是否必须将输入和/或输出数据转换为一种形式,通过该形式我可以实际看到我的NN是否正确学习?

任何输入将不胜感激.

你可能感兴趣的:(训练网络matlab)