4年技术经验
2026/7/6 4:26:08
迁移学习策略: ├── 特征提取:冻结预训练层,只训练新分类头 ├── 微调:解冻部分预训练层,低学习率训练 └── 全量微调:解冻所有层,极低学习率训练importtorchimporttorch.nnasnnfromtorchvisionimportmodels# 加载预训练模型model=models.resnet50(pretrained=True)# 冻结所有层forparaminmodel.parameters():param.requires_grad=False# 替换分类头num_classes=10model.fc=nn.Linear(model.fc.in_features,num_classes)# 只训练分类头optimizer=torch.optim.Adam(model.fc.parameters(),lr=0.001)# 阶段 2:微调forparaminmodel.layer4.parameters():param.requires_grad=Trueoptimizer=torch.optim.Adam([{'params':model.layer4.parameters(),'lr':0.0001},{'params':model.fc.parameters(),'lr':0.001},])fromtransformersimportBertTokenizer,BertForSequenceClassificationfromtransformersimportTrainer,TrainingArguments tokenizer=BertTokenizer.from_pretrained('bert-base-chinese')model=BertForSequenceClassification.from_pretrained('bert-base-chinese',num_labels=2)# 数据处理deftokenize(examples):returntokenizer(examples['text'],padding='max_length',truncation=True,max_length=128)# 训练training_args=TrainingArguments(output_dir='./results',num_train_epochs=3,per_device_train_batch_size=16,learning_rate=2e-5,warmup_steps=500,evaluation_strategy='epoch',)trainer=Trainer(model=model,args=training_args,train_dataset=train_dataset)trainer.train()| 策略 | 数据量 | 学习率 | 适用场景 |
|---|---|---|---|
| 特征提取 | 少 | 大 | 数据极少 |
| 微调 | 中 | 中 | 最常用 |
| 全量微调 | 多 | 小 | 数据充足 |