2016-11-11 3 views
4

私が書いた次のコードは、私がtf.gradients(self.output,all_variables)にその行を変更したときに、コードは、正常に動作し、少なくとも警告が報告されていないが、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)

を失敗しました。私はこれら2つのメソッドが実際に同じことを実行していると思うので、どこから逃したのでしょうか?それは、(勾配、可変の)ペアのリストを返します。

+0

テンソルレイヤーとは何ですか?我々は 'tf.contrib.layers'を持っています。 – drpng

答えて

3

optimizer.compute_gradientsは、hereのように、tf.gradients()をラップします。それは追加のアサートを行います(エラーを説明しています)。

+0

あなたの答えをありがとう、なぜ我々は追加のアサーションが必要ですか? – ytutow

関連する問題