私が書いた次のコードは、私が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つのメソッドが実際に同じことを実行していると思うので、どこから逃したのでしょうか?それは、(勾配、可変の)ペアのリストを返します。
テンソルレイヤーとは何ですか?我々は 'tf.contrib.layers'を持っています。 – drpng