【发布时间】: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 是的,这将是第一个元素的索引
-
能否加个断点,监控
ii、NOUTPUTS(ii)和NPATS(ii)的值?或者在NOUTPUTS(ii) = NPATS(ii)之前在循环中打印它们,这样您就可以检查实际发生了什么?很奇怪,如果尺寸相同,您应该不会收到该错误。 -
我们没有足够的调试信息来回答您的问题。赏金不会有帮助。但似乎你的循环中有一些基本的逻辑错误。我建议使用调试器逐步执行循环,以验证您的代码是否正在执行您认为正在执行的操作。
标签: matlab neural-network conv-neural-network