2016-11-11 136 views
4

下面的代码我已经写了,失败在self.optimizer.compute_gradients(self.output,all_variables)tensorflow中optimizer.compute_gradient()和tf.gradients()之间的区别是什么?

import tensorflow as tf 
import tensorlayer as tl 
from tensorflow.python.framework import ops 
import numpy as np 

class Network1(): 


def __init__(self): 
    ops.reset_default_graph() 
    tl.layers.clear_layers_name() 

    self.sess = tf.Session() 
    self.optimizer = tf.train.AdamOptimizer(learning_rate=0.1) 

    self.input_x = tf.placeholder(tf.float32, shape=[None, 784],name="input") 

    input_layer = tl.layers.InputLayer(self.input_x)   

    relu1 = tl.layers.DenseLayer(input_layer, n_units=800, act = tf.nn.relu, name="relu1") 
    relu2 = tl.layers.DenseLayer(relu1, n_units=500, act = tf.nn.relu, name="relu2") 

    self.output = relu2.all_layers[-1] 
    all_variables = relu2.all_layers 

    self.gradient = self.optimizer.compute_gradients(self.output,all_variables) 

    init_op = tf.initialize_all_variables() 
    self.sess.run(init_op) 

与警告,

TypeError: Argument is not a tf.Variable: Tensor("relu1/Relu:0", shape=(?, 800), dtype=float32)

然而,当我把上面一行tf.gradients(self.output,all_variables),代码工作正常,至少没有报告警告。我在哪里错过了,因为我认为这两个方法实际上是在执行相同的事情,即返回(渐变,变量)对的列表。

+0

'tensorlayers'是什么?我们有'tf.contrib.layers'。 – drpng

回答

3

optimizer.compute_gradients包装tf.gradients(),你可以看到here。它做了额外的断言(这解释了你的错误)。

+0

感谢您的回答,但为什么我们需要额外的断言? – ytutow

相关问题