反向传播错误

我正在尝试从头开始实现反向传播。虽然我的成本在减少,但梯度检查显示出惊人的 0.767399376130221。我一直在试图找出问题所在,并设法将代码精简到以下几行:

 def forward(self,X,y):    z2 = self.params_l1.dot(X.T)     a2 = self.sigmoid(z2)     z3 = self.params_l2.dot(a2)     a3 = self.sigmoid(z3)    loss = self.cross_entropy(a3,y)    return a3,loss,z2,a2,z3def backward(self,X,y):    n_examples = len(X)    yh,loss,Z2,A2,Z3 =  self.forward(X,y)    delta3 = np.multiply(-(yh - y),self.dsigmoid(Z3))     delta2 = (np.dot(self.params_l2.T,delta3))*self.dsigmoid(Z2)     de3 = np.dot(delta3,A2.T)    de2 = np.dot(delta2,X)    self.params_l2 =  self.params_l2 -  self.lr * (de3 /n_examples)    self.params_l1 =  self.params_l1 - self.lr *  (de2 / n_examples)    return de3/n_examples ,de2 /n_examples

这是一个简单的(2,2,1)多层感知器。我使用交叉熵作为损失函数。我遵循链式法则进行反向传播。我怀疑问题可能出在乘积的顺序上,但我尝试了各种方法,仍然没有成功。


回答:

通过仅计算 delta3yh - y 且没有进一步的乘法,我设法得到了 1.7250119005319425e-10 的差异。现在我需要找出为什么会这样。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注