我是theano的新手,并尝试使用示例卷积网络和去噪自动编码器来制作去噪卷积网络。我目前正在努力制作反向重量W'。在本文中,他们将W'的绑定权重在两个维度上都翻转了。
我目前正在处理1d信号,因此我的图像形状是(batch_size,1,1,1000),而filter / W大小是(num_kernels,1,1,10)。卷积的输出为(batch_size,num_kernels,1,991)。由于我想将W'仅仅翻转为2维(在我的情况下为1d),因此我很想这样做
w_value = numpy_rng.uniform(low=-W_bound, high=W_bound, size=filter_shape)
self.W = theano.shared(np.asarray((w_value), dtype=theano.config.floatX), borrow=True)
self.W_prime = T.repeat(self.W[:, :, :, ::-1], num_kernels, axis=1)
在这里我将其反向翻转到相关尺寸,然后重复这些权重,以使它们与隐藏层中的要素贴图相同。
使用此设置,我是否仅需要获取W的梯度即可更新,还是W_prime也应作为grad计算的一部分?
当我这样做时,MSE在第一次minibatch之后下降很多,然后停止更改。使用交叉熵可以从第一次迭代中得出NaN。我不知道这是否与此问题有关,或者它是否是我的代码中存在的许多其他潜在错误之一。
我无法评论您的W_prime
方法的有效性,但是我可以说您只需要针对每个原始共享变量计算成本的梯度。您W_prime
是的符号函数W
,而不是共享变量本身,因此您无需计算相对于的梯度W_prime
。
每当您获得NaN时,首先要尝试的是减小学习率的大小。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句