TensorFlow2.x运行ProGAN报错:module 'tensorflow' has no attribute 'get_variable'
问题原因
报错里的<string>行179的G_paper函数,不是你本地networks.py里的代码,而是从你加载的pickle模型文件里反序列化出来的。原模型是用TensorFlow1.x训练保存的,序列化时把模型构建函数的代码也存在了pickle里,这些代码里的tf.get_variable没有加compat.v1前缀,所以加载时调用了TF2里不存在的API。
解决办法
临时修复(最快见效)
在import_example.py的最开头添加以下代码:
import tensorflow as tf # 把tf.get_variable映射到compat.v1版本,兼容pickle里的旧代码 tf.get_variable = tf.compat.v1.get_variable
或者直接切换到TF1兼容模式运行:
import tensorflow.compat.v1 as tf tf.disable_v2_behavior()
注意:如果用兼容模式,后续代码里的TF2 API可能需要调整,但对你的场景来说,优先保证模型能加载。
彻底解决(适合有训练条件的情况)
如果能重新训练模型,用你升级后的TF2版本代码重新训练,保存新的pickle模型,这样后续加载就不会有API兼容问题。
补充检查
打开生成的report.txt,看看有没有遗漏处理的.py文件,比如某些被import的隐藏模块或者配置文件,确保所有TF1 API都被升级工具处理了。不过这个问题核心还是pickle模型里的旧代码,所以优先前两个办法。
内容的提问来源于stack exchange,提问作者IcecreamArtist
相关产品推荐
相关产品推荐

