Stacked DenoisingAutoencoders的Theano实现 - 为什么dA层的输入相同?

时间:2014-07-07 08:40:34

标签: python machine-learning neural-network theano autoencoder

http://deeplearning.net/tutorial/SdA.html#sda上的Stacked DenoisingAutoencoders教程中,pretraining_functions返回表示每个dA层的训练函数的函数列表。但我不明白为什么它给所有dA层提供相同的输入(train_set_x)。实际上,除了第一个dA层之外,每个dA层的输入应该是下面层的输出。谁能告诉我为什么这些代码是正确的?

pretrain_fns = []
for dA in self.dA_layers:
    # get the cost and the updates list
    cost, updates = dA.get_cost_updates(corruption_level, learning_rate)
    # compile the theano function
    fn = theano.function(inputs=[index,
                      theano.Param(corruption_level, default=0.2),
                      theano.Param(learning_rate, default=0.1)],
            outputs=cost,
            updates=updates,
            givens={self.x: train_set_x[batch_begin:batch_end]})
    # append `fn` to the list of functions
    pretrain_fns.append(fn)

1 个答案:

答案 0 :(得分:0)

由于每个隐藏层的输入都配置为前一层的输出:

# the input to this layer is either the activation of the hidden
# layer below or the input of the SdA if you are on the first
# layer
if i == 0:
    layer_input = self.x
else:
    layer_input = self.sigmoid_layers[-1].output

在预训练函数的self.x部分中将train_set_x[batch_begin:batch_end]设置为givens时,实际上会让theano将输入从一个层传播到另一个层,因此当您预先训练第二个图层时输入将首先通过第一层传播,然后由第二层处理。

如果仔细观察tutorial的结尾,可以通过预先计算每层的显式输入来提示如何减少训练运行时间。