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()