【问题标题】:neural network code explanation神经网络代码解释
【发布时间】:2017-05-10 20:50:33
【问题描述】:

以下是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

我有以下问题,

(1) 这里哪一个是训练数据?

(2) 这里哪一个是测试数据?

(3) 这里的标签是什么?

【问题讨论】:

    标签: matlab neural-network perceptron


    【解决方案1】:

    训练数据为[0 0; 0 1; 1 0; 1 1] 在另一个视图中,每一行都是一组训练数据,如下所示

        >> input
    
    input =
    
     0     0
     0     1
     1     0
     1     1
    

    目标是

       desired_out =
    
     0
     1
     1
     1
    

    请考虑 desired_out 这是你的标签 .. 训练数据(输入)中的每一行在二进制集中都有一个特定的输出(标签){0,1}(因为这个例子用于实现 OR 逻辑电路。

    在matlab中你可以使用或功能如下进一步理解:

        >> or(0,0)
    
        ans =
    
            0
    
        >> or(1,0)
    
        ans =
    
            1
    
        >> or(0,1)
    
       ans =
    
           1
    
       >> or(1,1)
    
       ans =
    
           1
    

    请注意,您的代码没有任何训练测试,此代码只是试图获取感知器的权重和其他参数,但您可以通过小程序将训练测试添加到您的代码中

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

    所以测试数据将类似于下面

         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 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'})
    

    输出是

             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
    

    代码部分:

        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'})
    

    希望这对我有帮助,如果我的英语不好,我很抱歉

    【讨论】:

    • 我还有一个问题:这个程序正在使用具有 2 个特征和 1 个标签的训练数据。这就是为什么可以在二维空间中绘制它们并绘制决策边界线的原因。正确的?但是,如果有更多的功能呢?我们如何为具有两个以上特征的样本绘制决策边界?
    • 我认为 2D 空间只是为了更好地理解,如果你有超过 2 个特征,那么对于情节决策边界来说不是一个好主意,更好的主意是回答这个问题“我的分类器有多好?”您可以在 MATLAB 中使用 ROC 图,它使用决策函数。所以在这种情况下,你有决策功能,但情节不是好主意,因为情节是为了知道“我的分类器有多好?”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2015-06-08
    • 1970-01-01
    • 2021-10-11
    • 2013-10-25
    • 1970-01-01
    相关资源
    最近更新 更多