theano中的反卷积自动编码器

Deconvolutional autoencoder in theano

我是 theano 的新手,正在尝试使用示例 convolutional network and denoising autoencoder to make a denoising convolutional network. I am currently struggling with how to make W', the reverse weights. In this paper 他们对 W' 使用绑定权重,在两个维度上翻转。

我目前正在处理一维信号,所以我的图像形状是 (batch_size, 1, 1, 1000) 并且 filter/W 大小是 (num_kernels, 1, 1, 10) 例如。那么卷积的输出就是 (batch_size, num_kernels, 1, 991)。 因为我想让 W' 只是二维翻转(在我的例子中是 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。我不知道这是否与此问题有关,或者它是否是我的代码中存在的许多其他潜在错误之一。

我无法评论您的 W_prime 方法的有效性,但我可以说您只需要计算每个原始共享变量的成本梯度。您的 W_primeW 的符号函数,而不是共享变量本身,因此您不需要计算关于 W_prime.

的梯度

每当你得到 NaN 时,首先要尝试的是降低学习率的大小。