13. 神经网络基本骨架--nn.Module

nn.Module的基本使用
1. 什么是nn.Module
  • nn.Module模块式神经网络模型的基类,它提供了一些很简单方便的结构,来构建一个神经网络

  • 在pytorch的官方文档(https://pytorch.org/docs/stable/generated/torch.nn.Module.html#torch.nn.Module)中提供了一个基于 nn.Module 的简单样例,这也将是一个基本的前向传播结构

    import torch.nn as nn
    import torch.nn.functional as F
    
    class Model(nn.Module):
        def __init__(self):
            super().__init__()
            self.conv1 = nn.Conv2d(1, 20, 5)
            self.conv2 = nn.Conv2d(20, 20, 5)
    
        def forward(self, x):
            x = F.relu(self.conv1(x))
            return F.relu(self.conv2(x))
    
    • Model 继承了 nn.Module
    • init函数中,使用 nn.Conv2d() 创建了两个卷积结构,用于后续的数据处理
    • 对于输入数据 x 的前向传播进行了如下操作:
      • F.relu(self.conv1(x)): 进行卷积 conv1 操作后进行非线性变换
      • F.relu(self.conv2(x)): 再进行卷积 conv2 操作后进新非线性变换为返回值
2. 使用 nn.Module 创建前向传播结构
  • 首先需要导入 nn 模块

    from torch import nn
    
  • 创建类 Model , 继承 nn.Module 构建一个前向传播结构

    class Model(nn.Module):
        def __init__(self):
            super(Model, self).__init__()
            self.conv = nn.Conv2d(1, 20, 5)
            
        def forward(self, x):
            x1 = x + 1 # layer1
            x2 = x1 + 1 # layer2
            x3 = x2 + 1 # layer3
            return x3 # output
    
    • 首先在 init函数中需要 super表示继承父类,也可以在这里定义很多结构,如卷积层结构、池化层结构,全连接层结构等等
    • 重写forward函数:这个函数是前向传播结构的主体,上述代码中,模拟了输入数据 X 前向传播过程中,通过三层网络结构实例
  • 使用创建的 Model 类来处理数据

    import torch
    x = torch.tensor([1, 2, 3])
    model = Model()
    y = model(x) 
    # y = tensor([4, 5, 6])
    
    • 创建了一个输入数据 x 以及 Model 类的实例, model
    • model(X):会将x直接进行 forward()操作,并将最后的计算结果返回(forward()中的 return的内容)
3. nn模块中包含的用于创建神经网络的层和结构
  • 卷积层

    nn.Conv1d()
    nn.Conv2d()
    nn.Conv3d()
    
  • 最大池化层

    nn.MaxPool1d()
    nn.MaxPool2d()
    nn.MaxPool3d()
    
  • 循环层

    nn.RNN() # 基本循环神经网络
    nn.LSTM() # 长短期记忆网络
    nn.GRU() # 门控循环单元层
    
  • 规范化层

    nn.BatchNorm1d() # 一维批归一化层
    nn.BatchNorm2d()
    nn.BatchNorm3d()
    nn.LayerNorm() # 层归一化层
    
  • 激活函数

    nn.ReLU() # 修正线性单元
    nn.Sigmoid() # Sigmoid激活函数
    nn.Tanh() # 双曲正切激活
    nn.LeakyReLU() # 带泄露的ReLU
    nn.Softmax() #Softmax函数
    
  • 正则化层

    nn.Dropout() # Dropout层
    nn.Dropout1d()
    nn.Dropout2d()
    nn.Dropout3d()
    
  • 嵌入层

    nn.Embedding()
    
  • 自注意力

    nn.MultiheadAttention() # 多头注意力机制
    
  • 如果 nn 模块中没有符合要求的层结构,可以自定义层结构后应用在层模型中。比如我们想定义一个层结构,实现输入数据减一的操作(这只是一个简单例子,实际上不需要专门重新定义一个层结构)

    • 自定义层结构,实现: 输入数据减一

      class diy(nn.Module):
          def __init__(self):
              super().__init_()
              
          def forward(self, x):
              x = x -1 
              return x
      

      自定义层结构的类名为 diy: 前向传播中实现对输入数据减一的操作

    • 使用自定义的层结构

      class Model(nn.Module):
          def __init__(self):
              super().__init__()
              self.DIY = diy() # 创建自定义层结构的实例
          def forward(self, x):
              x = self.DIY(x)
              return x
      
    • 进行样例数据展示

      x = torch.tensor([1, 2, 3])
      y = Model()(x) # y = tensor([0, 1, 2])
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/877564.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WPS如何删除表格下的空白页

WPS Office(12.1.0.17827) ① 鼠标右键,选择段落 ② 行距:固定值;设置值:1磅;取消勾选,确定即可~

arcgisPro修改要素XY容差

1、在arcgisPro中XY容差的默认值为1个毫米,及0.001米。为了更精细的数据,需要提高这个精度,如何提高呢? 2、如果直接在数据库下新建要素类,容差只能调至0.0002米。所以,需要在数据库下新建要素数据集。 3…

使用 SuperCraft AI 设计书橱模型的指南

在现代家居设计中,书橱不仅是存放书籍的地方,更是展示个人品味和风格的重要家具。借助 SuperCraft AI,你可以轻松设计出独一无二的书橱。以下是详细的步骤指南,帮助你从零开始设计一个理想的书橱。 1. 创建项目 首先&#xff0c…

数据集 CULane 车道线检测 >> DataBall

数据集 CULane 车道线检测 自动驾驶 无人驾驶目标检测 CULane是用于行车道检测学术研究的大规模具有挑战性的数据集。它由安装在六辆由北京不同驾驶员驾驶的不同车辆上的摄像机收集。收集了超过55小时的视频,并提取了133,235帧。数据示例如上所示。我们将数据集分为…

数据结构——串的定义及存储结构

串的定义 串(string)——零个或多个任意字符组成的有限序列串是内容受限的线性表 串的几个术语 子串:串中任意几个连续字符组成的子序列称为该串的子串(真子串是指不包含自身的所有子串)主串:包含子串的串…

YoloV10改进策略:BackBone改进|注意力改进|HCANet全局与局部的注意力模块CAFM|二次创新|即插即用

摘要 在CAFM模型的基础上进行二次创新,我成功地开发了一个性能显著提升的改进版模型。这一创新不仅优化了特征提取和融合的方式,还极大地提高了模型的泛化能力和准确性。为了验证其有效性,我们将这一改进应用于流行的目标检测算法YoloV10,并取得了显著的精度提升。这一改进…

【专题】2024跨境出海供应链洞察-更先进供应链报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p37665 当前,全球化商业浪潮促使跨境电商行业飞速发展,产业带与跨境电商接轨、平台半托管模式涌现、社交电商带来红利机会以及海外仓不断扩张,这使得产业带外贸工厂、内贸工厂、传统进出口企业和品…

Java项目基于docker 部署配置

linux新建文件夹 data cd datatouch Dockerfilesudo vim Dockerfile# 使用一个基础的 Java 镜像(根据自己项目中使用的是什么jdk版本设置,用于拉取执行jar包的jdk环境) FROM openjdk:8# 指定工作目录 VOLUME /data# 复制应用程序的 JAR 文件…

信息安全数学基础(14)欧拉函数

前言 在信息安全数学基础中,欧拉函数(Eulers Totient Function)是一个非常重要的概念,它与模运算、剩余类、简化剩余系以及密码学中的许多应用紧密相关。欧拉函数用符号 φ(n) 表示,其中 n 是一个正整数。 一、定义 欧…

机器学习特征构建与特征筛选

前言 上一篇文章讲述了原始特征分析和处理,保障后续拿到的是干净的特征变量,但实际这些特征对于建模不一定是有效的,所以需要在原始特征的基础上,结合业务场景做特征变量的衍生,提升数据的表达能力。此外,…

【C++】unordered系列

前言: 在C11及以后的标准中,unordered容器是标准模板库(STL)的一部分,提供了高效的数据结构选项,适用于需要快速查找和插入操作的场景。 unordered通常与关联容器一起使用,特别是unordered_map和…

图论篇--代码随想录算法训练营第六十一天打卡| Floyd 算法,A*算法

Floyd 算法(求多源汇最短路) 题目链接:97. 小明逛公园 题目描述: 小明喜欢去公园散步,公园内布置了许多的景点,相互之间通过小路连接,小明希望在观看景点的同时,能够节省体力&…

句子成分——每日一划(八)

目录 一、原句 二、第一部分 三、第二部分 一、原句 In class society everyone lives as a member of a particular class, and every kind of thinking, without exception, is stamped with the brand of a class. 来源:二、阶级和阶级斗争 二、第一部分 In…

谷粒商城のElasticsearch

文章目录 前言一、前置知识1、Elasticsearch 的结构2、倒排索引 (Inverted Index)2.1、 索引阶段2.2、查询阶段 二、环境准备1、安装Es2、安装Kibana3、安装 ik 分词器 三、项目整合1、引入依赖2、整合业务2.1、创建索引、文档、构建查询语句2.2、整合业务代码 后记 前言 本篇介…

初识php库管理工具composer的体验【爽】使用phpword模板功能替换里面的字符串文本

需求: 做了一个租赁的项目,里面要求签署个人授权协议,里面要填写姓名,手机号,身份证号,签署日期等参数,格式如下图 格式: 如上图,word中的字符串模板变量使用${varname…

Java设计模式—面向对象设计原则(三) -----> 依赖倒转原则DIP(完整详解,附有代码+案例)

文章目录 3.3 依赖倒转原则(DIP)3.3.1概述3.3.2 案例 3.3 依赖倒转原则(DIP) 依赖倒转原则:Dependency Inversion Principle,DIP 3.3.1概述 高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细…

演示:基于WPF的自绘的中国地铁轨道控件

一、目的:演示一个基于WPF的自绘的中国地铁轨道控件 二、效果演示 北京地铁 成都地铁 上海地铁 深圳地铁 南京地铁 长春地铁 哈尔滨地铁 武汉地铁 厦门地铁 香港地铁 三、功能 支持平移、缩放等操作 鼠标悬停显示线路信息和站点信息 按表格显示,按纸张…

MySQL —— 索引

索引的概念 MySQL的索引是⼀种数据结构,它可以帮助数据库高效地查询、更新数据表中的数据。索引通过 ⼀定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜索来加快速度。 MySQL索引类似于书籍的目录,通过指向数据行的位置&…

PCIe进阶之TL:First/Last DW Byte Enables Rules Traffic Class Field

1 First/Last DW Byte Enables Rules & Attributes Field 1.1 First/Last DW Byte Enables Rules Byte Enable 包含在 Memory、I/O 和 Configuration Request 中。本文定义了相应的规则。Byte Enable 位于 header 的 byte 7 。对于 TH 字段值为 1 的 Memory Read Request…

Requests-HTML模块怎样安装和使用?

要安装和使用Requests-HTML模块,您可以按照以下步骤进行操作: 打开命令行界面(如Windows的命令提示符或Mac的终端)。 使用pip命令安装Requests-HTML模块。在命令行中输入以下命令并按回车键执行: pip install request…