【发布时间】:2018-10-20 22:14:46
【问题描述】:
我正在尝试为具有任意激活函数的全连接层实现反向传播方法。我理解算法背后的一般思想和数学,但我在理解矢量化形式时遇到了困难......
我需要帮助了解元素的预期尺寸
已知尺寸:
- 输入 - self.X 是大小 (N,128)
- 重量 - self.W 是尺寸 (128,10)
- 偏差 - self.b 是大小 (128,10)
- 输出 - self.y 是大小 (N,10)
- 线性输出(激活前) - self.z 的大小为 (N,10)
尺寸未知: N=1(示例数)
- dy - 下一层的梯度 - 应该是什么大小?
- dz - 激活函数的导数 - 它应该是什么大小?
- self.d - 当前层的梯度 - 应该是什么大小?
这是我的代码:
def backward(self, dy):
if self.activator == 'relu':
dz = np.zeros((self.z.shape[0], self.z.shape[1]))
dz[self.z>0] = 1
elif self.activator == 'sigmoid':
dz = self.z * (1 - self.z)
elif self.activator == 'soft-max':
s = self.z.reshape(-1, 1)
dz = np.diagflat(s) - np.dot(s, s.T)
elif self.activator == 'none':
dz = 1
self.d = np.dot((dz * dy), self.W.T) # the error of the layer
self.W_grad = np.dot(self.X.T, dy) # The weight gradient of the layer
self.b_grad = np.sum(dy, axis=0).reshape(1, -1) # The bias gradient of the layer
【问题讨论】:
标签: python numpy neural-network backpropagation