PyTorch加载DQN对象报错:'Adam' object has no attribute '_warned_capturable_if_run_uncaptured'
解决PyTorch DQN加载后训练出现Adam属性错误的方案
核心原因
- PyTorch版本不兼容:模型保存时的PyTorch版本与当前Colab环境版本不一致,导致Adam优化器内部属性缺失。
- 优化器状态加载异常:加载时仅恢复网络权重,未正确处理优化器的状态字典,或状态字典与当前环境不匹配。
- Colab环境依赖冲突:默认安装的TensorFlow可能与PyTorch依赖包冲突,间接影响Adam初始化。
解决步骤
1. 统一PyTorch版本
执行命令安装与模型保存时一致的PyTorch版本(以2.0.1为例):
!pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
安装后重启Colab运行时,确保版本匹配。
2. 规范模型与优化器的保存加载
保存时需同时记录网络(含目标网络)和优化器的状态:
# 保存checkpoint torch.save({ 'policy_net': policy_net.state_dict(), 'target_net': target_net.state_dict(), 'optimizer': optimizer.state_dict(), 'episode': current_episode }, 'dqn_checkpoint.pth') # 加载checkpoint checkpoint = torch.load('dqn_checkpoint.pth') policy_net.load_state_dict(checkpoint['policy_net']) target_net.load_state_dict(checkpoint['target_net']) optimizer.load_state_dict(checkpoint['optimizer']) # 切换至训练模式 policy_net.train() target_net.train()
若此前仅保存了网络权重,需重新生成完整checkpoint后再加载。
3. 清除环境依赖冲突
卸载TensorFlow以避免与PyTorch冲突:
!pip uninstall -y tensorflow !pip install torch torchvision torchaudio
重启运行时后重试训练。
4. 重新初始化优化器(临时方案)
若无法匹配版本,可放弃加载优化器状态,重新初始化:
checkpoint = torch.load('dqn_checkpoint.pth') policy_net.load_state_dict(checkpoint['policy_net']) target_net.load_state_dict(checkpoint['target_net']) # 重新创建优化器 optimizer = torch.optim.Adam(policy_net.parameters(), lr=0.0001)
此方法会丢失之前的优化器状态,适合对训练连续性要求较低的场景。
内容的提问来源于stack exchange,提问作者Janak Lal
相关产品推荐
相关产品推荐

