python - 如何使用变形金刚改善我的训练阶段?(文字分类)
问题描述
我是 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
谢谢
解决方案
推荐阅读
- javascript - 从数组中删除项目时,管道不会更新模板
- xml - powershell - 遍历xml文件的文件目录并替换每个文件的特定节点
- azure - Azure 创建的 ARM 在 Azure 中无效
- java - 当 EditText 为空并且我按下按钮时,我的应用程序崩溃
- java - 无法运行 flink 示例程序,连接被拒绝
- r - 如何添加我的 R 包函数要使用的 CSS 外部文件?
- vue.js - 如何从拦截器中模糊组件
- javascript - 如何将外部 js 文件添加到 Laravel 项目 app.js 文件中?
- excel - 从列值创建工作表,并在每个工作表的特定单元格中的列中插入值
- sql - 基于 1 列创建多行