1、CNN 主要组成部分
卷积神经网络(CNN,Convolutional Neural Networks) 是深度学习中处理图像的核心结构。它通过卷积操作提取图像的空间特征,在图像分类、目标检测、图像分割等任务中广泛使用。
组件 | 说明 |
---|---|
nn.Conv2d | 卷积层,用于提取局部特征 |
nn.ReLU | 激活函数,增加非线性表达能力 |
nn.MaxPool2d | 池化层,降低维度、减少计算 |
nn.Flatten | 将多维特征展开为向量 |
nn.Linear | 全连接层,用于分类任务 |
nn.Softmax | 输出分类概率 |
2、用于图像分类
import torch import torch.nn as nn import torch.nn.functional as F class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() self.conv1 = nn.Conv2d(in_channels=1, out_channels=16, kernel_size=3, padding=1) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(16, 32, 3, padding=1) self.fc1 = nn.Linear(32 * 7 * 7, 128) self.fc2 = nn.Linear(128, 10) # 10 classes for example def forward(self, x): x = self.pool(F.relu(self.conv1(x))) # -> [batch, 16, 14, 14] x = self.pool(F.relu(self.conv2(x))) # -> [batch, 32, 7, 7] x = x.view(-1, 32 * 7 * 7) # Flatten x = F.relu(self.fc1(x)) x = self.fc2(x) return x
3、训练流程
model = SimpleCNN() criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) for epoch in range(10): for images, labels in dataloader: outputs = model(images) loss = criterion(outputs, labels) optimizer.zero_grad() loss.backward() optimizer.step()