我是theano的新手并尝试使用示例convolutional network和denoising autoencoder来制作一个去噪卷积网络。我目前正在努力研究如何制作反向重量的W' In this paper他们使用绑定权重W'在两个维度上翻转。
我正在处理1d信号,因此我的图像形状为(batch_size,1,1,1000),滤镜/ 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是否也是渐变计算的一部分?
当我这样做时,MSE在第一个小批量之后会下降很多,然后停止更改。使用交叉熵从第一次迭代中给出NaN。我不知道这是否与此问题有关,或者是否是我在代码中遇到的许多其他潜在错误之一。
答案 0 :(得分:1)
我无法对W_prime
方法的有效性发表评论,但我可以说您只需计算每个原始共享变量的成本梯度。您的W_prime
是W
的符号函数,而不是共享变量本身,因此您不需要计算W_prime
的渐变。
每当你获得NaN时,首先要尝试的是减少学习率的大小。