3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個贊
萬一其他人遇到問題,也許您忘記使用官方論文中推薦的學(xué)習(xí)率之一:5e-5、3e-5、2e-5
如果學(xué)習(xí)率太高(例如 0.01),梯度似乎會極化,從而導(dǎo)致 val 集重復(fù)出現(xiàn)相同的 logits。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個贊
在您的培訓(xùn)代碼中,您不會返回經(jīng)過培訓(xùn)的模型。
看來您正在一個函數(shù)內(nèi)訓(xùn)練您的模型而不返回它。函數(shù)結(jié)束后權(quán)重將丟失。因此,在評估部分,模型輸出隨機(jī)值。
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貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個贊
問題出在我的數(shù)據(jù)加載器類中。我傳遞了整個數(shù)據(jù)集,而不僅僅是一行。
def __getitem__(self, item): review = str(self.review[item]) review = " ".join(review.split())
這解決了它。感謝 Zabir Al Nazi 的協(xié)助。
添加回答
舉報