使用gym ConnectFour环境时遇ImportError:无法导入load_model
解决gym ConnectFour环境中的ImportError: cannot import name 'load_model'问题
问题重现
运行以下gym ConnectFour示例代码时触发ImportError:
import gym from gym_connect_four import RandomPlayer, ConnectFourEnv env: ConnectFourEnv = gym.make("ConnectFour-v0") player1 = RandomPlayer(env, 'Dexter-Bot') player2 = RandomPlayer(env, 'Deedee-Bot') result = env.run(player1, player2, render=True) reward = result.value print(reward)
错误信息
--------------------------------------------------------------------------- ImportError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_14304\94530224.py in <module> 1 import gym ----> 2 from gym_connect_four import RandomPlayer, ConnectFourEnv 3 env: ConnectFourEnv = gym.make("ConnectFour-v0") 4 5 player1 = RandomPlayer(env, 'Dexter-Bot') c:\Users\Axel\Documents\_ReinforcementJourney\Connect4\gym-connect-four\gym_connect_four\__init__.py in <module> 1 from gym.envs.registration import register ----> 2 from .envs.connect_four_env import ConnectFourEnv, Player, RandomPlayer, SavedPlayer, ResultType 3 4 register( 5 id='ConnectFour-v0', c:\Users\Axel\Documents\_ReinforcementJourney\Connect4\gym-connect-four\gym_connect_four\envs\__init__.py in <module> ----> 1 from gym_connect_four.envs.connect_four_env import ConnectFourEnv, Player, RandomPlayer, SavedPlayer, ResultType c:\Users\Axel\Documents\_ReinforcementJourney\Connect4\gym-connect-four\gym_connect_four\envs\connect_four_env.py in <module> 11 from gym import error 12 from gym import spaces ---> 13 from keras.engine.saving import load_model 14 15 from gym_connect_four.envs.render import render_board ImportError: cannot import name 'load_model' from 'keras.engine.saving'
已尝试但无效的方法
- 执行
conda update --all更新所有包; - 卸载并重新安装tensorflow;
- 修改
connect_four_env.py中的导入语句为from tensorflow.python.keras.engine.saving import load_model。
可行解决方案
方案1:修正load_model的导入路径
将connect_four_env.py第13行的导入语句替换为:
from tensorflow.keras.models import load_model
原因:新版本TensorFlow中,Keras已被整合,load_model的官方标准导入路径是tensorflow.keras.models,旧的keras.engine.saving路径已被废弃移除。
方案2:安装兼容的TensorFlow版本
如果不想修改代码,可以安装与该gym-connect-four包兼容的旧版TensorFlow(如2.3.x或2.4.x),这类版本仍保留keras.engine.saving路径:
# 使用conda安装 conda install tensorflow=2.3.0 # 或使用pip安装 pip install tensorflow==2.3.0
方案3:注释无用的相关代码(临时方案)
如果不需要使用SavedPlayer类,可直接注释掉相关代码绕过错误:
- 注释
connect_four_env.py第13行的导入语句:# from keras.engine.saving import load_model - 找到文件中
SavedPlayer类的定义及所有调用该类的代码,全部注释。
内容的提问来源于stack exchange,提问作者Axel P
相关产品推荐
相关产品推荐

