Matlab 反向传播公式似乎是不可实现的
我一直在努力提高对反向传播的熟练程度,并且已经了解了用于反向传播的标准数学公式。我实现了一个似乎工作正常的解决方案(并以优异成绩通过了相关测试) 然而。。。实际解(在MATLAB中实现,并使用矢量化)在两个重要方面与公式不一致 公式如下所示:Matlab 反向传播公式似乎是不可实现的,matlab,machine-learning,backpropagation,Matlab,Machine Learning,Backpropagation,我一直在努力提高对反向传播的熟练程度,并且已经了解了用于反向传播的标准数学公式。我实现了一个似乎工作正常的解决方案(并以优异成绩通过了相关测试) 然而。。。实际解(在MATLAB中实现,并使用矢量化)在两个重要方面与公式不一致 公式如下所示: % d3 is delta3, d2 is delta2, Theta2 is minus the bias column % dimensions: d3--[5000x10], d2--[5000x25], Theta2--[10x25] d3 =
% d3 is delta3, d2 is delta2, Theta2 is minus the bias column
% dimensions: d3--[5000x10], d2--[5000x25], Theta2--[10x25]
d3 = (a3 - y2);
d2 = (d3 * Theta2) .* gPrime(z2);
delta-layer2=(θ-layer2转置)x delta-layer3点x gprime(--现在不重要)
工作代码如下所示:
% d3 is delta3, d2 is delta2, Theta2 is minus the bias column
% dimensions: d3--[5000x10], d2--[5000x25], Theta2--[10x25]
d3 = (a3 - y2);
d2 = (d3 * Theta2) .* gPrime(z2);
我无法将我实现的与数学公式相协调,原因有两个:
Josh这不是一个错误的问题,我不知道为什么那些反对票;反向传播算法的实现看起来并不直观。我的数学不是很好,也从未使用过MATLAB(通常是c),所以我避免先回答这个问题,但这是我应得的 首先,我们必须做一些简化 1°我们将在_数据中只使用
设置:向量在_数据中[N]
(在下面的情况下,N=2)(如果我们成功,仅使用pat并不难在矩阵中扩展它)
2°我们将使用这个结构:2 I,2 H,2 O(我用这个成功了;我们用所有的成功了)这个网络(我从:)
让我们开始:我们知道要更新权重:
注意:M=num\u pattern
,但我们之前在\u data中将声明为向量,因此您可以删除上面公式中的和以及下面公式中的矩阵。这就是你的新公式:
我们将研究两个连接:w1和w5。让我们写出导数:
让我们编写代码:(我真的不懂MATLAB,所以我将编写一个伪代码)
vector d[num\u connections+num\u output\u neurons]//num derivatives=num connections,不带计数偏差有8个连接+2(O的导数)
向量z[num_neurons]//z是每个神经元的输出。
向量w[num\u connections]//是向量!我们已经移除了前面的矩阵和和。
//O层
d[10]=(a[O1]-y[O1]);//从最后开始计算误差。
d[9]=(a[O2]-y[O2]);
//H->O层
对于i=5;i H层
对于i=1;我这不是一个错误的问题,我不知道为什么那些反对票;反向传播算法的实现看起来并不直观。我的数学不是很好,也从未使用过MATLAB(通常是c),所以我避免先回答这个问题,但这是我应得的
首先,我们必须做一些简化
1°我们将在_数据中只使用
设置:向量在_数据中[N]
(在下面的情况下,N=2)(如果我们成功,仅使用pat并不难在矩阵中扩展它)
2°我们将使用这个结构:2 I,2 H,2 O(我用这个成功了;我们用所有的成功了)这个网络(我从:)
让我们开始:我们知道要更新权重:
注意:M=num\u pattern
,但我们之前在\u data
中将声明为向量,因此您可以删除上面公式中的和以及下面公式中的矩阵。这就是你的新公式:
我们将研究两个连接:w1和w5。让我们写出导数:
让我们编写代码:(我真的不懂MATLAB,所以我将编写一个伪代码)
vector d[num\u connections+num\u output\u neurons]//num derivatives=num connections,不带计数偏差有8个连接+2(O的导数)
向量z[num_neurons]//z是每个神经元的输出。
向量w[num\u connections]//是向量!我们已经移除了前面的矩阵和和。
//O层
d[10]=(a[O1]-y[O1]);//从最后开始计算误差。
d[9]=(a[O2]-y[O2]);
//H->O层
对于i=5;i H层
对于i=1;iIt可能仅仅取决于设置,两个实现如何定义矩阵。注意,你不能用给定的尺寸做θ2.*d2。哦,我注意到了。这就是促使我首先提出这个问题的原因。这可能取决于设置,以及两个实现如何定义矩阵。注意,你不能用给定的尺寸做θ2.*d2。哦,我注意到了。这就是促使我首先提出这个问题的原因。