news 2026/3/24 22:25:51

Day47_预训练模型与迁移学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day47_预训练模型与迁移学习
# 4. 定义 MobileNetV2 模型 def create_mobilenet_v2(pretrained=True, num_classes=10): model = models.mobilenet_v2(pretrained=pretrained) # MobileNetV2 的分类器结构: # (classifier): Sequential( # (0): Dropout(p=0.2, inplace=False) # (1): Linear(in_features=1280, out_features=1000, bias=True) # ) # 修改最后一层全连接层 # 获取分类器中最后一个线性层的输入特征数 in_features = model.classifier[1].in_features model.classifier[1] = nn.Linear(in_features, num_classes) return model.to(device) # 5. 冻结/解冻模型层的函数 def freeze_model(model, freeze=True): """冻结或解冻模型的特征提取层参数""" # MobileNetV2 的特征提取部分是 'features' for param in model.features.parameters(): param.requires_grad = not freeze # 打印冻结状态 frozen_params = sum(p.numel() for p in model.parameters() if not p.requires_grad) total_params = sum(p.numel() for p in model.parameters()) if freeze: print(f"已冻结模型特征层参数 ({frozen_params}/{total_params} 参数)") else: print(f"已解冻模型所有参数 ({total_params}/{total_params} 参数可训练)") return model
# 6. 训练函数 def train_model(model, train_loader, test_loader, criterion, optimizer, scheduler, device, epochs, freeze_epochs=1): train_loss_history = [] test_acc_history = [] # 初始冻结 if freeze_epochs > 0: model = freeze_model(model, freeze=True) for epoch in range(epochs): # 解冻控制 if epoch == freeze_epochs: print(f"Epoch {epoch}: 解冻所有参数,开始微调...") model = freeze_model(model, freeze=False) # 解冻后通常使用更小的学习率 for param_group in optimizer.param_groups: param_group['lr'] *= 0.1 model.train() running_loss = 0.0 correct = 0 total = 0 for batch_idx, (data, target) in enumerate(train_loader): data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step() running_loss += loss.item() _, predicted = output.max(1) total += target.size(0) correct += predicted.eq(target).sum().item() if (batch_idx + 1) % 200 == 0: print(f"Epoch {epoch+1} | Batch {batch_idx+1}/{len(train_loader)} | Loss: {loss.item():.4f}") epoch_loss = running_loss / len(train_loader) train_acc = 100. * correct / total # 测试 model.eval() correct_test = 0 total_test = 0 with torch.no_grad(): for data, target in test_loader: data, target = data.to(device), target.to(device) output = model(data) _, predicted = output.max(1) total_test += target.size(0) correct_test += predicted.eq(target).sum().item() test_acc = 100. * correct_test / total_test train_loss_history.append(epoch_loss) test_acc_history.append(test_acc) if scheduler: scheduler.step() print(f"Epoch {epoch+1} End | Train Loss: {epoch_loss:.4f} | Train Acc: {train_acc:.2f}% | Test Acc: {test_acc:.2f}%") return train_loss_history, test_acc_history # 主运行逻辑 def run_training(): # 减少 epoch 数以节省时间演示 epochs = 5 freeze_epochs = 2 learning_rate = 0.001 model = create_mobilenet_v2(pretrained=True, num_classes=10) criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=learning_rate) scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=3, gamma=0.1) print("开始训练 MobileNetV2...") train_loss, test_acc = train_model( model, train_loader, test_loader, criterion, optimizer, scheduler, device, epochs, freeze_epochs ) # 简单绘图 plt.figure(figsize=(10, 4)) plt.subplot(1, 2, 1) plt.plot(train_loss, label='Train Loss') plt.title('Training Loss') plt.legend() plt.subplot(1, 2, 2) plt.plot(test_acc, label='Test Acc') plt.title('Test Accuracy') plt.legend() plt.show() if __name__ == "__main__": run_training()

@浙大疏锦行

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/17 4:03:39

Comfy-Photoshop-SD插件:快速连接AI绘图与Photoshop的终极指南

想要在Photoshop中直接使用ComfyUI的强大AI绘图功能吗?Comfy-Photoshop-SD插件正是你需要的解决方案。这个实用的Photoshop插件能够建立ComfyUI与Auto-Photoshop-SD插件之间的无缝连接,让你的AI绘图工作流程更加顺畅高效。无论你是AI绘图新手还是专业设计…

作者头像 李华
网站建设 2026/3/13 17:41:24

PowerToys中文版终极指南:5步快速提升Windows工作效率

PowerToys中文版终极指南:5步快速提升Windows工作效率 【免费下载链接】PowerToys-CN PowerToys Simplified Chinese Translation 微软增强工具箱 自制汉化 项目地址: https://gitcode.com/gh_mirrors/po/PowerToys-CN 还在为PowerToys英文界面而困扰&#x…

作者头像 李华
网站建设 2026/3/24 14:35:32

GPT-SoVITS在在线教育中的语音助教应用

GPT-SoVITS在在线教育中的语音助教应用 在如今的在线教育平台中,教师常常面临重复讲解、课件录制耗时、个性化教学难以覆盖等现实挑战。一个常见的场景是:一位数学老师需要为三个不同班级录制相同的“勾股定理”课程视频——内容完全一样,却要…

作者头像 李华
网站建设 2026/3/22 23:20:26

如何快速实现HTML到Figma的无缝转换:完整指南

HTML转Figma工具是一款革命性的Chrome扩展插件,能够将网页代码自动转换为Figma设计稿,极大地提升了设计开发的工作效率。这款工具通过智能解析DOM结构和CSS样式,实现从网页到设计稿的精准转换,为前端开发者和UI设计师搭建了高效的…

作者头像 李华
网站建设 2026/3/13 15:03:47

IPTV部署新选择:Docker一键安装iptvnator全攻略

IPTV部署新选择:Docker一键安装iptvnator全攻略 【免费下载链接】iptvnator 项目地址: https://gitcode.com/GitHub_Trending/ip/iptvnator 还在为复杂的IPTV配置而头疼?想要快速搭建属于自己的媒体中心却无从下手?今天就来介绍一个让…

作者头像 李华
网站建设 2026/3/24 17:18:11

西安交通大学学位论文LaTeX模板:从入门到精通的全方位指南

你是否正在为学位论文的格式要求而烦恼?是否觉得Word排版总是无法完美满足学校的要求?今天,我将为你详细介绍西安交通大学官方推出的LaTeX学位论文模板,帮助你轻松应对论文排版的挑战!🚀 【免费下载链接】X…

作者头像 李华