【发布时间】:2017-02-27 05:11:11
【问题描述】:
我尝试手动模拟由 Matlab 工具箱训练的 10 层神经网络。根据这个info,我必须将输入缩放到范围[-1,1](输出标准化为[0,1],并且还必须从[-1,1]缩小)。我与 Matlab 的 sim 函数进行比较,输出有很大的失真,如picture 所示,其中上图是手动模拟,下图是 Matlab 的 sim 函数。这是我的简单代码。
clear all;
% x = [0;0;0;0;0;0;0;1;0;0.111;0];
load etp_input;
% t = [0.45];
load etp_target;
load ETp01.mat;
iw = ETp01.IW{1,1};
lw1 = ETp01.LW{2,1};
lw2 = ETp01.LW{3,2};
lw3 = ETp01.LW{4,3};
lw4 = ETp01.LW{5,4};
lw5 = ETp01.LW{6,5};
lw6 = ETp01.LW{7,6};
lw7 = ETp01.LW{8,7};
lw8 = ETp01.LW{9,8};
lw9 = ETp01.LW{10,9};
b1 = ETp01.b{1};
b2 = ETp01.b{2};
b3 = ETp01.b{3};
b4 = ETp01.b{4};
b5 = ETp01.b{5};
b6 = ETp01.b{6};
b7 = ETp01.b{7};
b8 = ETp01.b{8};
b9 = ETp01.b{9};
b10 = ETp01.b{10};
for i=1:365
x = etp_input(:,i+19*365)*2-1;
xs = etp_input(:,i+19*365);
y1 = tansig(iw*x + b1);
y2 = tansig(lw1*y1 + b2);
y3 = tansig(lw2*y2 + b3);
y4 = tansig(lw3*y3 + b4);
y5 = tansig(lw4*y4 + b5);
y6 = tansig(lw5*y5 + b6);
y7 = tansig(lw6*y6 + b7);
y8 = tansig(lw7*y7 + b8);
y9 = tansig(lw8*y8 + b9);
y10 = purelin(lw9*y9 + b10);
outManual(i) = (y10+1)/2;
outSim(i) = sim(ETp01,xs);
end
subplot(2,1,1);
plot(outManual);
subplot(2,1,2);
plot(outSim);
我有年度数据集,这就是我执行 365 for 循环的原因。那么,我在这里错过了什么?我有大量的年度数据集,它们只是随机给出不同的输出失真(上面的代码使用第 19 组数据)。任何帮助,将不胜感激。这是代码的一部分,所以我需要提供任何进一步的信息,请告诉我。谢谢你们。 :D:D:D
已编辑:
- 我使用 nntool 创建网络并将网络对象保存在 mat 文件中。上面更新了完整的代码。
- 这是来自 Matlab 的 network view。
【问题讨论】:
-
您能否展示如何在 MATLAB 中创建您的神经网络?请尝试发布minimal reproducible example。此外,差异还不错。
-
我更新了代码并在帖子中添加了网络的图片。谢谢。
-
a1,a2,a3,a4...不是一个好主意。我建议你使用 3D 矩阵或元胞数组... -
感谢您的建议。我已经在我的 Qt 项目中移植了这个,这就是为什么我不想使用那些 3D 矩阵或单元阵列......
标签: matlab neural-network