新加坡的网站域名免费在线图片设计制作生成器
新加坡的网站域名,免费在线图片设计制作生成器,网站建设内容的重点,网推地推关键词#xff1a;ResNet-50, CIFAR-10, 迁移学习, 数据增强, 标签平滑, AdamW, 余弦退火,本文详细记录如何使用预训练 ResNet-50 在 CIFAR-10 数据集上实现 96.44% 的测试准确率。通过迁移学习、数据增强、标签平滑、AdamW 优化器和余弦退火学习率调度等技术的组合#xff0…关键词ResNet-50, CIFAR-10, 迁移学习, 数据增强, 标签平滑, AdamW, 余弦退火,本文详细记录如何使用预训练 ResNet-50 在 CIFAR-10 数据集上实现 96.44% 的测试准确率。通过迁移学习、数据增强、标签平滑、AdamW 优化器和余弦退火学习率调度等技术的组合我们在 30 个 epoch 内将模型从 85.58% 提升至 96.44%。 项目概览指标数值模型架构ResNet-50 (预训练)数据集CIFAR-10 (50K训练 / 10K测试)最佳测试准确率96.44%训练轮数30 epochs训练时间~160秒/epoch (NVIDIA A10)Batch Size64优化器AdamW 一、为什么选择 ResNet-50ResNet-50 是计算机视觉领域的经典骨干网络其核心创新在于残差连接Residual Connection有效解决了深层网络的梯度消失问题。对于 CIFAR-10 这样的中等规模数据集使用 ImageNet 预训练的 ResNet-50 具有以下优势强大的特征提取能力已在 1000 类 ImageNet 数据上学习通用视觉特征适中的参数量约 2500 万参数在 A10 GPU 上训练高效良好的迁移效果预训练权重可快速适应新任务def load_pretrained_model(num_classes10): # 加载预训练的ResNet-50模型 model models.resnet50(weightsResNet50_Weights.DEFAULT) # 修改最后的全连接层以适配CIFAR-10的10个类别 num_features model.fc.in_features model.fc nn.Linear(num_features, num_classes) return model 二、关键优化策略详解2.1 数据增强让模型见多识广CIFAR-10 图像分辨率仅为 32×32但 ResNet-50 期望 224×224 输入。我们设计了渐进式数据增强策略transform_train transforms.Compose([ transforms.Resize(224), # 上采样至224x224 transforms.RandomCrop(224, padding28), # 随机裁剪增加位置鲁棒性 transforms.RandomHorizontalFlip(p0.5), # 水平翻转 transforms.RandomRotation(15), # 随机旋转±15度 transforms.ColorJitter( # 颜色抖动增强光照鲁棒性 brightness0.2, contrast0.2, saturation0.2 ), transforms.ToTensor(), transforms.Normalize( # CIFAR-10专用归一化参数 (0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010) ), ])关键点使用 CIFAR-10 数据集本身的均值和标准差进行归一化而非 ImageNet 的统计值确保数据分布匹配。2.2 标签平滑软化目标分布传统的 one-hot 编码会迫使模型对预测过度自信容易导致过拟合。标签平滑Label Smoothing通过将目标分布从[0,0,1,0...]软化为[0.01,0.01,0.91,0.01...]有效提升模型泛化能力criterion nn.CrossEntropyLoss(label_smoothing0.1)2.3 AdamW 余弦退火现代优化组合相比传统 SGDAdamW解耦了权重衰减与梯度更新提供更稳定的正则化效果。配合余弦退火学习率调度实现学习率的平滑衰减optimizer optim.AdamW( model.parameters(), lr0.001, weight_decay1e-4 # L2正则化 ) scheduler optim.lr_scheduler.CosineAnnealingLR( optimizer, T_max30 # 完整周期覆盖全部训练 ) 三、训练过程分析3.1 准确率演进曲线完整的训练日志如下CUDA is available. GPU: NVIDIA A10 Memory allocated: 0.00 MB Using device: cuda Loading pre-trained ResNet-50 model... Downloading: https://download.pytorch.org/models/resnet50-11ad3fa6.pth to /root/.cache/torch/hub/checkpoints/resnet50-11ad3fa6.pth 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 97.8M/97.8M [01:2500:00, 1.20MB/s] Preparing CIFAR-10 dataset... Starting training for 30 epochs... Epoch 1: Training: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:3300:00, 5.08it/s, Loss0.942, Acc81.80%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.18it/s, Acc85.58%] Epoch 1/30: Train Loss: 0.9423, Train Acc: 81.80%, Test Acc: 85.58%, Best Acc: 85.58%, Time: 164.42s Epoch 2: Training: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.24it/s, Loss0.784, Acc88.49%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.39it/s, Acc90.10%] Epoch 2/30: Train Loss: 0.7840, Train Acc: 88.49%, Test Acc: 90.10%, Best Acc: 90.10%, Time: 159.61s Epoch 3: Training: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.24it/s, Loss0.732, Acc90.80%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.20it/s, Acc89.56%] Epoch 3/30: Train Loss: 0.7318, Train Acc: 90.80%, Test Acc: 89.56%, Best Acc: 90.10%, Time: 158.99s Epoch 4: Training: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.24it/s, Loss0.701, Acc92.04%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.35it/s, Acc90.93%] Epoch 4/30: Train Loss: 0.7008, Train Acc: 92.04%, Test Acc: 90.93%, Best Acc: 90.93%, Time: 159.79s Epoch 5: Training: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.24it/s, Loss0.675, Acc93.21%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.40it/s, Acc91.59%] Epoch 5/30: Train Loss: 0.6746, Train Acc: 93.21%, Test Acc: 91.59%, Best Acc: 91.59%, Time: 159.83s Epoch 6: Training: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.24it/s, Loss0.659, Acc93.86%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.26it/s, Acc91.83%] Epoch 6/30: Train Loss: 0.6594, Train Acc: 93.86%, Test Acc: 91.83%, Best Acc: 91.83%, Time: 159.70s Epoch 7: Training: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.25it/s, Loss0.640, Acc94.55%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.27it/s, Acc92.27%] Epoch 7/30: Train Loss: 0.6403, Train Acc: 94.55%, Test Acc: 92.27%, Best Acc: 92.27%, Time: 159.77s Epoch 8: Training: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2800:00, 5.25it/s, Loss0.625, Acc95.21%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.39it/s, Acc93.06%] Epoch 8/30: Train Loss: 0.6253, Train Acc: 95.21%, Test Acc: 93.06%, Best Acc: 93.06%, Time: 159.32s Epoch 9: Training: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.25it/s, Loss0.612, Acc95.68%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.34it/s, Acc94.04%] Epoch 9/30: Train Loss: 0.6119, Train Acc: 95.68%, Test Acc: 94.04%, Best Acc: 94.04%, Time: 159.44s Epoch 10: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.25it/s, Loss0.596, Acc96.32%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.29it/s, Acc94.03%] Epoch 10/30: Train Loss: 0.5958, Train Acc: 96.32%, Test Acc: 94.03%, Best Acc: 94.04%, Time: 158.69s Epoch 11: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2800:00, 5.26it/s, Loss0.584, Acc96.85%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.36it/s, Acc94.01%] Epoch 11/30: Train Loss: 0.5840, Train Acc: 96.85%, Test Acc: 94.01%, Best Acc: 94.04%, Time: 158.35s Epoch 12: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2800:00, 5.26it/s, Loss0.575, Acc97.24%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.30it/s, Acc94.16%] Epoch 12/30: Train Loss: 0.5746, Train Acc: 97.24%, Test Acc: 94.16%, Best Acc: 94.16%, Time: 159.41s Epoch 13: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2800:00, 5.26it/s, Loss0.565, Acc97.59%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.36it/s, Acc94.41%] Epoch 13/30: Train Loss: 0.5650, Train Acc: 97.59%, Test Acc: 94.41%, Best Acc: 94.41%, Time: 159.26s Epoch 14: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2800:00, 5.25it/s, Loss0.558, Acc97.83%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.39it/s, Acc94.87%] Epoch 14/30: Train Loss: 0.5582, Train Acc: 97.83%, Test Acc: 94.87%, Best Acc: 94.87%, Time: 160.17s Epoch 15: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2800:00, 5.25it/s, Loss0.548, Acc98.33%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.38it/s, Acc95.20%] Epoch 15/30: Train Loss: 0.5476, Train Acc: 98.33%, Test Acc: 95.20%, Best Acc: 95.20%, Time: 159.29s Epoch 16: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.24it/s, Loss0.541, Acc98.54%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.34it/s, Acc94.62%] Epoch 16/30: Train Loss: 0.5414, Train Acc: 98.54%, Test Acc: 94.62%, Best Acc: 95.20%, Time: 158.77s Epoch 17: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.25it/s, Loss0.536, Acc98.73%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.37it/s, Acc95.72%] Epoch 17/30: Train Loss: 0.5362, Train Acc: 98.73%, Test Acc: 95.72%, Best Acc: 95.72%, Time: 159.44s Epoch 18: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2800:00, 5.25it/s, Loss0.528, Acc99.05%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.33it/s, Acc95.47%] Epoch 18/30: Train Loss: 0.5280, Train Acc: 99.05%, Test Acc: 95.47%, Best Acc: 95.72%, Time: 158.60s Epoch 19: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.24it/s, Loss0.524, Acc99.17%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.33it/s, Acc95.76%] Epoch 19/30: Train Loss: 0.5241, Train Acc: 99.17%, Test Acc: 95.76%, Best Acc: 95.76%, Time: 159.51s Epoch 20: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2800:00, 5.25it/s, Loss0.520, Acc99.35%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.34it/s, Acc95.69%] Epoch 20/30: Train Loss: 0.5201, Train Acc: 99.35%, Test Acc: 95.69%, Best Acc: 95.76%, Time: 158.45s Epoch 21: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.25it/s, Loss0.517, Acc99.49%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.37it/s, Acc96.05%] Epoch 21/30: Train Loss: 0.5166, Train Acc: 99.49%, Test Acc: 96.05%, Best Acc: 96.05%, Time: 159.51s Epoch 22: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2800:00, 5.25it/s, Loss0.514, Acc99.56%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.37it/s, Acc96.06%] Epoch 22/30: Train Loss: 0.5142, Train Acc: 99.56%, Test Acc: 96.06%, Best Acc: 96.06%, Time: 159.21s Epoch 23: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.25it/s, Loss0.510, Acc99.72%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.32it/s, Acc96.24%] Epoch 23/30: Train Loss: 0.5101, Train Acc: 99.72%, Test Acc: 96.24%, Best Acc: 96.24%, Time: 159.59s Epoch 24: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.25it/s, Loss0.509, Acc99.78%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.33it/s, Acc96.27%] Epoch 24/30: Train Loss: 0.5086, Train Acc: 99.78%, Test Acc: 96.27%, Best Acc: 96.27%, Time: 159.53s Epoch 25: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.25it/s, Loss0.507, Acc99.84%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.30it/s, Acc96.09%] Epoch 25/30: Train Loss: 0.5070, Train Acc: 99.84%, Test Acc: 96.09%, Best Acc: 96.27%, Time: 158.66s Epoch 26: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.25it/s, Loss0.506, Acc99.87%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.35it/s, Acc96.23%] Epoch 26/30: Train Loss: 0.5056, Train Acc: 99.87%, Test Acc: 96.23%, Best Acc: 96.27%, Time: 158.67s Epoch 27: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2800:00, 5.25it/s, Loss0.505, Acc99.91%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.30it/s, Acc96.25%] Epoch 27/30: Train Loss: 0.5050, Train Acc: 99.91%, Test Acc: 96.25%, Best Acc: 96.27%, Time: 158.61s Epoch 28: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.25it/s, Loss0.504, Acc99.92%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.33it/s, Acc96.27%] Epoch 28/30: Train Loss: 0.5042, Train Acc: 99.92%, Test Acc: 96.27%, Best Acc: 96.27%, Time: 158.66s Epoch 29: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.25it/s, Loss0.504, Acc99.91%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.32it/s, Acc96.26%] Epoch 29/30: Train Loss: 0.5043, Train Acc: 99.91%, Test Acc: 96.26%, Best Acc: 96.27%, Time: 158.63s Epoch 30: Training: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 782/782 [02:2900:00, 5.24it/s, Loss0.504, Acc99.91%] Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.29it/s, Acc96.44%] Epoch 30/30: Train Loss: 0.5041, Train Acc: 99.91%, Test Acc: 96.44%, Best Acc: 96.44%, Time: 159.50s Training completed. Best accuracy: 96.44% Loading best model for final evaluation... Testing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 157/157 [00:0900:00, 16.36it/s, Acc96.44%] Final test accuracy: 96.44% Per-class accuracy: plane : 97.80% car : 98.20% bird : 94.60% cat : 90.50% deer : 97.80% dog : 94.40% frog : 98.90% horse : 98.20% ship : 97.30% truck : 96.70% Training History Summary: Best training accuracy: 99.92% Best test accuracy: 96.44% Generating inference visualization... 可视化结果已保存为 inference_results.png从训练日志中提取的关键节点Epoch训练准确率测试准确率损失值阶段特征181.80%85.58%0.9423快速收敛期593.21%91.59%0.6746迁移学习生效1096.32%94.03%0.5958稳定提升期1598.33%95.20%0.5476突破95%2099.35%95.69%0.5201高训练准确率2499.78%96.27%0.5086最佳性能点3099.91%96.44%0.5041最终收敛观察到的现象快速启动得益于预训练权重第1个 epoch 即达到 85.58%温和过拟合训练准确率99.91%与测试准确率96.44%差距约 3.5%在可接受范围收敛平稳最后 10 个 epoch 测试准确率稳定在 96% 以上未出现明显震荡3.2 各类别性能剖析plane : 97.80% ✈️ 航空器特征明显易识别 car : 98.20% 道路场景特征强 bird : 94.60% 与飞机有一定混淆 cat : 90.50% ⚠️ 最低准确率与狗易混淆 deer : 97.80% 形态特征独特 dog : 94.40% 与猫存在类别混淆 frog : 98.90% 最高准确率特征显著 horse : 98.20% 轮廓清晰 ship : 97.30% 水面背景易区分 truck : 96.70% 与 car 有相似性关键发现cat和dog是最具挑战性的类别这与 CIFAR-10 的固有难度分布一致。这两个类别在视觉上相似度高且数据集中存在标注噪声。️ 四、推理可视化验证下图展示了模型在随机选取的 10 张测试图像上的推理结果可视化解读✅绿色标注全部 10 个样本均预测正确置信度在 90.38% - 92.99% 之间高置信度即使是模糊的 32×32 上采样图像模型仍保持高置信度Cat 样本第2行第1列的猫图像模型以 92.99% 置信度正确识别说明尽管 cat 类别整体准确率最低但清晰样本仍可被可靠分类 五、核心经验总结5.1 什么策略最有效技术预期增益实现复杂度预训练权重15% → 20%⭐ 简单数据增强2% → 3%⭐⭐ 中等标签平滑0.5% → 1%⭐ 简单AdamW vs Adam0.3% → 0.5%⭐ 简单余弦退火训练稳定性↑⭐ 简单5.2 避免的陷阱直接使用 ImageNet 归一化参数CIFAR-10 的数据分布与 ImageNet 差异显著务必使用数据集本身的统计值过大的 Batch Size本实验使用 64 而非 256/512小 batch 带来的梯度噪声有助于泛化忽略 Resize 的质量32→224 的上采样会引入模糊配合 RandomCrop 可缓解5.3 可进一步探索的方向Mixup/CutMix 增强进一步提升泛化能力Test-Time Augmentation (TTA)推理时多视图投票知识蒸馏用 ResNet-101 或 EfficientNet 作为教师模型AutoAugment学习最优增强策略️ 六、快速复现指南# 环境要求 pip install torch torchvision tqdm matplotlib numpy # 直接运行 python run.py # 预期输出 # - 训练日志30 epochs约80分钟 # - best_resnet_cifar10.pth最佳模型权重 # - inference_results.png可视化结果 结语本项目展示了现代深度学习工程的最佳实践预训练模型 精心设计的增强策略 先进的优化技术。在 CIFAR-10 上达到 96.44% 的准确率已接近人类水平约 94%并超越多数传统方法。更重要的是整个训练过程稳定可控证明了这些技术的可靠性与实用性。给博主点一个关注吧感谢友友们支持需要完整代码的小伙伴可以私信博主哦~