使用卷积神经网络识别狗类:吴程锴的第5次上机作业

需积分: 0 0 下载量 74 浏览量 更新于2024-08-05 收藏 195KB PDF 举报
"吴程锴18029100040同学的第五次上机作业,主要内容是使用卷积神经网络(CNN)进行狗的类别判别。" 在此次作业中,吴程锴同学运用了深度学习中的卷积神经网络模型来识别四种不同类型的狗:哈士奇、柯基犬、秋田犬和边境牧羊犬。以下是作业中涉及的关键知识点和代码解释: 1. **导入必要的库**: - `torch`:PyTorch的核心库,提供张量操作和自动梯度功能。 - `torch.nn`:PyTorch的神经网络模块,包含构建和训练神经网络所需的功能。 - `torch.utils.data`:用于数据加载和处理的数据集工具。 - `torchvision`:包含预训练模型、数据集转换等功能。 - `PIL` 和 `matplotlib.pyplot`:用于图像处理和可视化。 2. **设置超参数**: - `LR=0.001`:学习率,决定每次优化步长的大小。 - `EPOCH=10`:训练轮数,模型在数据集上迭代的次数。 - `train=0`:未在描述中使用,可能是个错误或者预留变量。 3. **设备选择**: - `device=torch.device("cuda" if torch.cuda.is_available() else "cpu")`:根据GPU是否可用,将模型放在GPU或CPU上运行。 4. **图像预处理**: - `size=256`:设定图像的大小。 - `data_transform`:定义一系列预处理操作,包括: - `transforms.Resize(size)`:将图像调整到指定大小。 - `transforms.CenterCrop((size, size))`:中心裁剪,确保图像的宽高比不变。 - `transforms.ToTensor()`:将图像转换为PyTorch的张量格式。 - `transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])`:对像素值进行归一化,通常用于预训练模型。 5. **加载数据**: - `ImageFolder`:一个简单的数据集类,可以处理包含子目录的结构化数据集。 - `train_dataset`:使用`ImageFolder`加载“DogData/”目录下的训练数据,并应用预处理。 - `train_loader`:创建一个数据加载器,批量加载数据,批量大小为10,随机打乱顺序,且使用两个工作线程。 6. **获取单个样本**: - `img, label=train_dataset.__getitem__(600)`:从数据集中获取第600个样本的图像和对应的标签。 7. **反向转换**: - `unloader=torchvision.transforms.ToPILImage()`:定义了一个转换器,用于将张量转换回PIL图像。虽然在代码中注释掉了,但在实际操作中可能会用到。 这个作业主要展示了如何使用PyTorch搭建一个基本的CNN模型来处理图像分类任务。虽然没有给出完整的模型定义和训练部分,但可以推测,接下来吴程锴同学可能将定义一个CNN模型,然后使用`train_loader`加载数据进行训练。整个过程涉及了深度学习模型的构建、数据预处理、模型训练等核心步骤。