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 的協助。
添加回答
舉報