永春网站设计网站架构图图
2026/2/23 5:05:25 网站建设 项目流程
永春网站设计,网站架构图图,彩票网站里的统计怎么做,成都 直播网站建设浙大疏锦行 #x1f4d8; Day 44 实战作业 (极速版)#xff1a;ResNet 与 迁移学习 1. 作业综述 核心目标#xff1a; 迁移学习#xff1a;学会调用 ImageNet 预训练的 ResNet18 模型#xff0c;将其知识迁移到 CIFAR-10 任务上。策略对比#xff1a;亲手实验 冻结骨…浙大疏锦行 Day 44 实战作业 (极速版)ResNet 与 迁移学习1. 作业综述核心目标迁移学习学会调用 ImageNet 预训练的 ResNet18 模型将其知识迁移到 CIFAR-10 任务上。策略对比亲手实验冻结骨干 (Linear Probing)和解冻微调 (Fine-tuning)两种策略的效果差异。工业级加速掌握混合精度训练 (AMP)和分辨率适配技巧在保持高精度的同时极大提升训练速度。涉及知识点ResNet18: 工业界最常用的基准模型。Transfer Learning:pretrainedTrue,freeze weights.AMP (Automatic Mixed Precision):torch.cuda.amp.Data Resize: 适配模型输入尺寸。场景类比从头训练: 像小学生写作文词汇量有限写得慢且水平一般。迁移学习: 像大学教授写作文知识渊博。冻结: 教授套模板写只练最后一层速度极快。微调: 教授认真推敲每一句话全网微调水平最高。步骤 1数据准备 (极速配置)优化策略分辨率 112x112比标准的 224x224 少了 75% 的像素速度提升显著。Pin Memory: 锁页内存加快数据传输。任务定义预处理管道 (Resize - 112)。加载 CIFAR-10 数据集。importtorchimporttorch.nnasnnimporttorch.optimasoptimfromtorchvisionimportdatasets,transforms,modelsfromtorch.utils.dataimportDataLoaderfromtorch.cuda.ampimportautocast,GradScaler# 混合精度神器importtime# --- 1. 极速配置 ---IMG_SIZE112# 降级分辨率加速 (原版 224)BATCH_SIZE128# 因为图小了Batch 可以开大点 (原版 32)NUM_WORKERS2# 数据加载进程数# 2. 定义预处理norm_mean[0.485,0.456,0.406]norm_std[0.229,0.224,0.225]train_transformtransforms.Compose([transforms.Resize(IMG_SIZE),transforms.RandomHorizontalFlip(),# 数据增强transforms.ToTensor(),transforms.Normalize(norm_mean,norm_std)])test_transformtransforms.Compose([transforms.Resize(IMG_SIZE),transforms.ToTensor(),transforms.Normalize(norm_mean,norm_std)])# 3. 加载数据 (开启 pin_memory)print( 正在加载数据...)train_datasetdatasets.CIFAR10(root./data,trainTrue,downloadTrue,transformtrain_transform)test_datasetdatasets.CIFAR10(root./data,trainFalse,downloadTrue,transformtest_transform)train_loaderDataLoader(train_dataset,batch_sizeBATCH_SIZE,shuffleTrue,num_workersNUM_WORKERS,pin_memoryTrue)test_loaderDataLoader(test_dataset,batch_sizeBATCH_SIZE,shuffleFalse,num_workersNUM_WORKERS,pin_memoryTrue)devicetorch.device(cudaiftorch.cuda.is_available()elsecpu)print(f✅ 数据准备就绪 | 设备:{device}| 输入尺寸:{IMG_SIZE}x{IMG_SIZE}) 正在加载数据... ✅ 数据准备就绪 | 设备: cuda | 输入尺寸: 112x112步骤 2模型构建工厂任务编写一个函数create_resnet18灵活控制是否加载预训练权重、是否冻结骨干。Backbone: ResNet18 (去掉最后的全连接层)。Head: 新的全连接层 (输出 10 类)。defcreate_resnet18(pretrainedTrue,freezeFalse): 创建一个适配 CIFAR-10 的 ResNet18 # 1. 加载模型ifpretrained:# weightsDEFAULT 自动下载最新权重modelmodels.resnet18(weightsmodels.ResNet18_Weights.DEFAULT)print(f [模型创建] 加载 ImageNet 预训练权重 (Freeze{freeze})...)else:modelmodels.resnet18(weightsNone)print(f✨ [模型创建] 随机初始化权重...)# 2. 冻结骨干 (Backbone)iffreeze:forparaminmodel.parameters():param.requires_gradFalse# 3. 替换 Head (这一层默认是可训练的)# ResNet18 的 fc 输入特征数是 512in_featuresmodel.fc.in_features model.fcnn.Linear(in_features,10)returnmodel步骤 3混合精度训练引擎优化策略使用torch.cuda.amp进行半精度 (FP16) 训练。显存占用减半计算速度翻倍非常适合 RTX 30 系列显卡。任务封装train_one_epoch和evaluate函数集成 AMP 逻辑。# 初始化梯度缩放器 (AMP 必备)scalerGradScaler()deftrain_one_epoch(model,loader,criterion,optimizer):model.train()running_loss0.0correct0total0forinputs,labelsinloader:inputs,labelsinputs.to(device),labels.to(device)optimizer.zero_grad()# --- 核心优化混合精度上下文 ---withautocast():outputsmodel(inputs)losscriterion(outputs,labels)# --- 核心优化缩放梯度反向传播 ---scaler.scale(loss).backward()scaler.step(optimizer)scaler.update()# 统计running_lossloss.item()_,predictedoutputs.max(1)totallabels.size(0)correctpredicted.eq(labels).sum().item()returnrunning_loss/len(loader),100.*correct/totaldefevaluate(model,loader,criterion):model.eval()running_loss0.0correct0total0withtorch.no_grad():forinputs,labelsinloader:inputs,labelsinputs.to(device),labels.to(device)# 测试时不需要 scaler但可以用 autocast 加速推理withautocast():outputsmodel(inputs)losscriterion(outputs,labels)running_lossloss.item()_,predictedoutputs.max(1)totallabels.size(0)correctpredicted.eq(labels).sum().item()returnrunning_loss/len(loader),100.*correct/totalC:\Users\ADVANCE\AppData\Local\Temp\ipykernel_4824\1229741273.py:2: FutureWarning: torch.cuda.amp.GradScaler(args...) is deprecated. Please use torch.amp.GradScaler(cuda, args...) instead. scaler GradScaler()步骤 4实验 A - 极速冻结训练 (Linear Probing)场景只训练最后一层分类器 (Head)。因为骨干网络参数被锁死无需计算梯度速度快到飞起。预期3 个 Epoch 内准确率应该能达到80% - 85%。print(\n 实验 A: 冻结骨干 (只练 Head) )start_timetime.time()# 1. 创建冻结模型model_frozencreate_resnet18(pretrainedTrue,freezeTrue).to(device)criterionnn.CrossEntropyLoss()# 2. 优化器 (只优化 fc 层lr 可以大一点)optimizeroptim.Adam(model_frozen.fc.parameters(),lr0.001)# 3. 训练 3 轮forepochinrange(3):train_loss,train_acctrain_one_epoch(model_frozen,train_loader,criterion,optimizer)test_loss,test_accevaluate(model_frozen,test_loader,criterion)print(fEpoch{epoch1}: Train Acc:{train_acc:.2f}% | Test Acc:{test_acc:.2f}%)print(f⏱️ 实验 A 耗时:{time.time()-start_time:.2f}秒) 实验 A: 冻结骨干 (只练 Head) [模型创建] 加载 ImageNet 预训练权重 (FreezeTrue)... C:\Users\ADVANCE\AppData\Local\Temp\ipykernel_4824\1229741273.py:16: FutureWarning: torch.cuda.amp.autocast(args...) is deprecated. Please use torch.amp.autocast(cuda, args...) instead. with autocast(): C:\Users\ADVANCE\AppData\Local\Temp\ipykernel_4824\1229741273.py:43: FutureWarning: torch.cuda.amp.autocast(args...) is deprecated. Please use torch.amp.autocast(cuda, args...) instead. with autocast(): Epoch 1: Train Acc: 70.42% | Test Acc: 75.63% Epoch 2: Train Acc: 76.52% | Test Acc: 76.82% Epoch 3: Train Acc: 77.49% | Test Acc: 76.55% ⏱️ 实验 A 耗时: 111.37 秒步骤 5实验 B - 全网微调 (Fine-tuning)场景解冻所有层让 ResNet 针对 CIFAR-10 进行自我调整。这通常能达到最高精度但计算量大。得益于我们的 AMP 和 Resize 优化这里也能跑得很快。关键技巧分层学习率骨干网络 (Backbone) 用小火慢炖 (1e-4)分类头 (Head) 用大火爆炒 (1e-3)。预期3 个 Epoch 内准确率有望突破90%。print(\n 实验 B: 解冻微调 (追求极致精度) )start_timetime.time()# 1. 创建解冻模型model_finetunecreate_resnet18(pretrainedTrue,freezeFalse).to(device)# 2. 分层学习率设置optimizeroptim.Adam([{params:model_finetune.conv1.parameters(),lr:1e-4},{params:model_finetune.layer1.parameters(),lr:1e-4},{params:model_finetune.layer2.parameters(),lr:1e-4},{params:model_finetune.layer3.parameters(),lr:1e-4},{params:model_finetune.layer4.parameters(),lr:1e-4},{params:model_finetune.fc.parameters(),lr:1e-3}# Head 用大一点的 LR])# 3. 训练 3 轮forepochinrange(3):train_loss,train_acctrain_one_epoch(model_finetune,train_loader,criterion,optimizer)test_loss,test_accevaluate(model_finetune,test_loader,criterion)print(fEpoch{epoch1}: Train Acc:{train_acc:.2f}% | Test Acc:{test_acc:.2f}%)print(f⏱️ 实验 B 耗时:{time.time()-start_time:.2f}秒) 实验 B: 解冻微调 (追求极致精度) [模型创建] 加载 ImageNet 预训练权重 (FreezeFalse)... C:\Users\ADVANCE\AppData\Local\Temp\ipykernel_4824\1229741273.py:16: FutureWarning: torch.cuda.amp.autocast(args...) is deprecated. Please use torch.amp.autocast(cuda, args...) instead. with autocast(): C:\Users\ADVANCE\AppData\Local\Temp\ipykernel_4824\1229741273.py:43: FutureWarning: torch.cuda.amp.autocast(args...) is deprecated. Please use torch.amp.autocast(cuda, args...) instead. with autocast(): Epoch 1: Train Acc: 88.53% | Test Acc: 92.06% Epoch 2: Train Acc: 95.27% | Test Acc: 92.97% Epoch 3: Train Acc: 97.24% | Test Acc: 93.48% ⏱️ 实验 B 耗时: 173.20 秒 Day 44 总结速度与激情的平衡今天我们不仅学习了迁移学习还掌握了显卡榨干技巧。对比结果从头训练 (Day 41): 20 轮才跑 75%还慢。冻结训练 (实验 A): 几秒钟跑完直接 80%。适合快速验证想法。微调训练 (实验 B): 精度之王轻松 90%。配合 AMP 和 Resize 优化速度也完全可以接受。工程化经验遇到训练慢先问自己图是不是太大了是不是没开混合精度遇到显存爆先问自己Batch Size 是不是太大了能不能减小图片尺寸Next Level:明天Day 45我们将走出分类任务的舒适区挑战计算机视觉皇冠上的明珠 ——目标检测 (Object Detection)。我们将学习如何不仅识别出“猫”还能框出“猫在哪里”

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询