self.optimizer.step()报错,求助!!
收藏
模型选择的是Adam优化器。以下是报错信息以及部分代码。我寻思我也没往优化器离传入int类型的数据啊??咋回事这是?头一次遇见。求大佬指点
Traceback (most recent call last): File "/home/harry/Python_Demo/Paddlebased/SLBR_motif_removal/train.py", line 191, in main() File "/home/harry/Python_Demo/Paddlebased/SLBR_motif_removal/train.py", line 186, in main model.train() File "/home/harry/Python_Demo/Paddlebased/SLBR_motif_removal/train.py", line 104, in train self.train_one_epoch(epoch) File "/home/harry/Python_Demo/Paddlebased/SLBR_motif_removal/train.py", line 76, in train_one_epoch self.optimizer.step() File "/home/harry/.conda/envs/Paddle/lib/python3.7/site-packages/decorator.py", line 232, in fun return caller(func, *(extras + args), **kw) File "/home/harry/.conda/envs/Paddle/lib/python3.7/site-packages/paddle/fluid/dygraph/base.py", line 299, in __impl__ return func(*args, **kwargs) File "/home/harry/.conda/envs/Paddle/lib/python3.7/site-packages/decorator.py", line 232, in fun return caller(func, *(extras + args), **kw) File "/home/harry/.conda/envs/Paddle/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py", line 25, in __impl__ return wrapped_func(*args, **kwargs) File "/home/harry/.conda/envs/Paddle/lib/python3.7/site-packages/paddle/fluid/framework.py", line 434, in __impl__ return func(*args, **kwargs) File "/home/harry/.conda/envs/Paddle/lib/python3.7/site-packages/paddle/optimizer/adam.py", line 451, in step loss=None, startup_program=None, params_grads=params_grads) File "/home/harry/.conda/envs/Paddle/lib/python3.7/site-packages/paddle/optimizer/optimizer.py", line 954, in _apply_optimize params_grads, self.regularization) File "/home/harry/.conda/envs/Paddle/lib/python3.7/site-packages/paddle/optimizer/optimizer.py", line 1039, in append_regularization_ops regularization) File "/home/harry/.conda/envs/Paddle/lib/python3.7/site-packages/paddle/optimizer/optimizer.py", line 986, in _create_regularization_of_grad regularization_term = regularization(param, grad, grad.block) TypeError: 'int' object is not callable Process finished with exit code 1
def __init__(self, args): # 加载参数 self.args = args # 模型加载 print("==> 创建模型 ") self.model = SLBR(args=self.args) print("==> 成功创建模型") # 学习率与优化器 self.scheduler = paddle.optimizer.lr.StepDecay(learning_rate=self.args.lr, step_size=self.args.schedule, gamma=self.args.gamma) # self.scheduler = 1e-3 # 创建一个随着epoch变化的学习率 self.optimizer = paddle.optimizer.Adam(parameters=self.model.parameters(), learning_rate=self.scheduler, beta1=self.args.beta1, beta2=self.args.beta2, weight_decay=self.args.weight_decay) # self.lr = self.args.lr # 数据集加载 train_sets = DEHW(root=self.args.train_sets, train=True) self.len_train_sets = len(train_sets) self.train_loader = DataLoader(train_sets, batch_size=self.args.batch_size, num_workers=self.args.num_workers) val_sets = DEHW(root=self.args.val_sets, train=False) self.len_val_sets = len(val_sets) self.val_loader = DataLoader(val_sets, batch_size=1, num_workers=2) # 日志的主目录checkpoint,不存在则创建 check_dir(os.path.join(self.args.checkpoint)) # 创建tensorboard self.tensorboard = Tensorboard(mode="paddle", logdir=self.args.tensorboard_path) # 一些指标的记录 self.best_acc = 0 self.is_best = False self.current_epoch = 0 self.metric = -100000 self.hl = 6 if self.args.hl else 1 self.step = 0 # 损失函数 self.loss = Losses(self.args) # 指标计算 self.metric = Metrics() print('==> 总参数量: %.2fM' % (sum(p.numel() for p in self.model.parameters()) / 1e6)) print('==> 当前存储目录: %s' % (self.args.checkpoint)) def train_one_epoch(self, epoch): self.model.train() current_batch = 0 for i, (inputs, gts, masks) in enumerate(self.train_loader): self.optimizer.clear_grad() current_batch += self.args.batch_size outputs = self.model(inputs) coarse_loss, refine_loss, style_loss, mask_loss = self.loss( outputs[0], gts, outputs[1], masks) total_loss = self.args.lambda_l1 * (coarse_loss + refine_loss) + self.args.lambda_mask * ( mask_loss) + style_loss total_loss.backward() self.optimizer.step() # 这一步报错
0
收藏
请登录后评论
你看一下你损失函数的输入是不是有一个在CPU,有一个在GPU
都在gpu0上面
找到原因了。parser传给优化器的参数不知道为啥有一个变成Int类型的了。
这属于书写不规范,不是框架的问题
的确书写不规范。别人的pytorch代码就是这样写的,用paddle复现就得挨坑。
大佬大佬