从零开始写ChatGLM大模型的微调代码

cursor 的下载及安装(免费版每月100次,升级pro 20刀/月)

cursor是一款与openai合作的,使用gpt-4的一款编程工具,它可以让你通过gpt-4进行辅助编程,以此提高效率。

下载地址:https://www.cursor.so/
cursor的使用

cursor的使用方式极其简易,只有两个快捷键,即ctrl+k\ctrl+l。
ctrl+k 表单形式使用

按快捷键:ctrl+k弹出输入框,输入你所需要写的代码要求及技术按回车即可。如下图。
在这里插入图片描述
程序将自己生成代码:
在这里插入图片描述
ctrl+l 对话框形式使用

按快捷键:ctrl+l弹出输入框,输入你想问的问题,或者内容即可获得相应的回复和对话框。
在这里插入图片描述
cursor可以做到的事

用了之后,发现真的很强大,可以写sql、html、js、算法、找bug等
代码续写、重写能力

ctrl+a + ctrl+k 告诉他帮你续写或者重写

微调大模型实现步骤(cursor生成)

 1. 加载预训练模型
 2. 冻结模型的所有参数
 3. 替换模型的最后一层为新的全连接层
 4. 解冻新的全连接层的参数
 5. 定义损失函数和优化器
 6. 训练新的全连接层
 7. 解冻模型的前几层
 8. 降低学习率
 9. 继续训练整个模型
 10. 保存微调后的模型

加载预训练模型

pretrained_model = models.resnet50(pretrained=True)

冻结模型的所有参数

for param in pretrained_model.parameters():
    param.requires_grad = False

替换模型的最后一层为新的全连接层

pretrained_model.fc = nn.Linear(pretrained_model.fc.in_features, num_classes)

解冻新的全连接层的参数

for param in pretrained_model.fc.parameters():
    param.requires_grad = True

定义损失函数和优化器

criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(pretrained_model.fc.parameters(), lr=0.001, momentum=0.9)

训练新的全连接层

for epoch in range(10):
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = pretrained_model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
        if i % 2000 == 1999:
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

解冻模型的前几层

for param in pretrained_model.layer4.parameters():
    param.requires_grad = True

降低学习率

optimizer = optim.SGD(pretrained_model.parameters(), lr=0.0001, momentum=0.9)

继续训练整个模型

for epoch in range(10):
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = pretrained_model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
        if i % 2000 == 1999:
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

保存微调后的模型

torch.save(pretrained_model.state_dict(), 'fine_tuned_model.pth')

详情参考:https://blog.csdn.net/KanShiMeKan/article/details/129651474

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值