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))

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值