首页 > 解决方案 > 如何使用变形金刚改善我的训练阶段?(文字分类)

问题描述

我是 stackOverflow 的新手,我正在努力通过微调使用不同的数据集来提高 bert base italian 模型(例如,neuraly/bert-base-italian-cased-sentiment on huggingface)的损失和准确性。所以我想问一些问题并展示一些代码让你更好地理解。所以这是训练阶段的代码:

device = torch.device('cuda')
model.to(device)
optimizer = AdamW(model.parameters())
trainset = TokenizerLoader(t_df0.reset_index())
trainloader = DataLoader(trainset, batch_size=3, shuffle=True)
for epoch in range(6):
      model.train()
      total_loss = 0
      steps = 0
      print( f"epoch n. {epoch}")
      for batch in trainloader:
        steps += 1
        labels = torch.zeros((batch[2].shape[0],3),device=device)
        for i,x in zip(range(batch[2].shape[0]),batch[2]):
          labels[i][int(x)]=1
        optimizer.zero_grad()
        m = model(input_ids=batch[0].to(device), attention_mask=batch[1].to(device),labels=labels)
        loss = m.loss
        total_loss += loss
        if steps%15 == 0:
          print('True labels: ',batch[2].view(1,-1), 'Predicted labels: ', torch.argmax(m.logits,axis=1))
          print('AVG Loss: ', total_loss/steps)
        loss.backward()
        optimizer.step()

我尝试在对数据集的不同部分进行调优之前测试模型,在调优之后,微调后精度会变差。我在 huggingface 上读到,bert 变压器的损失标准默认是交叉熵损失。当我开始这个阶段时,损失开始缓慢但稳定地下降,但是每 15 步,当我打印真实标签和预测标签之间的比较时,我发现它在训练集上的准确度确实更差,所以在测试之后确实如此放。我是文本分类领域的新手,我想要一些提示来改进这一点,请随时问我其他代码或解释如何构建数据集、标记器等......它真的感觉不同计算机视觉和图像相关-ML

谢谢

标签: pythonmachine-learningsentiment-analysistext-classification

解决方案


推荐阅读