降级Keras至2.1.6仍无法导入keras.engine.topology下Network类求助
解决Keras导入Network类报错问题
问题根因
降级到Keras 2.1.6后仍然导入失败的核心原因是:Network类在Keras 2.x早期版本中本身就不属于keras.engine.topology的公开导出成员,该类默认存放在独立的network模块下,部分场景下独立安装的Keras和TensorFlow内置的Keras存在路径冲突也会触发该报错。
可行解决方法
方法1:调整导入路径(优先尝试)
Keras 2.1.6版本的Network类可通过以下路径直接导入,替换原导入语句即可:
from keras.engine.network import Network
如果仍报错,大概率是存在TensorFlow内置Keras的路径冲突,改用以下导入语句:
from tensorflow.python.keras.engine.network import Network
方法2:手动复用类定义(极端适配场景)
如果你的CycleGAN代码是基于极旧的定制版Keras编写的,可直接从本地报错提示的/usr/local/lib/python3.7/dist-packages/keras/engine/topology.py文件中找到Network类的定义,复制到你项目的自定义工具模块中导入使用即可。
方法3:高版本Keras适配方案
如果不想强制降级Keras,2.4+版本的Keras、tf.keras中的Model类完全可以覆盖旧版Network类的所有功能,把代码中所有用到Network的位置替换为Model即可,导入语句为:
from tensorflow.keras import Model
校验注意事项
- 调整导入语句后先单独执行导入测试,无报错再运行CycleGAN完整代码
- 如果存在环境依赖冲突,建议新建虚拟环境,安装Keras 2.1.6时同步匹配对应版本的TensorFlow(Keras 2.1.6适配TensorFlow 1.5~1.10版本,版本不匹配也会触发导入异常)
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

