【发布时间】:2021-07-06 14:38:10
【问题描述】:
我正在尝试使用 torch.optim.adam 优化 self.parameters()。这是原始代码:
def learning_rate_adjust(self, args):
self.learning_rate *= 0.8
self.train_op = torch.optim.Adam(self.parameters(), lr=self.learning_rate, weight_decay=args.l2_reg)
但是当我运行这段代码时,这里是错误:
Traceback (most recent call last):
File "main.py", line 37, in <module>
train(args, loader, train_set_length, test_seq, item_attr_set, [], [])
File "E:\ACAM\0324ACAM-model-master\ACAM-model\code\train.py", line 62, in train
net.learning_rate_adjust(args)
File "E:\ACAM\0324ACAM-model-master\ACAM-model\code\model.py", line 160, in learning_rate_adjust
self.train_op = torch.optim.Adam(self.parameters(), lr=self.learning_rate, weight_decay=args.l2_reg)
File "D:\Anaconda3\envs\bio\lib\site-packages\torch\optim\adam.py", line 42, in __init__
super(Adam, self).__init__(params, defaults)
File "D:\Anaconda3\envs\bio\lib\site-packages\torch\optim\optimizer.py", line 51, in __init__
self.add_param_group(param_group)
File "D:\Anaconda3\envs\bio\lib\site-packages\torch\optim\optimizer.py", line 202, in
add_param_group
raise ValueError("can't optimize a non-leaf Tensor")
ValueError: can't optimize a non-leaf Tensor
所以我尝试查看 self.parameters() 的列表,我发现 list(self.parameters())[9] 是一个非叶张量,然后像其他一些类似的问题一样,我打印了代码喜欢:
print('9',list(self.parameters())[9].requires_grad)
>>>true
print('9',list(self.parameters())[9].is_leaf)
>>>false
所以我不知道如何更改我的代码,请帮助我。T T
【问题讨论】:
-
您好,您可以添加一些代码 sn-p 来显示
self对象是如何创建的吗?否则,很难指出错误。此外,这是一个有用的线程供您阅读:stackoverflow.com/questions/65301875/… -
先谢谢!看了这个链接还是看不懂怎么修改,其他代码在下面的cmets中。
标签: python optimization pytorch