【问题标题】:MATLAB Neural Network - Forward PropagationMATLAB 神经网络 - 前向传播
【发布时间】:2021-09-29 22:15:18
【问题描述】:

我正在创建前向传播 在前馈步骤中,输入模式通过网络传播以获得输出。我已经用伪代码编写了这个,目前正在尝试在 MATLAB 中实现它。

我目前收到两个错误。

Patterns = x'; Desired = y; NHIDDENS = 1; prnout=Desired;
% Patterns become x so number of inputs becomes size of patterns

[NINPUTS,NPATS] = size(Patterns); [NOUTPUTS,NP] = size(Desired);
%apply the backprop here...

LearnRate = 0.15; Momentum = 0; DerivIncr = 0; deltaW1 = 0; deltaW2 = 0;
% Keeps the tan ordering of the examples of x
Inputs1= [Patterns;ones(1,NPATS)]; %Inputs1 = [ones(1,NPATS); Patterns];
% Weight initialisation
Weights1 = 0.5*(rand(NHIDDENS,1+NINPUTS)-0.5);
Weights2 = 0.5*(rand(1,1+NHIDDENS)-0.5); 
TSS_Limit = 0.02;

for epoch = 1:10
    
%     FORWARD LOOP 

size(NOUTPUTS)
size(NPATS)
    for ii = 0: ii < length(NINPUTS)
        NOUTPUTS(ii+1) = NPATS(ii);
%         Sets bias to 1
        NOUTPUTS(1) = 1;
    end
    for ii = NHIDDENS: ii < NINPUTS 
        sum = 0;
        for ij = 0: ij < ii
            sum = sum + deltaW1(ii,ij) * NOUTPUTS(ij);
            NOUTPUTS(ii) = tanh(sum);
        end
            
    end


Unable to perform assignment because the
left and right sides have a different
number of elements.

Error in mlpts (line 66)
        NOUTPUTS(i+1) = NPATS(i);

我还是 MATLAB 的新手,正在努力适应它。

遍历循环后 NOUTPUTS = 0 并显示错误。我很困惑,因为我试图通过每个循环将带有 ii 的 NOUTPUTS 增加 1。

【问题讨论】:

  • “数组索引必须是整数或逻辑值。”NOUTPUTS(0)中,0不是正整数。 Matlab 数组索引是从 1 开始的
  • MATLAB 索引从 1 开始,而不是 0
  • @EricaSantos 是的,这将是第一个元素的索引
  • 能否加个断点,监控iiNOUTPUTS(ii)NPATS(ii)的值?或者在NOUTPUTS(ii) = NPATS(ii) 之前在循环中打印它们,这样您就可以检查实际发生了什么?很奇怪,如果尺寸相同,您应该不会收到该错误。
  • 我们没有足够的调试信息来回答您的问题。赏金不会有帮助。但似乎你的循环中有一些基本的逻辑错误。我建议使用调试器逐步执行循环,以验证您的代码是否正在执行您认为正在执行的操作。

标签: matlab neural-network conv-neural-network


【解决方案1】:

我已经能够使用循环创建前向传播。

    for i =3:NNODES
      summ = 0;
      for j=1:i-1
          summ = summ + weights(i,j) * Node_outputs(j);
      end
      if i == NNODES
          Node_outputs(i) = summ
      else
          Node_outputs(i) = sigmoid(summ);
      end
  end
  Out = Node_outputs(NNODES);
%   BOut = ((Node_outputs(NNODES)) * (1 - Node_outputs));
  BOut=zeros(1,6);
  DeltaWeight = zeros(6,6);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2012-02-21
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多