Tensorflow 值错误:无法使用 eval 评估张量

Posted

技术标签:

【中文标题】Tensorflow 值错误:无法使用 eval 评估张量【英文标题】:Tensorflow Value Error : Cannot evaluate tensor using eval 【发布时间】:2017-07-24 15:12:39 【问题描述】:

我是 tensorflow 新手,使用以下脚本遇到 TensorFlow 值错误:

 W = tf.Variable(10)
 print(W.eval())

我也试过这种方式:

with Session() as sess: print(W.eval())

它会抛出未初始化值变量的错误。

现在当我声明 W = tf.Variable(10) 时,它不会用 10 来初始化它吗?

【问题讨论】:

【参考方案1】:

来自文档:

当您启动图表时,变量必须明确 在您可以运行使用其值的操作之前进行初始化。你可以 通过运行它的initializer op来初始化一个变量,恢复 保存文件中的变量,或者只是运行assign Op 给变量赋值。其实变量initializer op 只是一个assign Op,它分配了变量的初始值 到变量本身。

 # Launch the graph in a session.   
 with tf.Session() as sess:
    # Run the variable initializer.
    sess.run(w.initializer)
    # ...you now can run ops that use the value of 'w'...

最常见的初始化模式是使用便捷函数 global_variables_initializer() 将 Op 添加到初始化的图中 所有的变量。然后在启动图表后运行该操作。

 # Add an Op to initialize global variables.
  init_op = tf.global_variables_initializer()   
  # Launch the graph in a session.
  with tf.Session() as sess:
      # Run the Op that initializes global variables.
      sess.run(init_op)
      # ...you can now run any Op that uses variable values...

因此你需要使用类似的东西:

import tensorflow as tf  
W = tf.Variable(10)
print('W: 0'.format(W))
sess = tf.Session()
with sess.as_default():
    sess.run(W.initializer)
    print(W.eval())

仅供参考In TensorFlow, what is the difference between Session.run() and Tensor.eval()?

【讨论】:

【参考方案2】:

您需要显式运行初始化操作

sess.run(tf.variables_initializer(W))

在评估任何依赖于 W 的节点之前。

【讨论】:

【参考方案3】:

另一个例子,

    import tensorflow as tf  
    W = tf.Variable(tf.truncated_normal([700,10]))
   sess = tf.Session()
   with sess.as_default():
        sess.run(W.initializer)
        print(W.eval())

结果:

[[-0.3294761   0.6800459   1.33331    ...  1.42762    -1.3164878
   1.4831722 ]
 [-1.0402402   0.52254885 -1.344712   ... -0.30849338  0.15020785
   1.6682776 ]
 [-1.1791034   1.4859517  -1.7137778  ...  0.844212    1.5928217
  -0.21043983]
 ...
 [ 0.01982834 -1.1290654   0.33557415 ...  0.0510614  -0.6524679
   0.16643837]
 [-0.09969945 -0.10285325 -1.1134144  ...  1.2253191   0.13343143
  -1.7491579 ]
 [-1.9345136   0.63447094  1.1200713  ...  0.5357313   1.8579113
   0.8549472 ]]

【讨论】:

欢迎来到 ***。仅包含代码的答案往往会被标记为删除,因为它们是“低质量”的。请阅读有关回答问题的帮助部分,然后考虑在您的回答中添加一些评论。

以上是关于Tensorflow 值错误:无法使用 eval 评估张量的主要内容,如果未能解决你的问题,请参考以下文章

如何为 tensorflow 对象检测模型运行 eval.py 作业

尝试使用遮罩层Tensorflow时,重量无法广播到值错误

在 TensorFlow 中,Session.run() 和 Tensor.eval() 有啥区别?

设置 TensorBoard 以在 Google Colab 中为 TensorFlow 对象检测模型运行 eval.py 作业

Tensorflow 中 sess.run(c) 和 c.eval() 的区别

ValueError("无法使用 `eval()` 评估张量: