繁体   English   中英

Tensorflow 变量初始化错误

[英]Variable initialization error in Tensorflow

我正在关注 TensorFlow 教程并运行以下代码但遇到了变量初始化错误:

num_points = 1000
vectors_set = []
for i in range(num_points):
         x1= np.random.normal(0.0, 0.55)
         y1= x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03)
         vectors_set.append([x1, y1])

x_data = [v[0] for v in vectors_set]
y_data = [v[1] for v in vectors_set]
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

生成的错误消息是:

FailedPreconditionError: Attempting to use uninitialized value Variable_3
     [[Node: Variable_3/read = Identity[T=DT_INT64, _class=["loc:@Variable_3"], _device="/job:localhost/replica:0/task:0/cpu:0"](Variable_3)]]
Caused by op 'Variable_3/read', defined at:
  File "/Users/ayada/anaconda/envs/tensorflow/lib/python3.5/runpy.py", line 184, in _run_module_as_main
    "__main__", mod_spec)
  File "/Users/ayada/anaconda/envs/tensorflow/lib/python3.5/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/Users/ayada/anaconda/envs/tensorflow/lib/python3.5/site-packages/ipykernel/__main__.py", line 3, in <module>
    app.launch_new_instance()
  File "/Users/ayada/anaconda/envs/tensorflow/lib/python3.5/site-packages/traitlets/config/application.py", line 653, in launch_instance
    app.start()
  File "/Users/ayada/anaconda/envs/tensorflow/lib/python3.5/site-packages/ipykernel/kernelapp.py", line 474, in start
    ioloop.IOLoop.instance().start()
  File "/Users/ayada/anaconda/envs/tensorflow/lib/python3.5/site-packages/zmq/eventloop/ioloop.py", line 162, in start
    super(ZMQIOLoop, self).start()

有人可以建议我如何纠正这个问题吗?

可爱的...崩溃表白,而不是错误消息。 我怀疑您设置中的某些内容使您的正式TF变量之一挂了,可能是一个字母的名称之一。 为了进行调试,我建议您在每次初始化之后插入一个简单的print语句,以报告所计算的值,或者至少报告变量类型描述符。 例如:

x_data = [v[0] for v in vectors_set]
y_data = [v[1] for v in vectors_set]
print (x_data, y_data)
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
print (W)
b = tf.Variable(tf.zeros([1]))
print(b)
...

这不仅会跟踪数据值,而且还会在程序再次崩溃时跟踪其死亡的位置-更多来自上面的堆栈跟踪的信息。

是的,这是肮脏且技术含量低的……但是,除非您已经在该程序上启动了调试器,否则它将为您提供与我所知的其他解决方案一样快的解决方案。

您正在ipython笔记本中运行,最好始终限制图形的构造和会话实例化,如下所示:

g = tf.Graph()
with g.as_default():
  ... build your graph ..

with tf.Session() as sess:
  sess.run(...)

这将防止向默认图形添加相同的变量,并确保您始终具有相同的图形。

要进一步了解该问题:

如果您多次运行一个单元,就像

a = tf.Variable()

每次都会在tf.default_graph()创建一个NEW变量。

范围界定将通过每次创建一个新图形来防止这种情况。

问题在于这一行tf.initialize_all_variables() 此方法已被弃用,并在 2017-03-02 后被删除。

因为它已被弃用,这意味着您的变量实际上并未初始化。

试试这个


init = tf.global_variables_initializer()
sess.run(init)

只有 TensorFlow v1 (TF1) 才需要初始化变量。 考虑使用 TF2,因为变量在创建时会立即初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM