tensorflow之tf.variable_scope()与tf.Session()调用顺序的坑

话不多说,干就完了。


问题描述:

在使用tensorflow声明变量并运行的时候,如果变量没有初始化,则运行时会报错,如下:

这是由于没有进行变量初始化操作导致的,但是存在一种情况是命名进行了变量初始化操作,但仍然出现这个错误,如下:

import tensorflow as tf

with tf.Session() as sess:
    # 执行变量初始化操作(在前)
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    
    # 声明变量(在后)
    a = tf.get_variable(name="a", shape=[10], dtype=tf.float32)
    print(sess.run(a))

上述代码命名进行了变量初始化操作,但是运行时仍然后出现变量未初始化的错误,这是由于变量初始化的位置不对导致的。

解决方法:

找到了问题的原因,解决就自然而然了。将变量初始化操作放在变量声明之后就OK了,如下:

import tensorflow as tf

# 声明变量(在前)
a = tf.get_variable(name="a", shape=[10], dtype=tf.float32)
with tf.Session() as sess:
    # 执行变量初始化操作(在后)
    init_op = tf.global_variables_initializer()
    sess.run(init_op)

特殊情况:

下述情况,虽然变量初始化操作在变量声明操作之后执行,但是运行仍然报错。将变量声明操作移到with语句块之外问题就解决了。

import tensorflow as tf

with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    # 声明变量(在前)
    a = tf.get_variable(name="a", shape=[10], dtype=tf.float32)
    # 执行变量初始化操作(在后)
    sess.run(init_op)

    print(sess.run(a))

猜你喜欢

转载自blog.csdn.net/cxx654/article/details/88928099
今日推荐