Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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

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

1 Answer

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share

548k questions

547k answers

4 comments

86.3k users

...