张量流:在创建和评估图形时传递bool变量

时间:2017-02-21 14:13:36

标签: machine-learning tensorflow

我想传递一个布尔值,在我评估图形时可以改变它。我在下面发布我的代码:

import tensorflow as tf
from tensorflow.python.ops import control_flow_ops

def my_model(input, is_freeze):
      trainable = tf.cond(is_freeze, lambda: tf.constant(False), 
                          lambda: tf.constant(True))   #Try 3
      #trainable = tf.cond(is_freeze, lambda: False, lambda: True) # Try 1
      #trainable = tf.logical_not(is_freeze)  # Try 2
      fc1_W = tf.get_variable('fc1_W', trainable = trainable, 
                              initializer = tf.zeros(100, 2))
      fc1 = tf.matmul(input, fc1_W)
      return fc1

tf.reset_default_graph()
X = tf.placeholder(tf.float32)     
is_freeze = tf.placeholder(tf.bool)
my_model_graph = my_model(X, is_freeze)  # Getting error while creating model

with tf.Session() as sess:
      sess.run(tf.global_variables_initializer())
      sess.run(my_optimizer, feed_dict = {is_freeze: False, X: np.zeros((50, 100))})

我收到的错误如下所示:对于#Try1

AttributeError: 'bool' object has no attribute 'name'

#Try3

TypeError: Using a tf.Tensor as a Python bool is not allowed.
Use if t is not None: instead of if t: to test if a tensor is defined,
and use TensorFlow ops such as tf.cond to execute subgraphs conditioned on 
the value of a tensor.`

请有人解释我应该如何克服这个问题。如果可能的话,任何人都可以告诉我在我的所有方法中我哪里出错了。

基本上我正在做的是我有两个型号。首先我训练其中一个模型,然后使用第一个模型的学习值,我必须训练第二个模型冻结第一个模型的值。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您不能在{&#34}内使用TrueFalse"图表" - 您需要将它们从python传递到tensorflow,其中一种方法是使用tf.constant()。你可以尝试

def my_model(input, is_freeze):
    trainable = tf.cond(is_freeze, lambda: tf.constant(False), lambda: tf.constant(True))

否则看起来很好!如果您需要更详细的帮助,请提供最小的工作示例!

答案 1 :(得分:0)

似乎您正试图将推理/逻辑中的开关嵌入张量流图中。不建议这样做。查看新的Estimator界面,了解如何实现完全相同的目标。