You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Tensorflow新手求助:已执行全局变量初始化仍遇未初始化变量问题

解决TensorFlow全局初始化后仍存在未初始化变量的问题

兄弟,刚从Caffe转TensorFlow踩这种变量初始化的坑太正常了!我帮你捋捋几个大概率的问题点,你对照着排查下:

  • 别搞反了「建图」和「初始化」的顺序
    很多人会犯这个错:先跑了tf.global_variables_initializer(),之后才调用get_model去创建模型结构。这时候模型里的变量都是初始化操作之后才生成的,自然没被包含在初始化集合里!一定要先完整定义好所有模型变量,再创建并运行初始化操作

  • 别忘了初始化局部变量
    TensorFlow里不是所有变量都属于「全局变量」,比如tf.metrics系列函数生成的统计变量、或者某些临时变量属于局部变量,tf.global_variables_initializer()碰不到它们。你可以把全局和局部初始化合并起来执行:

    init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
    sess.run(init_op)
    
  • 检查tf.get_variable的作用域和复用逻辑
    你用了tf.get_variable,有没有可能在不同作用域下重复创建了同名变量,或者没正确设置reuse参数?比如模型里有共享层的话,第二次调用对应层的时候必须设置reuse=True,不然会生成全新的未初始化变量。另外,确保所有用tf.get_variable创建的变量都指定了initializer,别漏了某几层的设置。

  • 打印变量列表排查遗漏
    你可以把当前所有全局变量打印出来,看看是不是有意料之外的变量存在:

    print([v.name for v in tf.global_variables()])
    

    把输出和你预期的变量列表对比,找出那些凭空出现的变量,针对性去看是哪段代码生成的,再调整初始化逻辑。

  • 适应TensorFlow和Caffe的习惯差异
    Caffe里层的参数初始化是和层定义绑定死的,TensorFlow的变量管理灵活很多,但也容易踩「动态建图」的坑。比如别像在Caffe里那样,建完图还随便加新层——在TensorFlow里,初始化操作一旦创建,之后新增的变量就不会被包含进去,必须重新生成初始化操作。

内容的提问来源于stack exchange,提问作者anonymous anonymous

火山引擎 最新活动