零成本玩转深度学习Google ColabPyTorch实现猫狗分类实战第一次接触深度学习时最让人头疼的往往不是算法本身而是硬件门槛。当看到教程里建议使用GTX 1080Ti以上显卡的要求时很多人的学习热情可能瞬间冷却。但今天我要分享一个完全免费的解决方案——利用Google Colab的云端GPU资源配合PyTorch框架带你在10分钟内完成第一个CNN项目猫狗图片分类。1. 为什么选择Google ColabPyTorch组合对于初学者而言Google Colab简直是天赐良物。这个由Google提供的Jupyter Notebook环境不仅完全免费还自带GPU/TPU加速支持。我曾指导过数十位学生通过Colab入门深度学习他们共同的反馈是原来不需要昂贵设备也能玩转CNN与本地环境相比Colab有三大不可替代的优势零配置开箱即用无需安装CUDA、cuDNN等复杂的驱动环境免费GPU资源Tesla T4或K80显卡足以应对大多数入门项目云端协作便利代码和结果自动保存到Google Drive随时随地继续工作PyTorch则是当前最受欢迎的深度学习框架之一其动态计算图和Pythonic的API设计让代码读起来就像在读英文句子一样自然。下面这个对比表展示了不同环境的配置难度环境类型配置时间硬件要求适合场景本地CPU10分钟无极小模型调试本地GPU2小时需NVIDIA显卡专业开发Colab GPU1分钟浏览器即可学习/快速验证提示Colab的GPU配额并非无限连续使用12小时后会被暂时限制。建议将重要模型定期保存到Google Drive。2. 十分钟快速上手Colab打开浏览器访问 Google Colab 点击新建笔记本我们就已经完成了90%的环境准备。接下来只需三个关键步骤启用GPU加速# 在Colab中检查GPU是否可用 import torch print(torch.cuda.is_available()) # 应该输出True挂载Google Drive方便持久化存储数据集和模型from google.colab import drive drive.mount(/content/drive)安装必要库Colab已预装PyTorch!pip install torchvision遇到连接问题时可以尝试以下解决方案运行时断开点击运行时→重新启动运行时GPU不可用点击运行时→更改运行时类型→选择GPU3. 猫狗数据集处理技巧Kaggle的Dogs vs Cats数据集是绝佳的入门素材包含25,000张已标注图片。在Colab中获取数据有两种高效方式方法一直接从Kaggle下载!pip install kaggle from google.colab import files files.upload() # 上传kaggle.json API密钥 !mkdir ~/.kaggle !cp kaggle.json ~/.kaggle/ !chmod 600 ~/.kaggle/kaggle.json !kaggle competitions download -c dogs-vs-cats !unzip -q dogs-vs-cats.zip -d /content/data方法二使用预处理的精简数据集适合快速验证!wget https://example.com/mini_cats_dogs.zip # 替换为实际URL !unzip mini_cats_dogs.zip数据预处理是模型成功的关键。这个增强变换组合能显著提升模型泛化能力from torchvision import transforms train_transform transforms.Compose([ transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ColorJitter(brightness0.2, contrast0.2), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) val_transform transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ])4. 构建适合初学者的CNN模型与其直接使用复杂模型不如从基础架构开始理解。下面这个7层CNN包含了所有核心组件import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self): super().__init__() self.features nn.Sequential( nn.Conv2d(3, 16, 3, padding1), # 3通道输入16个滤波器 nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(16, 32, 3, padding1), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(32, 64, 3, padding1), nn.ReLU(), nn.MaxPool2d(2) ) self.classifier nn.Sequential( nn.Flatten(), nn.Linear(64*28*28, 512), nn.ReLU(), nn.Dropout(0.5), nn.Linear(512, 1), nn.Sigmoid() ) def forward(self, x): x self.features(x) return self.classifier(x)模型训练的最佳实践学习率选择从0.001开始尝试批次大小Colab的T4 GPU建议32-64早停机制验证损失连续3轮不下降时停止model SimpleCNN().cuda() criterion nn.BCELoss() optimizer torch.optim.Adam(model.parameters(), lr0.001) for epoch in range(10): model.train() for images, labels in train_loader: images, labels images.cuda(), labels.float().cuda() optimizer.zero_grad() outputs model(images).squeeze() loss criterion(outputs, labels) loss.backward() optimizer.step() # 验证环节 model.eval() with torch.no_grad(): # 验证代码...5. 模型评估与结果可视化训练完成后我们需要直观了解模型表现。这个可视化函数能同时显示预测结果和注意力区域import matplotlib.pyplot as plt def visualize_predictions(model, dataloader, classes, num_images6): model.eval() images, labels next(iter(dataloader)) images, labels images.cuda(), labels.cuda() outputs model(images).squeeze() preds (outputs 0.5).long() fig, axes plt.subplots(2, 3, figsize(15, 10)) for idx, ax in enumerate(axes.flat): if idx num_images: break ax.imshow(images[idx].cpu().permute(1,2,0)) ax.set_title(fTrue: {classes[labels[idx]]}\nPred: {classes[preds[idx]]}) ax.axis(off) plt.tight_layout() plt.show() visualize_predictions(model, test_loader, [cat, dog])对于更专业的评估可以生成混淆矩阵from sklearn.metrics import confusion_matrix import seaborn as sns y_true, y_pred [], [] with torch.no_grad(): for images, labels in test_loader: images images.cuda() outputs model(images).squeeze() preds (outputs 0.5).long() y_true.extend(labels.tolist()) y_pred.extend(preds.cpu().tolist()) cm confusion_matrix(y_true, y_pred) sns.heatmap(cm, annotTrue, fmtd, cmapBlues, xticklabels[Cat, Dog], yticklabels[Cat, Dog]) plt.xlabel(Predicted) plt.ylabel(Actual)6. 进阶技巧与性能优化当基础模型准确率达到80%以上后可以尝试这些提升技巧迁移学习实战使用预训练的ResNet18作为特征提取器from torchvision import models model models.resnet18(pretrainedTrue) for param in model.parameters(): # 冻结所有层 param.requires_grad False # 替换最后的全连接层 model.fc nn.Sequential( nn.Linear(model.fc.in_features, 256), nn.ReLU(), nn.Dropout(0.5), nn.Linear(256, 1), nn.Sigmoid() )混合精度训练可提速2-3倍from torch.cuda.amp import autocast, GradScaler scaler GradScaler() for epoch in range(10): for images, labels in train_loader: images, labels images.cuda(), labels.float().cuda() optimizer.zero_grad() with autocast(): outputs model(images).squeeze() loss criterion(outputs, labels) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()模型保存与部署# 保存完整模型 torch.save(model, /content/drive/MyDrive/cats_dogs_model.pth) # 只保存参数推荐方式 torch.save(model.state_dict(), /content/drive/MyDrive/model_weights.pth) # 加载模型 loaded_model SimpleCNN().cuda() loaded_model.load_state_dict(torch.load(/content/drive/MyDrive/model_weights.pth))在Colab中训练时如果遇到断连情况可以使用这个自动恢复技巧try: # 正常训练代码 except: print(训练中断正在保存进度...) torch.save({ epoch: epoch, model_state: model.state_dict(), optimizer_state: optimizer.state_dict(), loss: loss, }, /content/drive/MyDrive/checkpoint.pth) print(进度已保存请重新连接后加载检查点)
用Google Colab免费GPU,10分钟搞定你的第一个CNN项目:猫狗图片分类
发布时间:2026/5/31 3:17:27
零成本玩转深度学习Google ColabPyTorch实现猫狗分类实战第一次接触深度学习时最让人头疼的往往不是算法本身而是硬件门槛。当看到教程里建议使用GTX 1080Ti以上显卡的要求时很多人的学习热情可能瞬间冷却。但今天我要分享一个完全免费的解决方案——利用Google Colab的云端GPU资源配合PyTorch框架带你在10分钟内完成第一个CNN项目猫狗图片分类。1. 为什么选择Google ColabPyTorch组合对于初学者而言Google Colab简直是天赐良物。这个由Google提供的Jupyter Notebook环境不仅完全免费还自带GPU/TPU加速支持。我曾指导过数十位学生通过Colab入门深度学习他们共同的反馈是原来不需要昂贵设备也能玩转CNN与本地环境相比Colab有三大不可替代的优势零配置开箱即用无需安装CUDA、cuDNN等复杂的驱动环境免费GPU资源Tesla T4或K80显卡足以应对大多数入门项目云端协作便利代码和结果自动保存到Google Drive随时随地继续工作PyTorch则是当前最受欢迎的深度学习框架之一其动态计算图和Pythonic的API设计让代码读起来就像在读英文句子一样自然。下面这个对比表展示了不同环境的配置难度环境类型配置时间硬件要求适合场景本地CPU10分钟无极小模型调试本地GPU2小时需NVIDIA显卡专业开发Colab GPU1分钟浏览器即可学习/快速验证提示Colab的GPU配额并非无限连续使用12小时后会被暂时限制。建议将重要模型定期保存到Google Drive。2. 十分钟快速上手Colab打开浏览器访问 Google Colab 点击新建笔记本我们就已经完成了90%的环境准备。接下来只需三个关键步骤启用GPU加速# 在Colab中检查GPU是否可用 import torch print(torch.cuda.is_available()) # 应该输出True挂载Google Drive方便持久化存储数据集和模型from google.colab import drive drive.mount(/content/drive)安装必要库Colab已预装PyTorch!pip install torchvision遇到连接问题时可以尝试以下解决方案运行时断开点击运行时→重新启动运行时GPU不可用点击运行时→更改运行时类型→选择GPU3. 猫狗数据集处理技巧Kaggle的Dogs vs Cats数据集是绝佳的入门素材包含25,000张已标注图片。在Colab中获取数据有两种高效方式方法一直接从Kaggle下载!pip install kaggle from google.colab import files files.upload() # 上传kaggle.json API密钥 !mkdir ~/.kaggle !cp kaggle.json ~/.kaggle/ !chmod 600 ~/.kaggle/kaggle.json !kaggle competitions download -c dogs-vs-cats !unzip -q dogs-vs-cats.zip -d /content/data方法二使用预处理的精简数据集适合快速验证!wget https://example.com/mini_cats_dogs.zip # 替换为实际URL !unzip mini_cats_dogs.zip数据预处理是模型成功的关键。这个增强变换组合能显著提升模型泛化能力from torchvision import transforms train_transform transforms.Compose([ transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ColorJitter(brightness0.2, contrast0.2), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) val_transform transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ])4. 构建适合初学者的CNN模型与其直接使用复杂模型不如从基础架构开始理解。下面这个7层CNN包含了所有核心组件import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self): super().__init__() self.features nn.Sequential( nn.Conv2d(3, 16, 3, padding1), # 3通道输入16个滤波器 nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(16, 32, 3, padding1), nn.ReLU(), nn.MaxPool2d(2), nn.Conv2d(32, 64, 3, padding1), nn.ReLU(), nn.MaxPool2d(2) ) self.classifier nn.Sequential( nn.Flatten(), nn.Linear(64*28*28, 512), nn.ReLU(), nn.Dropout(0.5), nn.Linear(512, 1), nn.Sigmoid() ) def forward(self, x): x self.features(x) return self.classifier(x)模型训练的最佳实践学习率选择从0.001开始尝试批次大小Colab的T4 GPU建议32-64早停机制验证损失连续3轮不下降时停止model SimpleCNN().cuda() criterion nn.BCELoss() optimizer torch.optim.Adam(model.parameters(), lr0.001) for epoch in range(10): model.train() for images, labels in train_loader: images, labels images.cuda(), labels.float().cuda() optimizer.zero_grad() outputs model(images).squeeze() loss criterion(outputs, labels) loss.backward() optimizer.step() # 验证环节 model.eval() with torch.no_grad(): # 验证代码...5. 模型评估与结果可视化训练完成后我们需要直观了解模型表现。这个可视化函数能同时显示预测结果和注意力区域import matplotlib.pyplot as plt def visualize_predictions(model, dataloader, classes, num_images6): model.eval() images, labels next(iter(dataloader)) images, labels images.cuda(), labels.cuda() outputs model(images).squeeze() preds (outputs 0.5).long() fig, axes plt.subplots(2, 3, figsize(15, 10)) for idx, ax in enumerate(axes.flat): if idx num_images: break ax.imshow(images[idx].cpu().permute(1,2,0)) ax.set_title(fTrue: {classes[labels[idx]]}\nPred: {classes[preds[idx]]}) ax.axis(off) plt.tight_layout() plt.show() visualize_predictions(model, test_loader, [cat, dog])对于更专业的评估可以生成混淆矩阵from sklearn.metrics import confusion_matrix import seaborn as sns y_true, y_pred [], [] with torch.no_grad(): for images, labels in test_loader: images images.cuda() outputs model(images).squeeze() preds (outputs 0.5).long() y_true.extend(labels.tolist()) y_pred.extend(preds.cpu().tolist()) cm confusion_matrix(y_true, y_pred) sns.heatmap(cm, annotTrue, fmtd, cmapBlues, xticklabels[Cat, Dog], yticklabels[Cat, Dog]) plt.xlabel(Predicted) plt.ylabel(Actual)6. 进阶技巧与性能优化当基础模型准确率达到80%以上后可以尝试这些提升技巧迁移学习实战使用预训练的ResNet18作为特征提取器from torchvision import models model models.resnet18(pretrainedTrue) for param in model.parameters(): # 冻结所有层 param.requires_grad False # 替换最后的全连接层 model.fc nn.Sequential( nn.Linear(model.fc.in_features, 256), nn.ReLU(), nn.Dropout(0.5), nn.Linear(256, 1), nn.Sigmoid() )混合精度训练可提速2-3倍from torch.cuda.amp import autocast, GradScaler scaler GradScaler() for epoch in range(10): for images, labels in train_loader: images, labels images.cuda(), labels.float().cuda() optimizer.zero_grad() with autocast(): outputs model(images).squeeze() loss criterion(outputs, labels) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()模型保存与部署# 保存完整模型 torch.save(model, /content/drive/MyDrive/cats_dogs_model.pth) # 只保存参数推荐方式 torch.save(model.state_dict(), /content/drive/MyDrive/model_weights.pth) # 加载模型 loaded_model SimpleCNN().cuda() loaded_model.load_state_dict(torch.load(/content/drive/MyDrive/model_weights.pth))在Colab中训练时如果遇到断连情况可以使用这个自动恢复技巧try: # 正常训练代码 except: print(训练中断正在保存进度...) torch.save({ epoch: epoch, model_state: model.state_dict(), optimizer_state: optimizer.state_dict(), loss: loss, }, /content/drive/MyDrive/checkpoint.pth) print(进度已保存请重新连接后加载检查点)