我一直在 MATLAB 中编写自己的多层感知器,它编译时没有错误。我的训练数据特征 x 的值从 1 到 360,训练数据输出 y 的值是。
问题是我的 MLP 只会降低前几次迭代的成本,并且会卡在 0.5。我试过包括动量,但它没有帮助,增加层数或增加神经元根本没有帮助。我不确定为什么会这样。
我已在此处上传文件供您参考。
我的代码摘要是:
我使用 min-max 或 zscore 规范化我的输入数据
在 -1 到 1 的范围内初始化随机权重和偏差
for i = 1:length(nodesateachlayer)-1 weights{i} = 2*rand(nodesateachlayer(i),nodesateachlayer(i+1))-1; bias{i} = 2*rand(nodesateachlayer(i+1),1)-1; end然后,我做一个前向传递,其中输入乘以权重并加上偏差,然后由传递函数(sigmoid)激活
for i = 2:length(nodesateachlayer) stored{i} = nactivate(bsxfun(@plus,(weights{i-1}'*stored{i-1}),bias{i-1}),activation); end然后计算误差然后做一个反向传递
dedp = 1/length(normy)*error; for i = length(stored)-1:-1:1 dpds = derivative(stored{i+1},activation); deds = dpds'.*dedp; dedw = stored{i}*deds; dedb = ones(1,rowno)*deds; dedp = (weights{i}*deds')'; weights{i}=weights{i}-rate.*dedw; bias{i}=bsxfun(@minus,bias{i},rate.*dedb'); end我在每次迭代中都绘制了成本以查看下降情况
我认为代码有问题,那么错误可能出在哪里?

