神经网络基础之模型构造

层和块

个人理解:模型的块就是一个类,我们可以在里面添加很多函数层之类的,写任何的东西,我们实例化一下就生成了模型

为了实现这些复杂的网络,我们引入了神经网络 块_的概念。 _块(block)可以描述单个层、由多个层组成的组件或整个模型本身。 使用块进行抽象的一个好处是可以将一些块组合成更大的组件,

继承Module类来构造模型

Module的子类

Module类是一个通用的部件,我们可以继承Module 类来创建其他类比如:Sequential、ModuleList、ModuleDict

1、可以通过继承Module类来构造模型。
2、Sequential、ModuleList、ModuleDict类都继承自Module类。
3、与Sequential不同,ModuleList和ModuleDict并没有定义一个完整的网络,它们只是将不同的模块存放在一起,需要自己定义forward函数。
4、虽然Sequential等类可以使模型构造更加简单,但直接继承Module类可以极大地拓展模型构造的灵活性。

代码:

import torch
from torch import nn#导入nn这个模型
from torch.nn import functional as F #从nn中导入functional这个模型 记作F,这个模块有一些函数

net = nn.Sequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))#由线性层,relu层,线性层构造一个net模型

X = torch.rand(2, 20)#生成一个随机的输入
net(X)#输出

自定义的块

class MLP(nn.Module):#MLP是nnmodule的子类
    # 用模型参数声明层。这里,我们声明两个全连接的层
    def __init__(self):
        # 调用MLP的父类Module的构造函数来执行必要的初始化。
        # 这样,在类实例化时也可以指定其他函数参数,例如模型参数params(稍后将介绍)
        super().__init__()
        self.hidden = nn.Linear(20, 256)  # 隐藏层#调用nnmodular模块中的层
        self.out = nn.Linear(256, 10)  # 输出层

    # 定义模型的前向传播,即如何根据输入X返回所需的模型输出
    def forward(self, X):
        # 注意,这里我们使用ReLU的函数版本,其在nn.functional模块中定义。
        return self.out(F.relu(self.hidden(X)))

#试一下这个函数
net = MLP()          #实例化模型,把我们自定义构造的module起个名字叫做net
net(X)               #把x输入到netmodule中去

顺序块

class MySequential(nn.Module):#定义一个nn模型的子类
    def __init__(self, *args):
        super().__init__()#初始化
        for idx, module in enumerate(args):
            # 这里,module是Module子类的一个实例。我们把它保存在'Module'类的成员
            # 变量_modules中。module的类型是OrderedDict
            self._modules[str(idx)] = module

    def forward(self, X):
        # OrderedDict保证了按照成员添加的顺序遍历它们
        for block in self._modules.values():
            X = block(X)
        return X
#测试一下函数
net = MySequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10))#实例化我们sequential类的实例
net(X)

前向传播函数中执行代码

class FixedHiddenMLP(nn.Module):
    def __init__(self):
        super().__init__()
        # 不计算梯度的随机权重参数。因此其在训练期间保持不变
        self.rand_weight = torch.rand((20, 20), requires_grad=False)
        self.linear = nn.Linear(20, 20)

    def forward(self, X):
        X = self.linear(X)
        # 使用创建的常量参数以及relu和mm函数
        X = F.relu(torch.mm(X, self.rand_weight) + 1)
        # 复用全连接层。这相当于两个全连接层共享参数
        X = self.linear(X)
        # 控制流
        while X.abs().sum() > 1:
            X /= 2
        return X.sum()
#测试函数
net = FixedHiddenMLP()
net(X)

混合搭配各种组合块的方法

class NestMLP(nn.Module):
    def __init__(self):
        super().__init__()
        self.net = nn.Sequential(nn.Linear(20, 64), nn.ReLU(),
                                 nn.Linear(64, 32), nn.ReLU())
        self.linear = nn.Linear(32, 16)

    def forward(self, X):
        return self.linear(self.net(X))

chimera = nn.Sequential(NestMLP(), nn.Linear(16, 20), FixedHiddenMLP())
chimera(X)

Original: https://blog.csdn.net/qq_43448818/article/details/124190420
Author: (ノへ ̄、)。
Title: 神经网络基础之模型构造

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/692057/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 目标检测算法——YOLOV7——详解

    1、主要贡献 主要是现有的一些trick的集合以及模块重参化和动态标签分配策略,最终在 5 FPS 到 160 FPS 范围内的速度和准确度都超过了所有已知的目标检测器。 当前目标…

    人工智能 2023年5月26日
    061
  • win10安装cuda,cudnn,tensorflow,tensorflow-gpu

    通过n多天的努力我将cuda,cudnn等一些列配通,实属不易。ok,咱们直击主题,如何配置:1. 查询自己的配置资源 首先打开英伟达控制面板点击系统信息进入查看详细的服务器:通过…

    人工智能 2023年5月26日
    086
  • 数据分析 | Pandas 200道练习题,每日10道题,学完必成大神(4)

    文章目录 * – 前期准备 – 1. 计算salary列的中位数 – 2. 绘制薪资水平频率直方图 – 3. 绘制薪资水平密度曲线 …

    人工智能 2023年7月29日
    052
  • 宠物狗行走手机应用市场现状研究分析-

    辰宇信息咨询市场调研公司最近发布-《2022-2028中国宠物狗行走手机应用市场现状研究分析与发展前景预测报告 》 内容摘要 本文研究中国市场宠物狗行走手机应用现状及未来发展趋势,…

    人工智能 2023年7月18日
    059
  • Opencv中的cv2.calcHist()函数的作用及返回值

    在讨论其返回值前,我们先来介绍以下calcHist()函数的用法: cv2.calcHist()函数 cv2.calcHist()函数的作用:通过直方图可以很好的对整幅图像的灰度分…

    人工智能 2023年6月18日
    067
  • 数据预处理和特征选择

    背景介绍 结合网上一些相关资料,我们整理输出了这篇文章,本文说明了数据的重要性以及数据在各个环节和领域地位。更重要的是,这篇文章会详尽的讲解数据预处理和特征选择的原理及方法细节。 …

    人工智能 2023年7月15日
    083
  • 人脸识别神经网络是什么,人脸识别神经网络模型

    人脸识别身份系统的工作原理是什么? 人脸识别是一种软件层面的算法,用于通过处理视频帧或数字图像来验证或识别一个人的身份,其中该人的脸是可见的。 面部识别技术有几种不同的工作方法,但…

    人工智能 2023年7月13日
    071
  • 知识图谱构建全流程

    一、知识图谱简介 知识图谱,是结构化的语义知识库,用于迅速描述物理世界中的概念及其相互关系,通过知识图谱能够将Web上的信息、数据以及链接关系聚集为知识,使信息资源更易于计算、理解…

    人工智能 2023年7月28日
    068
  • python实现LBP纹理提取

    什么是LBP纹理特征? LBP(Local Binary Patterns,局部二值模式)是提取局部特征作为判别依据的,一种有效的纹理描述算子,度量和提取图像局部的纹理信息。它具有…

    人工智能 2023年6月18日
    052
  • 全变分图像去噪算法(TV)

    全变分图像去噪算法(Total varivation) 今天一起学习一下全变分图像去噪算法,与之前的高斯、均值滤波等各向同性模型不同,全变分模型是一个依靠梯度下降法对图像进行平滑的…

    人工智能 2023年6月17日
    0101
  • 导数极值点拐点专题解题技巧

    抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。 Original: https:…

    人工智能 2023年6月27日
    072
  • 语音对讲源码_QQ自动发送语音脚本源码分享

    大家好,我是公号3分钟学堂的郭立员!今天这篇文章是:QQ发送语音脚本源码分享 按键精灵本身提供了playsound命令来播放音频文件,但是这个命令有很明显的局限性,作为外放音乐的工…

    人工智能 2023年5月27日
    0114
  • 【计算机视觉】简述对KPConv的理解

    之前有篇博客介绍了自己对PointConv的理解,那篇文章虽然在某种程度上实现了高效卷积,并且利用了一种注意力的方法(密度加权),但是其分割的效果并不是特别的理想,miou并不是特…

    人工智能 2023年5月26日
    054
  • SVM实现鸢尾花分类

    目录 一、数据准备 二、模型搭建 三、模型训练 四、模型评估 五、数据可视化 六、完整代码 这次我们尝试用支持向量机(SVM)来完成对鸢尾花的分类任务。对于啥时SVM,我们可以看看…

    人工智能 2023年6月15日
    089
  • 传统的时间序列预测模型ARMA、ARIMA(包括实战!!!)

    部分图片、数据、代码来源:https://book.tipdm.org/jc/220,侵权必删!!! 一、本篇主要介绍四种经典的时间序列模型 移动平均模型(MA)、自回归模型(AR…

    人工智能 2023年7月25日
    052
  • 三四百左右的蓝牙耳机有什么推荐?三四百左右的蓝牙耳机排行榜

    在蓝牙耳机的功能越来越强大之后,很多蓝牙耳机的续航能力都相当不错。现在,各大耳机厂商今年都亮出了看家本领,降低通话噪音几乎成了标配。因为用户重视降噪功能,所以只有降噪厂商相关的参数…

    人工智能 2023年5月25日
    069
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球