使用pytorch,冻结resnet50前几层进行迁移学习

在PyTorch中,冻结ResNet50模型的前几层可以通过以下步骤进行:

python 复制代码
import torch
import torchvision.models as models

# 加载预训练的ResNet50模型
model = models.resnet50(pretrained=True)

# 冻结需要保持不变的层,通常是前几个卷积层
for name, param in model.named_parameters():
    if 'conv1' in name or 'bn1' in name or 'layer1' in name or 'layer2' in name:
        param.requires_grad = False

# 修改最后一层进行微调
num_classes = 10  # 假设输出类别数为10
model.fc = torch.nn.Linear(model.fc.in_features, num_classes)

# 将模型移到GPU上(如果可用)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

# 编译和训练模型
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

# 训练模型
for epoch in range(num_epochs):
    running_loss = 0.0
    for inputs, labels in train_loader:
        inputs = inputs.to(device)
        labels = labels.to(device)

        optimizer.zero_grad()

        # 前向传播
        outputs = model(inputs)
        loss = criterion(outputs, labels)

        # 反向传播和优化
        loss.backward()
        optimizer.step()

        running_loss += loss.item()

    # 打印每个epoch的损失值
    print(f"Epoch {epoch+1} Loss: {running_loss/len(train_loader)}")

在这个例子中,我们加载了预训练的ResNet50模型,并将指定的层参数设置为不需要梯度更新。具体来说,我们冻结了conv1bn1layer1layer2这些层的参数。然后,通过修改最后一层(全连接层)来适应自己的数据集。接下来,将模型移动到GPU上(如果可用),定义损失函数和优化器,并进行模型训练。

请根据你自己的数据集和任务适当调整代码。

相关推荐
机器之心9 分钟前
DeepSeek刚提到FP8,英伟达就把FP4精度推向预训练,更快、更便宜
人工智能·openai
AiPy_极客团长24 分钟前
AI解决生活小事系列——用AI给我的电脑做一次“深度体检”
人工智能·python·电脑维修·实战技巧
小王爱学人工智能29 分钟前
神经网络模型搭建及手写数字识别案例
pytorch·python·神经网络
一念&1 小时前
今日科技热点 | AI创新、量子计算突破与5G应用加速:引领未来的技术浪潮
人工智能·科技·量子计算
亚马逊云开发者1 小时前
快时尚电商行业智能体设计思路与应用实践(三)借助 Transcribe/Polly 打造新一代智能语音客服,实现媲美人工客服的对话体验
人工智能
岛屿旅人1 小时前
欧盟《人工智能法案》生效一年主要实施进展概览(二)
网络·人工智能·安全·web安全·架构
阿Paul果奶ooo1 小时前
数据分析与数据挖掘
人工智能·数据挖掘·数据分析
茫茫人海一粒沙1 小时前
LoRA 微调后幻觉排查 Checklist
人工智能
万邦科技Lafite1 小时前
京东API分类接口实战指南:获取各类商品信息
数据库·人工智能·api接口·开放api·电商开放平台
nnerddboy1 小时前
预测模型及超参数:2.传统机器学习:PLS及其改进
人工智能·机器学习