我想传递一个布尔值,在我评估图形时可以改变它。我在下面发布我的代码:
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.`
请有人解释我应该如何克服这个问题。如果可能的话,任何人都可以告诉我在我的所有方法中我哪里出错了。
基本上我正在做的是我有两个型号。首先我训练其中一个模型,然后使用第一个模型的学习值,我必须训练第二个模型冻结第一个模型的值。
提前致谢。
答案 0 :(得分:1)
您不能在{&#34}内使用True
和False
"图表" - 您需要将它们从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界面,了解如何实现完全相同的目标。