当前位置: 首页 > article >正文

AI-基本概念-多层感知器模型/CNN/RNN/自注意力模型

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博客

  1. 多层感知机(Multilayer Perceptron,MLP)
    • 结构特点:是一种简单的前馈神经网络,由输入层、一个或多个隐藏层和输出层组成。神经元之间全连接,即每个神经元与相邻层的所有神经元都有连接。例如,在一个用于手写数字识别的简单 MLP 中,输入层接收图像像素值,经过隐藏层的非线性变换后,输出层输出各个数字类别对应的概率。
    • 应用场景:广泛应用于分类和回归问题,如简单的图像分类、数据预测等。在自然语言处理领域可用于文本分类,在金融领域用于股票价格预测等。
  2. 卷积神经网络(Convolutional Neural Network,CNN)
    • 结构特点:主要由卷积层、池化层和全连接层组成。卷积层通过卷积核提取数据的局部特征,池化层进行下采样以减少数据维度和计算量,全连接层用于分类或回归等任务。例如在人脸识别任务中,卷积层可以提取人脸五官轮廓等特征。
    • 应用场景:在计算机视觉领域占据主导地位,用于图像分类(如识别图片中的物体是猫还是狗)、目标检测(检测图像中物体的位置和类别)、语义分割(将图像中的每个像素分类到不同语义类别)等。也在音频处理等领域有应用,如语音识别中的声学模型。
  3. 循环神经网络(Recurrent Neural Network,RNN)
    • 结构特点:具有循环连接,能够处理序列数据。在每个时间步,神经元接收当前输入和上一个时间步的隐藏状态,经过处理后输出当前时间步的隐藏状态和预测结果。例如在机器翻译中,RNN 可以逐词处理输入句子和生成翻译后的句子。
    • 应用场景:自然语言处理领域的文本生成、机器翻译、情感分析等任务,以及时间序列预测,如股票走势预测、气象数据预测等。不过,传统 RNN 存在梯度消失和梯度爆炸问题。
  4. 长短期记忆网络(Long - Short Term Memory,LSTM)和门控循环单元(Gated Recurrent Unit,GRU)
    • 结构特点(以 LSTM 为例):是 RNN 的变体,通过特殊的门控机制(输入门、遗忘门和输出门)来控制信息的流动,能够有效解决 RNN 中的梯度消失和梯度爆炸问题,更好地处理长序列数据。例如在长篇小说生成任务中,LSTM 可以有效地利用前文信息生成后续内容。GRU 结构相对更简单,将遗忘门和输入门合并为一个更新门,在性能上和 LSTM 类似,并且计算效率更高。
    • 应用场景:和 RNN 类似,主要用于自然语言处理中的长文本处理、语音识别中的语音序列处理、时间序列分析等需要处理长序列数据的任务。
  5. 生成对抗网络(Generative Adversarial Network,GAN)
    • 结构特点:由生成器和判别器两个神经网络组成。生成器的任务是生成尽可能逼真的数据,判别器的任务是区分真实数据和生成器生成的数据。两者通过对抗训练的方式不断提高性能,最终生成器能够生成高质量的假数据。例如在图像生成任务中,生成器可以根据噪声生成看起来像真实照片的图像。
    • 应用场景:图像生成(如生成高分辨率的风景照片)、数据增强(为训练数据集生成新的样本)、风格迁移(将一种图像风格转换为另一种风格)等。
  6. 自编码器(Auto - Encoder)
    • 结构特点:由编码器和解码器组成。编码器将输入数据压缩成低维的表示(编码),解码器将这个编码还原为尽可能接近原始输入的数据。例如,在图像压缩任务中,编码器将高分辨率图像转换为低维向量,解码器再将这个向量还原为图像。
    • 应用场景:数据降维、图像去噪、特征提取等。例如,在医学影像处理中,可以利用自编码器提取有价值的特征用于疾病诊断。
  7. Transformer 架构
    • 结构特点:基于自注意力机制(Self - Attention),摒弃了传统的循环结构,能够并行计算,大大提高了训练和推理速度。在处理序列数据时,通过计算每个位置与其他位置的相关性来提取特征。例如在自然语言处理中的 BERT 模型,就是基于 Transformer 架构,能够有效捕捉句子中单词之间的语义关系。
    • 应用场景:自然语言处理领域的预训练语言模型(如 GPT 系列、BERT 系列)、机器翻译等任务。在计算机视觉领域也有基于 Transformer 的模型用于图像分类等任务。

http://www.kler.cn/a/376086.html

相关文章:

  • API网关 - JWT认证 ; 原理概述与具体实践样例
  • SpringBoot接入星火认知大模型
  • vue 果蔬识别系统百度AI识别vue+springboot java开发、elementui+ echarts+ vant开发
  • 基于NVIDIA NIM平台实现盲人过马路的demo(一)
  • 第八届御网杯线下赛Pwn方向题解
  • Java 字符流详解
  • 操作符习题练习
  • C语言 | Leetcode C语言题解之第519题随机翻转矩阵
  • 金华迪加 现场大屏互动系统 mobile.do.php 任意文件上传漏洞复现
  • R 数据框
  • RabbitMQ 存储机制
  • 像`npm i`作为`npm install`的简写一样,使用`pdm i`作为`pdm install`的简写
  • ARM base instruction -- madd
  • 函数的多返回值及多种传参方式
  • Python 的基本语法
  • 【C#】异步和多线程
  • 速度!双击文件就可以运行本地大模型!神奇的AI大模型开源项目——llamafile
  • Redis中储存含LocalDateTime属性对象的序列化实现
  • R数据结构向量基础
  • 公有云开发基础教程
  • 汽车固态电池深度报告
  • 4K双模显示器值得买吗?
  • Python WordCloud库与jieba分词生成词云图的完整指南
  • Ollama:本地部署与运行大型语言模型的高效工具
  • 在kanzi 3.9.8里使用API创建自定义材质
  • PHP反序列化原生类字符串逃逸框架反序列化利用