gpt4 book ai didi

matlab - 反向传播误差在 3 个 epoch 后并没有减少!初学者需要帮助 MATLAB

转载 作者:行者123 更新时间:2023-11-30 09:56:18 25 4
gpt4 key购买 nike

在开始之前,我想先说一下,我是十月份才开始编码的,所以如果有点笨拙,请原谅。

我一直在尝试为我一直在做的一个项目制作 MLP。我有隐藏层(Sigmoid)和输出层(softmax),它们似乎工作正常。然而,当我计算反向传播时,我的误差最初减小,然后在两个不同的值之间交替。

参见下图,epoch(x) 与 error(y) 的关系图。

我尝试了多种不同的学习率、不同的时期数、不同的随机初始权重。我能想到的一切,但我总是遇到同样的问题。我还将数据和目标标准化为 0-1 之间的值。

在大幅降低学习率后,我得到了一个更平滑的图表,但在前几个时期之后仍然没有减少很多错误。例如,当使用 10/50/100 epoch 的训练时,4-5 epoch 后几乎没有减少。我是否达到了局部最小值,我可以改进吗

任何人都可以阐明为什么会发生这种情况并建议可以解决问题的代码吗?我真的很感激

我已附上用于反向传播算法的代码。

function [deltaW1, deltaW2,error] = BackProp(input,lr,MLPout,weightsL2,targ,outunits,outofhid)
%This function returns a new set of updated weights for layer 1 and layer 2
% These weights replace the previous set to improve generalisation

%% Finding the derivative of the Sigmoid
DerivativeS = outofhid.*(ones(size(outofhid)) - outofhid);

%% Finding delta2
error = zeros(10,length(MLPout));
for y = 1:length(outunits)
for j = 1:length(MLPout)
error(y,j) = (targ(j) - MLPout(y,j));
end
end
%finding delta x weights two - the new weights between the hidden layer and output layer

deltaW2 = lr.*(error*outofhid');

%finding delta one - the new weights between the input layer and hidden layer


deltaW1 = lr*(((error'*weightsL2').*DerivativeS')'*input);
deltaW1 = deltaW1';
end

最佳答案

从你的代码看来,你的错误可能会得到负值。尝试将欧几里得距离作为成本函数。类似于:

error(y,j) = sqrt ( (targ(j) - MLPout(y,j))^2 )

还有其他成本函数通常比欧几里德距离效果更好(因为它们“更凸”并且不太可能陷入局部最小值)。例如,负对数似然是不错的选择之一。提供了一些解释和Python代码here 。对于 MATLAB 实现,您可能会找到 this page有帮助。

关于matlab - 反向传播误差在 3 个 epoch 后并没有减少!初学者需要帮助 MATLAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27627973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com