3 回答
TA贡献1796条经验 获得超10个赞
万一其他人遇到问题,也许您忘记使用官方论文中推荐的学习率之一:5e-5、3e-5、2e-5
如果学习率太高(例如 0.01),梯度似乎会极化,从而导致 val 集重复出现相同的 logits。
TA贡献1802条经验 获得超5个赞
在您的培训代码中,您不会返回经过培训的模型。
看来您正在一个函数内训练您的模型而不返回它。函数结束后权重将丢失。因此,在评估部分,模型输出随机值。
def train_fn(data_loader, model, optimizer, device, scheduler):
model.train()
total_loss = 0.0
for bi, d in tqdm(enumerate(data_loader), total=len(data_loader)):
ids = d['ids']
token_type_ids = d['token_type_ids']
mask = d['mask']
targets = d['targets']
ids = ids.to(device, dtype=torch.long)
token_type_ids = token_type_ids.to(device, dtype=torch.long)
mask = mask.to(device, dtype=torch.long)
targets = targets.to(device, dtype=torch.float)
optimizer.zero_grad()
outputs = model(
ids=ids,
mask=mask,
token_type_ids=token_type_ids
)
loss = loss_fn(outputs, targets)
total_loss += loss.item()
loss.backward()
optimizer.step()
scheduler.step()
return model, total_loss/len(data_loader) # this will help
TA贡献1815条经验 获得超6个赞
问题出在我的数据加载器类中。我传递了整个数据集,而不仅仅是一行。
def __getitem__(self, item): review = str(self.review[item]) review = " ".join(review.split())
这解决了它。感谢 Zabir Al Nazi 的协助。
添加回答
举报