Python theano中的反褶积自动编码器

Python theano中的反褶积自动编码器,python,machine-learning,theano,Python,Machine Learning,Theano,我对theano是新手,尝试使用这些示例并制作一个去噪卷积网络。我目前正在努力研究如何制作W',反向配重。他们使用在两个维度上都翻转的W'的捆绑权重 我目前正在处理1d信号,因此我的图像形状是(batch_size,1,1,1000),而filter/W大小是(num_kernels,1,1,10)。然后,卷积的输出是(批大小,num内核,1991)。 因为我想在二维空间(或者在我的例子中是一维空间)中翻转,所以我很想这样做 w_value = numpy_rng.uniform(low=-W_

我对theano是新手,尝试使用这些示例并制作一个去噪卷积网络。我目前正在努力研究如何制作W',反向配重。他们使用在两个维度上都翻转的W'的捆绑权重

我目前正在处理1d信号,因此我的图像形状是(batch_size,1,1,1000),而filter/W大小是(num_kernels,1,1,10)。然后,卷积的输出是(批大小,num内核,1991)。 因为我想在二维空间(或者在我的例子中是一维空间)中翻转,所以我很想这样做

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_素数也应该是梯度计算的一部分


当我这样做时,MSE在第一个小批量之后下降很多,然后停止改变。使用交叉熵从第一次迭代得到NaN。我不知道这是否与这个问题有关,或者这是否是我代码中的许多其他潜在错误之一。

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


无论何时得到NaN,首先要尝试的是降低学习率。

好的,那么我只需要将W'作为W的一个符号函数。据我所知,repeat没有梯度运算。我把学习速度降低了几个数量级,你是对的,现在没有问题了。在最初的几个时期,成本就这样下降了[800,44,34,30,27]。第一个下降是非常剧烈的,我认为这可能与数据相当同质有关,想法?您最初发布的代码行已经使
W_prime
成为
W
的一个符号函数(
T.repeat
是一个符号操作,就像
[:,:,:,:-1]
索引操作一样)。初始成本的大幅下降不一定是需要担心的,但可能表明参数的初始化很差。