如何解决Pytorch-Forecasting模型拟合时的序列元素ValueError问题
PyTorch Forecasting TFT模型fit阶段
ValueError报错排查方案 报错核心原因定位
ValueError: dictionary update sequence element #0 has length 1; 2 is required
该报错本质是代码在预期获取键值对结构的位置,只拿到了单个元素,触发字典构造失败,你可以按以下优先级逐一排查:
- 版本兼容性问题(占80%以上的复现概率)
官方stallion教程的代码适配pytorch-lightning1.x版本,如果你安装的是2.0+版本的PyTorch Lightning,API发生了破坏性变更,会直接触发该报错。推荐安装教程匹配的版本组合:
pip uninstall pytorch-lightning pytorch-forecasting torch -y pip install pytorch-forecasting==0.10.3 pytorch-lightning==1.9.5 torch==1.13.1
验证方式:安装完成后直接跑官方教程自带的公开数据集,无需修改任何代码,如果可以正常训练,说明是版本问题。
TimeSeriesDataSet参数配置错误
检查数据集构造时的所有列表类参数,是否出现将单个字符串直接传入、未封装为列表的情况:- 检查
static_categoricals、time_varying_known_categoricals、time_varying_unknown_categoricals等分类变量参数,合法格式是["变量1", "变量2"],不能直接写"变量1" - 检查
target参数,单变量预测传单个字符串、多变量预测传字符串列表,不要出现嵌套列表的格式 - 检查
group_ids参数,必须是列表格式,哪怕只有一个分组字段也要封装成列表
- 检查
数据结构异常
- 检查数据集所有字段是否存在空值,空值会导致数据集元数据构造异常,用
df.isnull().sum()即可快速排查 - 检查
time_idx字段是否为连续递增的整数,每个分组的时间序列不存在跳变、断层
- 检查数据集所有字段是否存在空值,空值会导致数据集元数据构造异常,用
Trainer初始化参数错误
检查Trainer构造时的参数格式:- 回调参数
callbacks必须传入列表,哪怕只有一个回调对象也要封装为[回调实例] - 日志参数
logger如果传入单个日志实例不要套列表,传多个日志实例时再封装为列表
- 回调参数
内容的提问来源于stack exchange,提问作者Jae Cha
相关产品推荐
相关产品推荐

