self.hparams = hparams, 使用基于pytroch-lightning的T5模型微调出先的问题
1.运行代码:
运行的代码
class T5FineTuner(pl.LightningModule, nn.Module):
def __init__(self, hparams): # 传入的args
super(T5FineTuner, self).__init__()
self.hparams = hparams ### 报错行
self.model = T5ForConditionalGeneration.from_pretrained(hparams.model_name_or_path) # 调用的是预训练的模型
self.tokenizer = T5Tokenizer.from_pretrained(hparams.model_name_or_path)
2.报错的信息:AttributeError: can't set attribute
Traceback (most recent call last):
File "/home/wjg/workspace/Generative-ABSA-main/TestMain02.py", line 295, in <module>
model = T5FineTuner(args) # 得到模型
File "/home/wjg/workspace/Generative-ABSA-main/TestMain02.py", line 93, in __init__
self.hparams = hparams
File "/home/wjg/anaconda3/envs/GenABSA/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1233, in __setattr__
object.__setattr__(self, name, value)
AttributeError: can't set attribute
3.出错原因: 是因为使用代码self.hparams = hparams
, 后来查了一下发现是版本问题
self.hparams = hparams
4.解决方法:
将
self.save_hyperparameters(hparams)
代替原来的
self.hparams = hparams
注意:由于版本问题self.save_hyperparameters(hparams)
等价于self.hparams = hparams
这一行相当于给self.hparams参数赋值
具体如下:(将原来的self.hparams = hparams
代码注释)
class T5FineTuner(pl.LightningModule, nn.Module):
def __init__(self, hparams): # 传入的args
super(T5FineTuner, self).__init__()
# self.hparams = hparams
self.save_hyperparameters(hparams) # 等价于上面一行 这一行相当于给self.hparams参数赋值
print(self.hparams) #### 测试 可以不写
self.model = T5ForConditionalGeneration.from_pretrained(hparams.model_name_or_path) # 调用的是预训练的模型
self.tokenizer = T5Tokenizer.from_pretrained(hparams.model_name_or_path)
代码: print(self.hparams)
的执行结果, 例如获取train_batch_size
超参数依然可以用 self.hparmas.train_batch_size
注意: 这样设置后获取参数的时候依然用self.hparams
获取参数