Matlab 回归神经网络的实现问题

Matlab 回归神经网络的实现问题,matlab,machine-learning,neural-network,regression,backpropagation,Matlab,Machine Learning,Neural Network,Regression,Backpropagation,我一直在尝试在MATLAB中实现我的第一个回归神经网络,下面是C.Bishop的“书”中231页图5.3中的示例 在此示例中,使用了两层神经网络来实现若干转换,例如sin、square、heaviside和绝对值函数。因此,输入和输出层只有一个神经元,而隐藏层有三个神经元。如图片标题所述,隐藏层使用tanh激活函数,而输出是线性的 我有时用“close”(找到所附图片中撇号的含义)来表示的唯一功能是sin。其余的离我的目标还很远。难道解决方案不应该像示例中那样适用于所有情况吗 请找到我的图片和我

我一直在尝试在MATLAB中实现我的第一个回归神经网络,下面是C.Bishop的“书”中231页图5.3中的示例

在此示例中,使用了两层神经网络来实现若干转换,例如sinsquareheaviside绝对值函数。因此,输入和输出层只有一个神经元,而隐藏层有三个神经元。如图片标题所述,隐藏层使用tanh激活函数,而输出是线性的

我有时用“close”(找到所附图片中撇号的含义)来表示的唯一功能是sin。其余的离我的目标还很远。难道解决方案不应该像示例中那样适用于所有情况吗

请找到我的图片和我的代码附件(这是一个修改版本的一个从)


正如你可能已经注意到的,我远不是这个领域的专家。如果你知道除了上面提到的书之外,还有什么在线课程/很好的参考资料,在那里我可以找到一些代码示例,我将非常感谢。请随意询问或评论任何你可以考虑的。

如果你正在寻找一个基本的机器学习课程,那么Andrew Ng在CurSera上的机器学习是一个精彩的介绍(而且还使用Matlab,这不再是一个好的补充)。如果你正在寻找一门关于神经网络学术理论(深度学习)的课程,那么试试杰弗里·辛顿(Geoffrey Hinton)的Coursera课程,我认为它被称为机器学习的神经网络(八度音阶)。请注意,这两门课程都相当古老,因此有些内容有点过时,但仍然很优秀。如果你想要一个现代实用的深度学习入门,试试fast.ai(Python,AWS)。关于你的代码,我认为如果你重构它,调试起来会容易得多。为前向传递、反向传播等提供单独的功能。如果您担心随机初始化,请尝试(但我认为这不会成为如此小的网络中的一个因素)
%% INITIALIZATION
h = [3];
X = linspace(-1,1,1000);
T = sin(X*pi);

%% NEURAL NETWORK
eta = 1/size(X,2);
h = [size(X,1);h(:);size(T,1)];
L = numel(h);
W = cell(L-1,1);
for l = 1:L-1
    W{l} = randn(h(l),h(l+1)); % Should I maybe initialize this differently?
end
Z = cell(L,1);
Z{1} = X;
maxiter = 10000;
mse = zeros(1,maxiter);
%     forward
for iter = 1:maxiter
    for l = 2:L-1
        Z{l} = tanh(W{l-1}'*Z{l-1});   % 5.10, 5.49
    end
    Z{L} = W{L-1}'*Z{L-1}; % Linear output activation function
%     backward
    E = T-Z{L}; % E = dk       
    mse(iter) =  mean(dot(E,E),1);
    dW = Z{L-1}*E';
    W{L-1} = W{L-1}+eta*dW;
    for l = L-2:-1:1
        df = 1-Z{l+1}.^2;    % Derivative of tanh function
        dj = df.*(W{l+1}*E);
        dW = Z{l}*dj';    % 5.67
        W{l} = W{l}+eta*dW;
        E = dj;
    end
end
mse = mse(1:maxiter);
model.W = W;

%% RESULTS
plot(mse);
disp(['T = [' num2str(T) ']']);
W = model.W;
Y = X;
for l = 1:length(W)-1
    Y = tanh(W{l}'*Y);
end
Y = W{length(W)}'*Y;
disp(['Y = [' num2str(Y) ']']);

figure
plot(X, T, 'o');
hold on
plot(X, Y);
legend('T (target output)','Y (trained output)', 'Location', 'southeast');
hold off