课堂总结
VGG是一种经典的卷积神经网络架构,常用于图像分类任务。
配置字典 `cfg`:
- `cfg` 是一个字典,包含了两种VGG架构的配置:
- `VGG16`: 包含16层(包括卷积层和池化层)。
- `VGG19`: 包含19层(包括卷积层和池化层)。
- 每个配置是一个列表,列表中的数字表示卷积层的输出通道数,`'M'`表示最大池化层。
### 2. **VGG类**:
- `VGG`类继承自`nn.Module`,用于构建VGG网络。
__init__方法:
- 接受一个参数`Vgg_name`,用于指定使用哪种VGG配置。
- 调用`self._make_layers(cfg[vgg_name])`来构建卷积层和池化层。
forward方法:
- 定义了数据的前向传播过程。
- 通过`self.features`提取特征。
- 使用`view`方法将特征图展平为一维向量。
- 通过全连接层`self.classifier`进行分类。 _make_layers方法:
该方法根据配置列表`cfg`构建卷积层和池化层。
这段代码是使用PyTorch框架进行图像分类任务
**设备设置**:
- `device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')`:检查是否有可用的GPU,如果有则使用GPU,否则使用CPU。
**数据准备**:
- **数据增强和预处理**:
- `transform_train`:用于训练数据的转换,包括随机裁剪(`RandomCrop`)、随机水平翻转(`RandomHorizontalFlip`)、转换为张量(`ToTensor`)和归一化(`Normalize`)。
- `transform_test`:用于测试数据的转换,包括转换为张量和归一化。
- **数据集加载**:
- `trainset`:加载CIFAR-10训练数据集,应用`transform_train`转换。
- `trainloader`:创建训练数据加载器,批次大小为128,打乱数据,使用2个工作线程。
- `testset`:加载CIFAR-10测试数据集,应用`transform_test`转换。
- `testloader`:创建测试数据加载器,批次大小为100,不打乱数据,使用2个工作线程。
- **类别标签**:
- `classes`:CIFAR-10数据集的类别标签。注意`'deen'`应为`'deer'`。
**模型构建**:
- `net1 = CNNNet()`:创建一个`CNNNet`模型的实例。
- `net2 = Net()`:创建一个`Net`模型的实例。
- `net3 = LeNet()`:创建一个`LeNet`模型的实例。
- `net4 = VGG('VGG16')`:创建一个VGG16模型的实例。
用于加载CIFAR-10数据集,并构建多个不同的卷积神经网络模型。