CNN-Numpy icon indicating copy to clipboard operation
CNN-Numpy copied to clipboard

请教一个fc.py里面梯度计算的问题

Open aidarikako opened this issue 6 years ago • 2 comments

楼主你好,因为conv的反向传播时计算梯度,就是用x的转置去乘上一层传递下来的梯度,为啥在fc里面变成了用上一层梯度乘x的转置呀。 就是如下代码,在fc的27行左右,为啥楼主你写的源代码如下: col_x = self.x[i][:, np.newaxis] eta_i = eta[i][:, np.newaxis].T self.w_gradient += np.dot(col_x, eta_i) 而不是这样呀: col_x = self.x[i][np.newaxis,:].T eta_i = eta[i][np.newaxis,:] self.w_gradient += np.dot(col_x, eta_i) 我刚试了一下下面这种方式也是可以正常训练的。所以我不知道是我矩阵梯度算错了,还是楼主不小心写错了,或者是两种方式都是可以的呢,希望楼主能解答一下疑惑,谢谢

aidarikako avatar Mar 17 '20 05:03 aidarikako

这两份代码是等价的兄弟 self.x[i][:, np.newaxis] == self.x[i][np.newaxis,:].T eta[i][:, np.newaxis].T == eta[i][np.newaxis,:] 注意看newaxis的位置

rongzhao-zhang avatar Jan 10 '21 09:01 rongzhao-zhang

这两份代码是等价的兄弟 self.x[i][:, np.newaxis] == self.x[i][np.newaxis,:].T eta[i][:, np.newaxis].T == eta[i][np.newaxis,:] 注意看newaxis的位置

好的,谢谢,我当时应该是一下卡住懵逼了😂

aidarikako avatar Jan 10 '21 09:01 aidarikako