【问题标题】:Single layer neural network [closed]单层神经网络
【发布时间】:2011-03-28 04:57:54
【问题描述】:

对于单层神经网络的实现,我有两个数据文件。

In:
    0.832 64.643
    0.818 78.843

Out:
    0 0 1
    0 0 1

以上是2个数据文件的格式。

对应输入所属的特定类的目标输出为“1”,其余 2 个输出的目标输出为“0”。

问题如下:

您的单层神经网络将 找到 A(3 x 2 矩阵)和 b(3 x 1 向量) 在 Y = A*X + b 其中 Y 是 [C1, C2, C3]' 和 X 是 [x1, x2]'。

为了解决上面的问题 神经网络,我们可以重写 方程如下: Y = A' * X' 其中 A' = [A b](3 x 3 矩阵)并且 X' 是 [x1, x2, 1]'

现在您可以使用神经网络 三个输入节点(一个用于 x1、x2 和 1 分别)和三个输出(C1, C2,C3)。

得到的 9(因为我们有 9 3 个输入和 3 个之间的连接 输出)权重将相当于 A' 矩阵的元素。

基本上,我正在尝试做这样的事情,但它不起作用:

function neuralNetwork   
    load X_Q2.data
    load T_Q2.data
    x = X_Q2(:,1);
    y = X_Q2(:,2);

    learningrate = 0.2;
    max_iteration = 50;

    % initialize parameters
    count = length(x);
    weights = rand(1,3); % creates a 1-by-3 array with random weights
    globalerror = 0;
    iter = 0;
    while globalerror ~= 0 && iter <= max_iteration
        iter = iter + 1;
        globalerror = 0;
        for p = 1:count
            output = calculateOutput(weights,x(p),y(p));
            localerror = T_Q2(p) - output
            weights(1)= weights(1) + learningrate *localerror*x(p);
            weights(2)= weights(1) + learningrate *localerror*y(p);
            weights(3)= weights(1) + learningrate *localerror;
            globalerror = globalerror + (localerror*localerror);
        end 
    end 

我在其他文件中编写此函数并在我之前的代码中调用它。

function result = calculateOutput (weights, x, y)
    s = x * weights(1) + y * weights(2) + weights(3);
    if s >= 0
        result = 1;
    else
        result = -1;
    end

【问题讨论】:

    标签: matlab artificial-intelligence classification perceptron


    【解决方案1】:

    我可以发现代码的一些问题。主要问题是目标是multi-class(不是binary),因此您需要为每个类使用3个输出节点(称为1-of-N encoding),或者使用具有不同activation function的单个输出节点(不仅仅是二进制输出 -1/1 或 0/1)

    在下面的解决方案中,perceptron 具有以下结构:

    %# load your data
    input = [
        0.832 64.643
        0.818 78.843
        1.776 45.049
        0.597 88.302
        1.412 63.458
    ];
    target = [
        0 0 1
        0 0 1
        0 1 0
        0 0 1
        0 0 1
    ];
    
    %# parameters of the learning algorithm
    LEARNING_RATE = 0.1;
    MAX_ITERATIONS = 100;
    MIN_ERROR = 1e-4;
    
    [numInst numDims] = size(input);
    numClasses = size(target,2);
    
    %# three output nodes connected to two-dimensional input nodes + biases
    weights = randn(numClasses, numDims+1);
    
    isDone = false;               %# termination flag
    iter = 0;                     %# iterations counter
    while ~isDone
        iter = iter + 1;
    
        %# for each instance
        err = zeros(numInst,numClasses);
        for i=1:numInst
            %# compute output: Y = W*X + b, then apply threshold activation
            output = ( weights * [input(i,:)';1] >= 0 );                       %#'
    
            %# error: err = T - Y
            err(i,:) = target(i,:)' - output;                                  %#'
    
            %# update weights (delta rule): delta(W) = alpha*(T-Y)*X
            weights = weights + LEARNING_RATE * err(i,:)' * [input(i,:) 1];    %#'
        end
    
        %# Root mean squared error
        rmse = sqrt(sum(err.^2,1)/numInst);
        fprintf(['Iteration %d: ' repmat('%f ',1,numClasses) '\n'], iter, rmse);
    
        %# termination criteria
        if ( iter >= MAX_ITERATIONS || all(rmse < MIN_ERROR) )
            isDone = true;
        end
    end
    
    %# plot points and one-against-all decision boundaries
    [~,group] = max(target,[],2);                     %# actual class of instances
    gscatter(input(:,1), input(:,2), group), hold on
    xLimits = get(gca,'xlim'); yLimits = get(gca,'ylim');
    for i=1:numClasses
        ezplot(sprintf('%f*x + %f*y + %f', weights(i,:)), xLimits, yLimits)
    end
    title('Perceptron decision boundaries')
    hold off
    

    您提供的五个样本的训练结果:

    Iteration 1: 0.447214 0.632456 0.632456 
    Iteration 2: 0.000000 0.447214 0.447214 
    ...
    Iteration 49: 0.000000 0.447214 0.447214 
    Iteration 50: 0.000000 0.632456 0.000000 
    Iteration 51: 0.000000 0.447214 0.000000 
    Iteration 52: 0.000000 0.000000 0.000000 
    

    请注意,上面示例中使用的数据仅包含 5 个样本。如果您在每个类中有更多的训练实例,您将获得更有意义的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-02
      • 2012-09-22
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 2013-03-02
      • 1970-01-01
      相关资源
      最近更新 更多