Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
309 views
in Technique[技术] by (71.8m points)

matlab - neural network code explanation

The following is an implementation of a simple Perceptron supplied in a blog.

input = [0 0; 0 1; 1 0; 1 1];
numIn = 4;
desired_out = [0;1;1;1];
bias = -1;
coeff = 0.7;
rand('state',sum(100*clock));
weights = -1*2.*rand(3,1);

iterations = 10;

for i = 1:iterations
     out = zeros(4,1);
     for j = 1:numIn
          y = bias*weights(1,1)+...
               input(j,1)*weights(2,1)+input(j,2)*weights(3,1);
          out(j) = 1/(1+exp(-y));
          delta = desired_out(j)-out(j);
          weights(1,1) = weights(1,1)+coeff*bias*delta;
          weights(2,1) = weights(2,1)+coeff*input(j,1)*delta;
          weights(3,1) = weights(3,1)+coeff*input(j,2)*delta;
     end
end

I have the following questions,

(1) which one is training data here?

(2) which one is test data here?

(3) which are the labels here?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

training data is [0 0; 0 1; 1 0; 1 1] in the other view every row is one set of training data as follow

    >> input

input =

 0     0
 0     1
 1     0
 1     1

and target is

   desired_out =

 0
 1
 1
 1

please think about desired_out this is your labels .. every row in training data(input) have a specific output(label) in binary set{0,1}(because this example for implementation of OR logic circuit.

in matlab you can use or function as below for further understanding:

    >> or(0,0)

    ans =

        0

    >> or(1,0)

    ans =

        1

    >> or(0,1)

   ans =

       1

   >> or(1,1)

   ans =

       1

Note that your code has not any training test and this code just trying to get weights and other parameters of perceptron but you can add training test to your code by just little program

    NumDataTest  =  10 ;
    test=randi( [0 , 1] , [ NumDataTest , 2]) ...
       +(2*rand(NumDataTest,2)-1)/20;

so test data will be similar to below

     test =

    1.0048    1.0197
    0.0417    0.9864
   -0.0180    1.0358
    1.0052    1.0168
    1.0463    0.9881
    0.9787    0.0367
    0.9624   -0.0239
    0.0065    0.0404
    1.0085   -0.0109
   -0.0264    0.0429

for test this data you can use your own program by below code:

    for i=1:NumDataTest
        y = bias*weights(1,1)+test(i,1)*weights(2,1)+test(i,2)*weights(3,1);
        out(i) = 1/(1+exp(-y));
    end

and finally:

     table(test(:,1),test(:,2),out,'VariableNames',{'input1' 'input2' 'output'})

output is

         input1       input2       output 
        _________    _________    ________

          1.0048       1.0197     0.99994
          0.041677      0.98637     0.97668
         -0.017968       1.0358     0.97527
          1.0052       1.0168     0.99994
          1.0463      0.98814     0.99995
          0.97875     0.036674      0.9741
          0.96238    -0.023861     0.95926
          0.0064527     0.040392    0.095577
          1.0085    -0.010895     0.97118
         -0.026367     0.042854    0.080808

Code section:

    clc
    clear
    input = [0 0; 0 1; 1 0; 1 1];
    numIn = 4;
    desired_out = [0;1;1;1];
    bias = -1;
    coeff = 0.7;
    rand('state',sum(100*clock));
    weights = -1*2.*rand(3,1);

    iterations = 100;

    for i = 1:iterations
    out = zeros(4,1);
        for j = 1:numIn
           y = bias*weights(1,1)+input(j,1)*weights(2,1)+input(j,2)*weights (3,1);
           out(j) = 1/(1+exp(-y));
           delta = desired_out(j)-out(j);
           weights(1,1) = weights(1,1)+coeff*bias*delta;
           weights(2,1) = weights(2,1)+coeff*input(j,1)*delta;
           weights(3,1) = weights(3,1)+coeff*input(j,2)*delta;
        end
   end
   %% Test Section
   NumDataTest  =  10 ;
   test=randi( [0 , 1] , [ NumDataTest , 2]) ...
      +(2*rand(NumDataTest,2)-1)/20;
   for i=1:NumDataTest
       y = bias*weights(1,1)+test(i,1)*weights(2,1)+test(i,2)*weights(3,1);
       out(i) = 1/(1+exp(-y));
   end
    table(test(:,1),test(:,2),out,'VariableNames',{'input1' 'input2' 'output'})

I hope this helps and sorry for my English if it's bad


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...