请教一个fc.py里面梯度计算的问题
楼主你好,因为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) 我刚试了一下下面这种方式也是可以正常训练的。所以我不知道是我矩阵梯度算错了,还是楼主不小心写错了,或者是两种方式都是可以的呢,希望楼主能解答一下疑惑,谢谢
这两份代码是等价的兄弟 self.x[i][:, np.newaxis] == self.x[i][np.newaxis,:].T eta[i][:, np.newaxis].T == eta[i][np.newaxis,:] 注意看newaxis的位置
这两份代码是等价的兄弟 self.x[i][:, np.newaxis] == self.x[i][np.newaxis,:].T eta[i][:, np.newaxis].T == eta[i][np.newaxis,:] 注意看newaxis的位置
好的,谢谢,我当时应该是一下卡住懵逼了😂