【NLP】Pytorch构建神经网络

举报
小馒头学Python 发表于 2023/11/02 19:44:21 2023/11/02
【摘要】 🍀关于torch.nntorch.nn是PyTorch(一个流行的开源深度学习库)中的一个模块,用于构建神经网络模型。它提供了各种用于构建深度神经网络的类和函数,使得开发者可以轻松地定义、训练和部署各种类型的神经网络模型。torch.nn模块中最重要的类是Module,它是所有神经网络模型的基类。开发者可以通过继承Module类来构建自定义的神经网络模型。Module类提供了许多有用的方法...

🍀关于torch.nn

torch.nn是PyTorch(一个流行的开源深度学习库)中的一个模块,用于构建神经网络模型。它提供了各种用于构建深度神经网络的类和函数,使得开发者可以轻松地定义、训练和部署各种类型的神经网络模型。

torch.nn模块中最重要的类是Module,它是所有神经网络模型的基类。开发者可以通过继承Module类来构建自定义的神经网络模型。Module类提供了许多有用的方法,例如forward方法用于定义模型的前向传播,parameters方法用于获取模型的参数等。

torch.nn模块还提供了许多常用的层和函数,例如线性层(Linear)、卷积层(Conv2d)、循环神经网络层(RNN)、长短期记忆网络层(LSTM)、激活函数(ReLUSigmoid等)等。这些层和函数可以被灵活地组合以构建各种类型的神经网络模型。

除了层和函数之外,torch.nn模块还提供了各种工具和类,用于处理输入数据、定义损失函数、计算优化算法等。例如,DataLoader类用于加载和批处理数据,Loss类用于定义损失函数,Optimizer类用于选择和配置优化算法等。

总之,torch.nn模块为开发者提供了一个高级的、灵活的接口,用于构建和训练神经网络模型。它的设计目标是简化神经网络模型的开发过程,并提供良好的性能和易用性。


🍀构建神经网络的基本流程

构建神经网络的一般流程如下:

  1. 数据准备:首先,你需要准备好用于训练神经网络的数据集。这包括分割数据集为训练集、验证集和测试集,并对数据进行预处理,例如标准化、归一化或数据增强等操作。

  2. 定义模型的结构:使用torch.nn模块,你可以定义一个继承自torch.nn.Module的自定义类来构建神经网络模型。在这个类中,你需要定义模型的各个层(如卷积层、全连接层等)以及它们之间的连接关系。你还可以定义一个forward方法来定义模型的前向传播过程。

  3. 初始化模型参数:在定义模型结构后,你需要初始化模型的参数。PyTorch提供了一些方便的方法来初始化参数,例如使用torch.nn.init模块中的函数进行参数初始化。

  4. 定义损失函数:选择适当的损失函数来衡量模型的预测结果与实际标签之间的差异。常见的损失函数包括均方误差(MSE)、交叉熵损失函数等。你可以使用torch.nn模块中提供的损失函数,或者根据需要自定义损失函数。

  5. 定义优化器:选择合适的优化算法来更新模型的参数以最小化损失函数。常见的优化算法包括随机梯度下降(SGD)、Adam、Adagrad等。你可以使用torch.optim模块中提供的优化器,也可以根据需要自定义优化器。

  6. 训练模型:使用训练集对模型进行训练。在每个训练迭代中,你需要按照以下步骤执行:
    a. 将输入数据传递给模型,并计算模型的输出。
    b. 将模型输出与实际标签进行比较,计算损失函数的值。
    c. 根据损失函数的值,使用反向传播算法计算梯度。
    d. 使用优化器更新模型的参数。

  7. 模型评估:使用验证集对训练过程中的模型进行评估。计算模型在验证集上的预测准确率、损失值或其他指标,以评估模型在未见过的数据上的性能。

  8. 模型调优和调试:根据验证集的结果,对模型进行调优和调试。你可以根据需要调整模型的结构、超参数或训练策略,以获得更好的性能。

  9. 模型应用:在模型训练和调试完成后,你可以使用模型对新的未知数据进行预测或推断。

这是一个基本的神经网络构建流程,具体的实现细节和步骤可能因任务而异。在实践中,你可能还需要进行超参数调优、使用正则化方法来防止过拟合,以及使用其他技术来改进模型的性能。


🍀构建第一个神经网络

import torch
import torch.nn as nn
import torch.nn.functional as F

# 定义网络类
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # 定义第一层卷积层,输入维度等于1,输出维度等于6,卷积核大小3*3
        self.conv1 = nn.Conv2d(1, 6, 3)
        # 定义第二层卷积层,输入维度6,输出维度16,卷积核大小3*3
        self.conv2 = nn.Conv2d(6, 16, 3)
        # 定义三层全连接神经网络
        self.fc1 = nn.Linear(16 * 6 * 6, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        # 注意任意卷积层后面要加激活层
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        x = F.max_pool1d(F.relu(self.conv2(x)), 2)
        # 经过卷积层的处理,张量要进入全连接层,进入前需要调整张量的形状
        x = x.view(-1, self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self, x):
        size = x.size()[1:]
        num_features = 1
        for i in size:
            num_features *= i
        return num_features

net = Net()
print(net)

运行结果如下
在这里插入图片描述


🍀总结

本篇文章是在b站学习后完成的,若有人想了解视频可以点击Python人工智能20个小时玩转NLP自然语言处理【黑马程序员】

挑战与创造都是很痛苦的,但是很充实。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。