在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)
答案 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的结尾,可以通过预先计算每层的显式输入来提示如何减少训练运行时间。