title: Matlab - Neural network training
body: <p>I'm working on creating a 2 layer neural network with back-propagation. The NN is supposed to get its data from a 20001x17 vector that holds following information in each row:</p>
  
  <p>-The first 16 cells hold integers ranging from 0 to 15 which act as variables to help us determine which one of the 26 letters of the alphabet we mean to express when seeing those variables. For example a series of 16 values as follows are meant to represent the letter A: [2 8 4 5 2 7 5 3 1 6 0 8 2 7 2 7].</p>
  
  <p>-The 17th cell holds a number ranging from 1 to 26 representing the letter of the alphabet we want. 1 stands for A, 2 stands for B etc.</p>
  
  <p>The output layer of the NN consists of 26 outputs. Every time the NN is fed an input like the one described above it's supposed to output a 1x26 vector containing zeros in all but the one cell that corresponds to the letter that the input values were meant to represent. for example the output [1 0 0 ... 0] would be letter A, whereas [0 0 0 ... 1] would be the letter Z.</p>
  
  <p>Some things that are important before i present the code: I need to use the traingdm function and the hidden layer number is fixed (for now) at 21.</p>
  
  <p>Trying to create the above concept i wrote the following matlab code:</p>
  
  <pre><code>%%%%%%%%
  %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%
  %%%%%%%%
  </code></pre>
  
  <p>Now to my problem: I want my outputs to be as described, namely each column of the y2 vector for example should be a representation of a letter. My code doesn't do that though. Instead it produced results that vary greatly between 0 and 1, values from 0.1 to 0.9.</p>
  
  <p>My question is: is there some conversion i need to be doing that i am not? Meaning, do i have to convert my input and/or output data to a form by which i can actually see if my NN is learning correctly?</p>
  
  <p>Any input would be appreciated.</p>