1 需求
神经网络
……
深度学习
……
深度学习包含哪些神经网络:
- 全连接神经网络
- 卷积神经网络
- 循环神经网络
- 基于注意力机制的神经网络
2 接口
3 CNN
在这个示例中:
- 首先定义了一个简单的卷积神经网络
SimpleCNN
,它包含两个卷积层、两个池化层和两个全连接层。- 然后通过
torchvision
库加载了 MNIST 数据集,并进行了数据预处理。- 接着使用交叉熵损失函数和随机梯度下降优化器对模型进行了 10 个周期的训练。
- 最后在测试集上对模型进行了测试,计算了模型的准确率。这是一个基础的 PyTorch CNN 应用示例,你可以根据实际需求修改模型结构、数据和训练参数等。
第一步,定义卷积神经网络(CNN)模型
import torch
import torch.nn as nn
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
# 第一个卷积层,输入通道为1(灰度图像),输出通道为32,卷积核大小为3x3
self.conv1 = nn.Conv2d(1, 32, kernel_size=3)
# 第一个卷积层后的激活函数ReLU
self.relu1 = nn.ReLU()
# 第一个最大池化层,池化核大小为2x2
self.pool1 = nn.MaxPool2d(kernel_size=2)
# 第二个卷积层,输入通道为32,输出通道为64,卷积核大小为3x3
self.conv2 = nn.Conv2d(32, 64, kernel_size=3)
self.relu2 = nn.ReLU()
self.pool2 = nn.MaxPool2d(kernel_size=2)
# 全连接层,将卷积层输出的特征图展平后连接到该层,输入大小为64 * 6 * 6,输出大小为128
self.fc1 = nn.Linear(64 * 6 * 6, 128)
self.relu3 = nn.ReLU()
# 最后一个全连接层,用于分类,输出大小为10(假设是10分类问题)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = self.conv1(x)
x = self.relu1(x)
x = self.pool1(x)
x = self.conv2(x)
x = self.relu2(x)
x = self.pool2(x)
# 将特征图展平
x = x.view(-1, 64 * 6 * 6)
x = self.fc1(x)
x = self.relu3(x)
x = self.fc2(x)
return x
第二步,准备数据(以 MNIST 数据集为例)
import torchvision
import torchvision.transforms as transforms
# 定义数据转换,将图像转换为张量并进行归一化
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
])
# 下载并加载训练数据集
trainset = torchvision.datasets.MNIST(root='./data', train=True,
download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64,
shuffle=True, num_workers=2)
# 下载并加载测试数据集
testset = torchvision.datasets.MNIST(root='./data', train=False,
download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=64,
shuffle=False, num_workers=2)
第三步,训练模型
# 创建模型实例
model = SimpleCNN()
# 定义损失函数(交叉熵损失)和优化器(随机梯度下降)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# 训练循环
for epoch in range(10): # 进行10个训练周期
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
# 获取输入数据和标签
inputs, labels = data
# 梯度清零
optimizer.zero_grad()
# 前向传播
outputs = model(inputs)
# 计算损失
loss = criterion(outputs, labels)
# 反向传播
loss.backward()
# 更新参数
optimizer.step()
# 累计损失
running_loss += loss.item()
print(f'Epoch {epoch + 1}, Loss: {running_loss / len(trainloader)}')
第四步,测试模型
correct = 0
total = 0
with torch.no_grad():
for data in testloader:
images, labels = data
# 模型预测
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'Accuracy of the model on the test set: {100 * correct / total}%')
4 参考资料
神经网络——最易懂最清晰的一篇文章-CSDN博客
- 多层感知机(Multilayer Perceptron,MLP)
- 结构特点:是一种简单的前馈神经网络,由输入层、一个或多个隐藏层和输出层组成。神经元之间全连接,即每个神经元与相邻层的所有神经元都有连接。例如,在一个用于手写数字识别的简单 MLP 中,输入层接收图像像素值,经过隐藏层的非线性变换后,输出层输出各个数字类别对应的概率。
- 应用场景:广泛应用于分类和回归问题,如简单的图像分类、数据预测等。在自然语言处理领域可用于文本分类,在金融领域用于股票价格预测等。
- 卷积神经网络(Convolutional Neural Network,CNN)
- 结构特点:主要由卷积层、池化层和全连接层组成。卷积层通过卷积核提取数据的局部特征,池化层进行下采样以减少数据维度和计算量,全连接层用于分类或回归等任务。例如在人脸识别任务中,卷积层可以提取人脸五官轮廓等特征。
- 应用场景:在计算机视觉领域占据主导地位,用于图像分类(如识别图片中的物体是猫还是狗)、目标检测(检测图像中物体的位置和类别)、语义分割(将图像中的每个像素分类到不同语义类别)等。也在音频处理等领域有应用,如语音识别中的声学模型。
- 循环神经网络(Recurrent Neural Network,RNN)
- 结构特点:具有循环连接,能够处理序列数据。在每个时间步,神经元接收当前输入和上一个时间步的隐藏状态,经过处理后输出当前时间步的隐藏状态和预测结果。例如在机器翻译中,RNN 可以逐词处理输入句子和生成翻译后的句子。
- 应用场景:自然语言处理领域的文本生成、机器翻译、情感分析等任务,以及时间序列预测,如股票走势预测、气象数据预测等。不过,传统 RNN 存在梯度消失和梯度爆炸问题。
- 长短期记忆网络(Long - Short Term Memory,LSTM)和门控循环单元(Gated Recurrent Unit,GRU)
- 结构特点(以 LSTM 为例):是 RNN 的变体,通过特殊的门控机制(输入门、遗忘门和输出门)来控制信息的流动,能够有效解决 RNN 中的梯度消失和梯度爆炸问题,更好地处理长序列数据。例如在长篇小说生成任务中,LSTM 可以有效地利用前文信息生成后续内容。GRU 结构相对更简单,将遗忘门和输入门合并为一个更新门,在性能上和 LSTM 类似,并且计算效率更高。
- 应用场景:和 RNN 类似,主要用于自然语言处理中的长文本处理、语音识别中的语音序列处理、时间序列分析等需要处理长序列数据的任务。
- 生成对抗网络(Generative Adversarial Network,GAN)
- 结构特点:由生成器和判别器两个神经网络组成。生成器的任务是生成尽可能逼真的数据,判别器的任务是区分真实数据和生成器生成的数据。两者通过对抗训练的方式不断提高性能,最终生成器能够生成高质量的假数据。例如在图像生成任务中,生成器可以根据噪声生成看起来像真实照片的图像。
- 应用场景:图像生成(如生成高分辨率的风景照片)、数据增强(为训练数据集生成新的样本)、风格迁移(将一种图像风格转换为另一种风格)等。
- 自编码器(Auto - Encoder)
- 结构特点:由编码器和解码器组成。编码器将输入数据压缩成低维的表示(编码),解码器将这个编码还原为尽可能接近原始输入的数据。例如,在图像压缩任务中,编码器将高分辨率图像转换为低维向量,解码器再将这个向量还原为图像。
- 应用场景:数据降维、图像去噪、特征提取等。例如,在医学影像处理中,可以利用自编码器提取有价值的特征用于疾病诊断。
- Transformer 架构
- 结构特点:基于自注意力机制(Self - Attention),摒弃了传统的循环结构,能够并行计算,大大提高了训练和推理速度。在处理序列数据时,通过计算每个位置与其他位置的相关性来提取特征。例如在自然语言处理中的 BERT 模型,就是基于 Transformer 架构,能够有效捕捉句子中单词之间的语义关系。
- 应用场景:自然语言处理领域的预训练语言模型(如 GPT 系列、BERT 系列)、机器翻译等任务。在计算机视觉领域也有基于 Transformer 的模型用于图像分类等任务。