远程机器导入虚拟环境遇TensorFlow与Keras兼容问题,本地环境正常
解决方法
核心原因
独立版Keras 2.3.1和TensorFlow 2.4.1的内部API不兼容——TF2.4.1的tensorflow.python.eager.context模块已经移除了get_config方法,但旧版独立Keras仍在调用这个方法,导致导入报错。from tensorflow import keras用的是TF自带的适配版Keras所以没问题,但hyperas默认调用独立Keras,因此仍会触发错误。
步骤1:卸载独立Keras,改用TF自带的tf.keras
远程环境里的独立Keras完全没必要保留,TF2.x已经内置了适配的tf.keras,直接卸载:
# 激活你的虚拟环境 conda activate myenv # 用conda卸载(如果是conda安装的Keras) conda remove keras -y # 或者用pip卸载(如果是pip安装的) pip uninstall keras -y
步骤2:安装适配TF2.x的hyperas版本
旧版hyperas依赖独立Keras,换用兼容tf.keras的版本:
pip install hyperas==0.4.1
这个版本会自动调用TF内置的Keras模块,不会再触发API不兼容的问题。
步骤3:重新构建环境(若前两步无效)
放弃本地导出的yml文件,直接在远程创建全新环境,避免跨平台的依赖冲突:
# 创建环境(Python版本和本地保持一致,比如3.8) conda create -n myenv python=3.8 -y conda activate myenv # 安装指定版本的TensorFlow(自带适配的tf.keras) conda install tensorflow=2.4.1 -c conda-forge -y # 安装适配版hyperas pip install hyperas==0.4.1
步骤4:手动修改hyperas源码(极端情况)
如果上述步骤仍报错,说明hyperas代码里硬编码了独立Keras的导入,直接修改源码:
- 运行
pip show hyperas查看hyperas的安装路径 - 打开该路径下的
hyperas/optim.py文件 - 将所有
import keras或from keras import ...的语句替换为from tensorflow import keras,比如:- 把
from keras.models import Sequential改成from tensorflow.keras.models import Sequential - 把
from keras.layers import Dense改成from tensorflow.keras.layers import Dense
- 把
- 保存后重新运行代码。
内容的提问来源于stack exchange,提问作者Vale
相关产品推荐
相关产品推荐

