def build_vis(self, l, gamma, lr):
conv_layer = self.conv_layers[l]
nonlinearity = conv_layer.nonlinearity
conv_layer.nonlinearity = lasagne.nonlinearities.identity
output_shape = layers.get_output_shape(conv_layer)
self.x_shared = theano.shared(numpy.zeros((output_shape[1], self.n_visible)).astype('float32'))
conv_out = layers.get_output(conv_layer, inputs=self.x_shared, deterministic=True)
idx = output_shape[2] / 2
cost = -T.sum(conv_out[:, :, idx, idx].diagonal()) + \
gamma * T.sum(self.x_shared**2)
updates = lasagne.updates.adadelta(cost, [self.x_shared], learning_rate=lr)
fn['train'] = theano.function([], cost, updates=updates)
conv_layer.nonlinearity = nonlinearity
return fn
评论列表
文章目录