使用numpy实现卷积层权重后的梯度没有非线性之后,我遇到了问题。到目前为止,我已经尝试过类似的操作(我是代码的新手,我知道它很丑):
def grads_wrt_params(self, inputs, grads_wrt_outputs):
k0 = self.kernels.shape[0]
k1 = self.kernels.shape[1]
k2 = self.kernels.shape[2]
k3 = self.kernels.shape[3]
x = np.ndarray(shape = (inputs.shape[0], k1, k2, k3))
for i in range(0,inputs.shape[0]):
for j in range(0, self.kernels.shape[0]):
y = np.zeros((k2,k3))
for s in range(0, inputs.shape[1]):
y += signal.convolve2d(grads_wrt_outputs[i,j,:,:],inputs[i,s,:,:], mode = 'valid')
x[i,j,:,:] = y
return x
其中inputs.shape =(图像数,通道数,宽度,高度) kernels.shape =(输出过滤器的数量,输入通道的数量,width1,height1)
我在做什么错了?