2016-08-17 73 views
2

我正在使用张量流进行梯度正常分类。仅训练张量流中的一些变量

train_op = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 

这里cost成本函数我在优化已经使用。

sess.run(train_op, feed_dict) 

而与此,在成本函数的所有变量将被以最小的成本更新: 发动会话图形后,图形可以作为喂食。

这是我的问题。如何在训练时只更新成本函数中的一些变量..?有没有办法将创建的变量转换为常量或什么..?

+0

如果你定义自己的成本函数,可以硬写,你要不断的变量,而不是更新他们。我不知道你是否明白我的意思。 – CoMartel

+3

您可以将'GradientDescentOptimizer.minimize()'的变量列表作为var_list(参见https://www.tensorflow.org/versions/r0.10/api_docs/python/train.html#usage和https ://www.tensorflow.org/versions/r0.10/api_docs/python/train.html#Optimizer.minimize),这是否做你想要的? – fwalch

+2

查看http://stackoverflow.com/questions/35298326/freeze-some-variables-scopes-in-tensorflow-stop-gradient-vs-passing-variables?rq=1 – jean

回答

0

有几个很好的答案,这个问题应该已经被关闭: stackoverflow Quora

只是为了避免另一次点击的人到达这里:

的最小化tensorflow优化的函数需要一个var_list参数为此目的:

first_train_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, 
            "scope/prefix/for/first/vars") 
first_train_op = optimizer.minimize(cost, var_list=first_train_vars) 

second_train_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, 
             "scope/prefix/for/second/vars")      
second_train_op = optimizer.minimize(cost, var_list=second_train_vars) 

我把它从mrry

要得到名称列表,你应该使用,而不是"scope/prefix/for/second/vars"你可以使用:

tf.get_default_graph().get_collection_ref(tf.GraphKeys.TRAINABLE_VARIABLES) 
相关问题