python - Tensorflow - 图已最终确定且无法修改

标签 python numpy machine-learning tensorflow

我正在尝试启动分布式 Tensorflow 并收到以下错误。 我的代码如下所示:

sv = tf.train.Supervisor(is_chief=(task_index == 0), logdir="/tmp/train_logs", init_op=init_op,
                         summary_op=summary_op, saver=saver, global_step=global_step, save_model_secs=600)
with sv.managed_session(server.target) as sess:

step = 0
while not sv.should_stop() and step < nnc.steps:

    mini_batches = random_mini_batches(x_train, y_train, mini_batch_size)

    for mini_batch in mini_batches:
        (batch_x, batch_y) = mini_batch

        _, step = sess.run([train_op, global_step], feed_dict={x: batch_x, y: batch_y})

当我收到错误时,random_mini_batches 函数失败。 但我完全不明白如何以及为什么。 random_mini_batches函数是一个用纯python + numpy编写的函数,没有任何与TensorFlow相关的东西。 x_trainy_train 之前未使用过。

这是我收到的错误:

File "/Users/curr_user/PycharmProjects/curr_project/src/nn.py", line 36, in random_mini_batches
    num_complete_minibatches = int(math.floor(m / mini_batch_size))  # number of mini batches of size mini_batch_size
  File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/math_ops.py", line 880, in r_binary_op_wrapper
    x = ops.convert_to_tensor(x, dtype=y.dtype.base_dtype, name="x")
  File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 611, in convert_to_tensor
    as_ref=False)
  File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 676, in internal_convert_to_tensor
    ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
  File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py", line 121, in _constant_tensor_conversion_function
    return constant(v, dtype=dtype, name=name)
  File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py", line 106, in constant
    attrs={"value": tensor_value, "dtype": dtype_value}, name=name).outputs[0]
  File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2582, in create_op
    self._check_not_finalized()
  File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2290, in _check_not_finalized
    raise RuntimeError("Graph is finalized and cannot be modified.")

任何帮助将不胜感激! 谢谢

最佳答案

这不是你的问题,但我认为 mini_batch_size 是一个常数张量。尽管random_mini_batches是纯Python和numpy,tensorflow overloads很多带有张量的运算符,所以这一行

num_complete_minibatches = int(math.floor(m / mini_batch_size))

实际上是对张量执行 __div__ 操作,这也会强制将 m 转换为张量。但是 tf.train.Supervisor() 会强制图最终确定,即无法创建更多节点,因此转换失败。

解决方案是使 mini_batch_size 成为一个普通常量,并确保 random_mini_batches 内部没有使用张量。

关于python - Tensorflow - 图已最终确定且无法修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46838739/

相关文章:

python - spyder 和远程 ssh python 解释器

python - 将 numpy 数组保存到 txt

python-3.x - 通过计算数组中的字符串并添加数组中的值来填充 pandas 数据框

python - 通过某些点的值获取函数

python - 您输入的数据用完了;中断训练。确保您的数据集或生成器至少可以生成 steps_per_epoch

dataframe - 在 knn 插补方法中计算 "distance average"期间替换特定列中的 NaN 值

python - 从字符串中仅删除完全匹配的子字符串

python - spark 查找最大值和关联的键

python - Keras Convolution2D 输入 : Error when checking model input: expected convolution2d_input_1 to have shape

python - Django 数据库查询优化与模板中的 iterator()