在 PyTorch 中进行**微调(Fine-tuning)**通常指:利用在大规模数据上预训练好的模型(如 ResNet、BERT 等),在自己的任务数据上继续训练,以适应新任务。
下面从核心思路 → 常见做法 → 示例代码三部分说明。
import torch
import torch.nn as nn
from torchvision import models
model = models.resnet18(pretrained=True)
num_classes = 10 # 你的任务类别数
# 修改最后一层
model.fc = nn.Linear(model.fc.in_features, num_classes)
for name, param in model.named_parameters():
if "fc" not in name:
param.requires_grad = False
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(
model.fc.parameters(),
lr=1e-3
)
model.train()
for x, y in dataloader:
x, y = x.to(device), y.to(device)
optimizer.zero_grad()
out = model(x)
loss = criterion(out, y)
loss.backward()
optimizer.step()
for param in model.parameters():
param.requires_grad = True
optimizer = torch.optim.SGD(
model.parameters(),
lr=1e-4,
momentum=0.9
)
from transformers import BertForSequenceClassification, AdamW
model = BertForSequenceClassification.from_pretrained(
"bert-base-chinese",
num_labels=2
)
optimizer = AdamW(model.parameters(), lr=2e-5)
✅ 学习率:
1e-3 ~ 1e-42e-5 ~ 5e-5✅ Batch Size 尽量大
✅ 使用预训练均值/方差做归一化
✅ 先冻结再解冻,效果更好更稳定
如果你有具体任务(CV / NLP / 语音 / 自定义模型),可以告诉我,我可以给你更针对性的微调代码模板。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。