【动手学深度学习】层和块

层和块

简单介绍

  • 块:描述单个层,由多个层组成的组件或整个模型本身。使用块进行抽象的一个好处是可以将一些块组合成更大的组件,这一过程通常是递归的

在这里插入图片描述

简单入门


import torch
from torch import nn
from torch.nn import functional as F# 直接定义两层  两个线性层
net = nn.Sequential(nn.Linear(20,256),nn.ReLU(),nn.Linear(256,10))X = torch.rand(2,20)
net(X)
  • 实例化nn.Sequential来构建我们的模型,层的执行顺序是作为参数进行传递的
  • nn.Sequential定义一种特殊的Module,维护了一个Module组成的有序列表,两个全连接层都是Linear类的实例。
  • 前向传播函数很简单:将列表中的每一个块连接在一起,将每一个块的输出作为下一个快的输入

自定义块

  • 将输入数据作为其前向传播函数的参数。

  • 通过前向传播函数来生成输出。请注意,输出的形状可能与输入的形状不同。例如,我们上面模型中的第一个全连接的层接收一个20维的输入,但是返回一个维度为256的输出。

  • 计算其输出关于输入的梯度,可通过其反向传播函数进行访问。通常这是自动发生的。
    存储和访问前向传播计算所需的参数。

  • 根据需要初始化模型参数。

class MLP(nn.Module):# 用模型参数声明层。这里,我们声明两个全连接的层def __init__(self):# 调用MLP的父类Module的构造函数来执行必要的初始化。# 这样,在类实例化时也可以指定其他函数参数,例如模型参数params(稍后将介绍)super().__init__()self.hidden = nn.Linear(20, 256)  # 隐藏层self.out = nn.Linear(256, 10)  # 输出层# 定义模型的前向传播,即如何根据输入X返回所需的模型输出def forward(self, X):# 注意,这里我们使用ReLU的函数版本,其在nn.functional模块中定义。return self.out(F.relu(self.hidden(X)))
  • init函数通过super操作调用父类初始化,然后实例化两个全连接层

  • 块的一个主要优点是它的多功能性。 我们可以子类化块以创建层(如全连接层的类)、 整个模型(如上面的MLP类)或具有中等复杂度的各种组件。 我们在接下来的章节中充分利用了这种多功能性, 比如在处理卷积神经网络时。

顺序块

  • Sequential的设计是将其他模块串接起来
  • 自定义MySequential:一种将块逐个追加到列表的函数,一种前向传播函数,用于将输入按追加块的顺序传递给块组成的链条
class MySequential(nn.Module):def __init__(self,*args):super().__init__()for idx,module in enumerate(args):self._modules[str(idx)] = moduledef forward(self,X):for block in self._modules.values():X = block(X)return X
  • init函数将每一个模块逐个添加到有序字典_modules中,使用_modules的好处是:在模块的参数初始化过程中,系统知道在_modules字典中查找需要初始化参数的子块

  • 当MySequential的前向传播函数被调用的时候,每一个添加的块都按照它们被添加的顺序执行

net = MySequential(nn.Linear(20,256),nn.ReLU(),nn.Linear(256,10))
net(X)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GitHub】腾讯这一款设计神器,开源了!PAG 动效组件

作为一个资深的互联网用户,我们经常会在各种产品上看到十分酷炫的动画效果。比如,短视频中有趣的虚拟场景、直播间粉丝打榜的 “火箭”、“轮船” 等等。 如今,优质的动效不仅可以使用户更容易地理解产品功能和操作方式,减少用户…

一套完全开源,支持多租户,界面配置单点的后端框架JVS

JVS的多租户体系统 在IT系统中,“租户”(tenant)通常用于指代一种多租户架构(multi-tenancy),它是一种软件架构模式,允许多个用户或组织共享相同的应用程序或系统实例,但彼此之间的…

lwip-2.1.3自带的httpd网页服务器使用教程(一)从SD卡读取网页文件并显示

概述 本教程使用的单片机是STM32F103ZE,有线网口芯片为ENC28J60。 本教程里面的网页由于需要兼容Windows XP系统的IE8浏览器,所以采用HTML 4.01编写,不使用任何前端框架。笔者使用的网页设计软件是Adobe Dreamweaver CS3。 开发板PCB文件是公…

运维小知识(一)——centos系统安装(小白入门级)

目录 1.制作系统U盘 2.安装centos系统 3.系统配置 3.1【语言】配置​编辑 3.2【软件选择】配置 3.3【安装位置】配置 3.4【主机名、root密码、网络】配置 1.制作系统U盘 首先下载软件ventoy,制作系统U盘,买个新U盘。先在笔记本电脑安装ventoy软件&a…

产品经理学习画原型(三)

1.布尔运算的使用 合并必须选择两个及以上元件 合并后: 组合: 去除顶层:

常用API学习01(Java)

Math Math是一个帮助我们用于进行数学计算的工具类。私有化的构造方法,所有方法都是静态的。 Math类的常用方法: public static int abs(int a) 获取参数绝对值 public static double cell(double a) 向上取整 public static double floor(…

全链路Python环境迁移

全链路Python环境迁移 在当前的Python环境中,安装一些库以后,如果换了一套Python环境,难道再来一次不停的pip install?当然不是。 第一步,使用pip freeze(冻结)备份当前Python库的环境 pip f…

linux 服务器之间传输文件的方式

情景:有时迁移项目,一般人就想到需要在服务器下载到win本地电脑上面,再上传到目的服务器,这样若是文件大,下载的速度都足够让你歇一天了。遇到这问题,怎么解决呢? 方法1:scp 【优点…

《向量数据库指南》——传统数据库上的向量搜索插件

传统数据库上的向量搜索插件 很好,现在我们已经知道了向量搜索库和向量数据库之间的区别,下面让我们来看看向量数据库与向量搜索插件有何不同。 很多传统关系型数据库和搜索系统,如 ClickHouse 和 Elasticsearch,都包含内置的向量搜索插件。例如,Elasticsearch 8.0 包…

智慧班牌源码,融合人脸识别、即时通讯等技术,与智慧校园中各类系统互联互通

电子班牌系统又称之为智慧班牌,是当前校园数字化信息化建设、文化建设的主流,是校园日常工作安排、校园信息发布、班级文化风采展示、课堂交流的重要应用载体。智慧班牌系统在传统信息发布和校园文化展示功能基础上,融合了人脸识别、即时通讯…

前端Vue自定义加载loading组件 通过设置gif实现loading动画 可用于页面请求前loading

随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。 通过组件化开发,可以有效实现…

NAS私有云存储 - 搭建Nextcloud私有云盘并公网远程访问

文章目录 摘要视频教程1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 摘要 Nextcloud,它是ownCloud的一个分支,是一个文…