PyTorch Lightning报'weights_summary'意外关键字参数错误求助
问题
在Anaconda Spyder 5.1.5环境中学习Temporal Fusion Transformer算法时,运行pytorch-forecasting官方Stallion教程中的调参代码触发错误。
执行代码:
study = optimize_hyperparameters( train_dataloader, val_dataloader, model_path="optuna_test", n_trials=200, max_epochs=50, gradient_clip_val_range=(0.01, 1.0), hidden_size_range=(8, 128), hidden_continuous_size_range=(8, 128), attention_head_size_range=(1, 4), learning_rate_range=(0.001, 0.1), dropout_range=(0.1, 0.3), trainer_kwargs=dict(limit_train_batches=30), reduce_on_plateau_patience=4, use_learning_rate_finder=False # use Optuna to find ideal learning rate or use in-built learning rate finder )
报错信息:
A new study created in memory with name: no-name-fe7e21ce-3034-4679-b60a-ee4d5c9a4db5 [W 2022-10-21 19:36:49,382] Trial 0 failed because of the following error: TypeError("__init__() got an unexpected keyword argument 'weights_summary'") Traceback (most recent call last): File "C:\Users\omer\anaconda3\lib\site-packages\optuna\study\_optimize.py", line 196, in _run_trial value_or_values = func(trial) File "C:\Users\omer\anaconda3\lib\site-packages\pytorch_forecasting\models\temporal_fusion_transformer\tuning.py", line 150, in objective trainer = pl.Trainer( File "C:\Users\omer\anaconda3\lib\site-packages\pytorch_lightning\utilities\argparse.py", line 345, in insert_env_defaults return fn(self, **kwargs) TypeError: __init__() got an unexpected keyword argument 'weights_summary' Traceback (most recent call last): Input In [3] in <cell line: 1> study = optimize_hyperparameters( File ~\anaconda3\lib\site-packages\pytorch_forecasting\models\temporal_fusion_transformer\tuning.py:217 in optimize_hyperparameters study.optimize(objective, n_trials=n_trials, timeout=timeout) File ~\anaconda3\lib\site-packages\optuna\study\study.py:419 in optimize _optimize( File ~\anaconda3\lib\site-packages\optuna\study\_optimize.py:66 in _optimize _optimize_sequential( File ~\anaconda3\lib\site-packages\optuna\study\_optimize.py:160 in _optimize_sequential frozen_trial = _run_trial(study, func, catch) File ~\anaconda3\lib\site-packages\optuna\study\_optimize.py:234 in _run_trial raise func_err File ~\anaconda3\lib\site-packages\optuna\study\_optimize.py:196 in _run_trial value_or_values = func(trial) File ~\anaconda3\lib\site-packages\pytorch_forecasting\models\temporal_fusion_transformer\tuning.py:150 in objective trainer = pl.Trainer( File ~\anaconda3\lib\site-packages\pytorch_lightning\utilities\argparse.py:345 in insert_env_defaults return fn(self, **kwargs) TypeError: __init__() got an unexpected keyword argument 'weights_summary'
问题原因分析
该错误由版本不兼容导致:
- pytorch-forecasting的
tuning.py代码默认会给pl.Trainer传入weights_summary参数 - 当前安装的PyTorch Lightning(pl)版本已移除
weights_summary参数(该参数在PyTorch Lightning 2.0+版本中被废弃)
解决方案
有两种可行解决办法:
方法1:降级PyTorch Lightning到兼容版本
安装仍支持weights_summary参数的PyTorch Lightning版本,例如1.9.x系列:
pip install pytorch-lightning==1.9.5
方法2:覆盖默认参数,禁用weights_summary
在调用optimize_hyperparameters时,通过trainer_kwargs显式传入weights_summary=None,覆盖默认值:
study = optimize_hyperparameters( train_dataloader, val_dataloader, model_path="optuna_test", n_trials=200, max_epochs=50, gradient_clip_val_range=(0.01, 1.0), hidden_size_range=(8, 128), hidden_continuous_size_range=(8, 128), attention_head_size_range=(1, 4), learning_rate_range=(0.001, 0.1), dropout_range=(0.1, 0.3), trainer_kwargs=dict(limit_train_batches=30, weights_summary=None), # 新增参数覆盖默认值 reduce_on_plateau_patience=4, use_learning_rate_finder=False )
内容的提问来源于stack exchange,提问作者osmgnr
相关产品推荐
相关产品推荐

