1

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)
4

1 回答 1

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部分设置为时,它实际上使 theano 将输入从一层传播到另一层,因此当您预训练第二层时,输入将首先通过第一层传播,然后由第二层处理。train_set_x[batch_begin:batch_end]givens

如果您仔细查看本教程的末尾,有一个提示如何通过预先计算每层的显式输入来减少训练运行时间。

于 2014-07-17T18:21:17.970 回答