深度学习基础之数据操作

深度学习中最常用的数据是张量,对张量进行操作是进行深度学习的基础。以下是对张量进行的一些操作:

首先我们需要先导入相关的张量库torch。

元素构造(初始化)

  • 使用arange创造一个行向量,也就是0轴(0维)。


    默认是按顺序创建,从0开始,元素类型默认是整数,当然也可以指定为浮点数。比如:
  • 可以使用张量shape属性来访问张量(沿每个轴的长度)的形状(shape)。

    当然指的是形状,也可能不只是一个维度。
  • 我们想知道张量中元素的总个数,也就是shape中所有元素的乘积,可以检查它的大小size。
  • 要想改变一个张量的形状,但是不改变张量的大小,可以使用reshape函数,这个函数是将张量进行维度转化。直接见例子:
    值得注意的是,这里的转化要求大小不变,比如我们的张量中一共有9个元素,那么我们只能转化为1*9,或者9*1,不能使之转化为2*4.5等。当然我们当然不是必须要计算出来每个维度的信息,如果我们需要转化为两个维度,而第一个维度已知是1,那么第二个维度可以直接用-1表示,另一个维度会自动被计算出来,我们可以省略一个维度。(最多省略一个维度)。维度的转化可以进行多维。
  • 有时候我们需要全0或者全1的张量,torch库中提供的有相应的函数。
  • 有时候我们需要通过某个概率分布中随机采样来获得元素的值,当我们构造数组来作为神经网络中的参数的时候,我们通常随机初始化参数的值。以下是一个使用正态分布来初始化数组的代码,这里我们使用的是均值为0,标准差为1的正态分布。

    随机化的结果会因为每次运行的不同而有所不同。

当然,最简单的构造方法就是直接构造张量。这里我们使用tensor来直接构造。

运算符

  • 运算中最常见的操作是加减乘除。
    在上述结果中,除法运算默认保留四位小数。
    幂运算我们在大学线性代数中没有接触,其实就是相应位置的幂运算。
  • 我们也可以把多个张量剪切到一起。连接(concatenate)对应的函数是cat。
    这里dim是维度的意思,0维即是行,1维即是列,同理递推。

    显然,维度不能超出范围。
  • 还能判断对应位置元素是否相等,直接使用==判断,结果可不是返回一个数值0或1,而是返回一个张量,该张量是对应每个位置比较的结果。
    相同的问题,对于判断两个张量是否相等的运算,首先要确保这两个张量的shape(形状)要统一。

将张量中所有元素求和,会得到一个新的元素(单张量),也可以认为是维度是1。

广播机制

广播机制就是通过适当复制元素来扩展一个或者两个数组,以便在转化之后两个数组具有相同的形状。但是大多数情况下,我们只会沿着维度为1 的轴进行广播。
在下图中,a的形状是2*2,没有维度是1的轴,无法进行广播,由于无法转化维度,导致不能与b相加。

接下来我们尝试用三阶张量替换广播机制中按元素操作的两个张量,看看是否符合预期。

答案是肯定的,但是我们首先要确保,每个维度上都必须有至少一个1。(用于进行广播)。

索引和切片

  • 用于读取元素:
    如图,-1表示最后一个元素,张量经过reshape处理后有三个元素,reshape可以这样理解(第一个参数表示元素个数,后面的所有参数组成一个元素)。
    第二个输出输出的是[1:3)的元素,左边参数是闭区间,右边参数是开区间。即选取 1和2。分别是第二个元素和第三个元素,元素的索引是从0开始的。

更改元素:

在这里,我们使第二行第三列的元素更改为0,最后一行最后一列的元素也更改为0。
当然,当我们进行有规律的大规模连续更改的时候,我们使用切片。

“:”表示默认,第一个参数表示是默认所有行,第二个参数表示是默认所有列。
这样,我们就指定2,3行,所有列进行更改。

节省内存

首先思考一个问题:x=x+y和x+=y是否相同:
在结果上时相同的,但是在内存分配上却不相同,第一个式子是为x重新分配一个内存来存储x张量,第二个式子是在原有x张量内存的基础上进行更改。我们可以用id函数来可视化:注意这里不能使用torch.ones(3,4)来创建。只能使用ones_like来创建,或者是zero_like来创建。

为什么说重新分配内存是不可取的:
首先,在机器学习中,我们可能有数百兆的参数,并且在一秒内多次更新参数,如果不原地执行这些更新的话,会占用大量的内存。
其次,如果不进行原地更新,其他的引用仍然会指向旧的内存地址,这样我们的代码可能无意间引用旧的参数。


当然也可以使用a[:]=<expression>来原地更新。比如:

有趣的是,这里可以使用torch.ones或者torch.zeros来创建张量,并且进行+=操作的时候不报错。

转化为其他类型的Python对象

将深度学习框架(pytorch)转化为Numpy张量对象(ndarray)很容易,反之也很容易。

当然,张量也可以转化为标量。(仅适用于大小为1的张量)

总结:

深度学习存储和操作数据的主要接口是张量(n维数组),它提供了各种功能,包括基本数学运算,广播,索引,切片,内存节省和转化为其他Python对象。

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

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

相关文章

arco design table遇到的一些问题

问题1:不知情就成了树形table table中不知道为啥就多了个树形加号在前面,查找问题后发现,是后端返回的数据中有children,框架中默认对这个参数做了树形结构。 解决办法: 当时没找到取消或者修改字段的属性或方法,就将此字段去掉,并将内容clone到childData。 问题2:c…

Java如何对OSS存储引擎的Bucket进行删除【OSS学习】

在前面学会了如何对OSS里面的Bucket进行创建&#xff1a;Java如何对OSS存储引擎的Bucket进行创建-CSDN博客 接下来&#xff0c;记录一下如何删除Bucket存储空间 目录 1、看看OSS&#xff1a; 2、代码&#xff1a; 3、运行效果&#xff1a; 1、看看OSS&#xff1a; 我准备将…

opencv009 滤波器01(卷积)

图像卷积操作&#xff08;convolution&#xff09;&#xff0c;或称为核操作&#xff08;kernel&#xff09;&#xff0c;是进行图像处理的一种常用手段&#xff0c; 图像卷积操作的目的是利用像素点和其邻域像素之前的空间关系&#xff0c;通过加权求和的操作&#xff0c;实现…

可pin to pin替代TI DRV8872的GLOBALCHIP直流电机驱动芯片GC8872,低成本、宽电压,内置电荷泵,短地短电源保护,限流

在现如今电机驱动芯片处于持续涨价的状态下&#xff0c;并且供货期货期长&#xff0c;偶尔缺货的状态下。为了降低设计成本&#xff0c;第一时间设计出优秀的产品占据市场高位。我这边推荐使用浙江GLOBALCHIP国产电机驱动芯片进行替换设计。供货稳定、价格低廉。GC8872是GLOBAL…

win7虚拟机安装VMware Tools失败,主机远程虚拟机解决

情况描述:安装完win732位虚拟机后,VMWare Tools安装失败,这时传文件就成了问题;所以才有了此文档,需要通过主机直接远程到虚拟机进行文件传输,网上的说明不全,导致摸索了一番才解决此问题; 首先,下载win732补丁; 下载地址:Microsoft Update Catalog首先,虚拟机需要…

【数据结构】 链队列的基本操作 (C语言版)

目录 一、链队列 1、链栈的定义&#xff1a; 2、链栈的优缺点&#xff1a; 二、链队列的基本操作算法&#xff08;C语言&#xff09; 1、宏定义 2、创建结构体 3、链栈的初始化 4、链队列的入队 5、链队列的出队 6、取链队列的对头元素 7、链队列的销毁 8、链…

Windows Defender存在威胁执行操作无反应且一直存在红叉(已解决)

文章目录 前言问题如图一、原因二、解决办法&#xff08;亲试有效&#xff09;总结 前言 Windows安全中心&#xff08;Windows Defender&#xff09;执行快速扫描/完全扫描后一直存在威胁&#xff0c;执行隔离或者删除操作后下次扫描还会扫出该威胁&#xff0c;但看威胁文件位置…

一些es的基本操作

目录 给索引增加字段&#xff1a;给索引删除字段[^1]&#xff1a;创建索引&#xff1a;插入document删除document(应该是按ID) : 给索引增加字段&#xff1a; 用postMan: 给名为population_portrait_hash_seven的索引增加了一个text类型的字段。 用chrome插件Elasticvue 的Re…

CentOS最优雅的方式安装mysql8

本来想偷个小懒使用yum/dnf安装一下mysq8,但是发现会出现各种问题,系统是CentOS8的. 于是还是使用最原始但是也是比较简单的方法来进行安装: 首先进入到https://dev.mysql.com/downloads/mysql/ 选择系统是Linux-Generic, 然后系统版本x86 64bit, 选择第一个TAR Archive的文件…

Vue3+Vite使用Puppeteer进行SEO优化(SSR+Meta)

1. 背景 【笑小枫】https://www.xiaoxiaofeng.com上线啦 资源持续整合中&#xff0c;程序员必备网站&#xff0c;快点前往围观吧~ 我的个人博客【笑小枫】又一次版本大升级&#xff0c;虽然知道没有多少访问量&#xff0c;但我还是整天没事瞎折腾。因为一些功能在Halo上不太好实…

什么是线程死锁

死锁是指两个或两个以上的进程&#xff08;线程&#xff09;在执行过程中&#xff0c;由于竞争资 源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推 进下去。此时称系统处于死锁状态或系统产生了死锁&#xff0c;这些永远在互相…

喜讯!聚铭网络荣获“2023年网络安全十大优秀案例”称号

近日&#xff0c;由等级保护测评主办的2023年网络安全优秀评选活动结果正式公布。聚铭网络凭借其卓越的技术实力和优秀的项目实施能力&#xff0c;成功荣获“2023年网络安全十大优秀案例”称号。 为了挖掘网络安全行业优秀企业、案例与产品&#xff0c;充分发挥优秀网安企业各…

Sulfo Cy2 Biotin,水溶性 Cy2 生物素,能够与各种氨基基团特异性结合

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;Sulfo Cyanine2 Biotin&#xff0c;Sulfo Cy2 Biotin&#xff0c;水溶性 Cy2 生物素&#xff0c;Sulfo-Cy2-Biotin&#xff0c;水溶性-Cy2-生物素 一、基本信息 产品简介&#xff1a;Sulfo Cyanine2 Biotin, also k…

开源运维平台Spug本地docker部署结合内网穿透实现远程访问

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

OceanBase创建租户

租户是集群之上的递进概念&#xff0c;OceanBase 数据库采用了多租户架构。 集群偏部署层面的物理概念&#xff0c;是 Zone 和节点的集合&#xff0c;租户则偏向于资源层面的逻辑概念&#xff0c;是在物理节点上划分的资源单元&#xff0c;可以指定其资源规格&#xff0c;包括…

from sklearn.preprocessing import LabelEncoder的详细用法

sklearn.preprocessing 0. 基本解释1. 用法说明2. python例子说明 0. 基本解释 LabelEncoder 是 sklearn.preprocessing 模块中的一个工具&#xff0c;用于将分类特征的标签转换为整数。这在许多机器学习算法中是必要的&#xff0c;因为它们通常不能处理类别数据。 1. 用法说…

五款焊在电脑上的效率软件

在当今快节奏的商业环境中&#xff0c;提高工作效率成为了每个人都渴望实现的目标。尤其是在面对繁忙的工作日程、庞杂的任务清单和团队合作的压力时&#xff0c;我们需要一些可靠的工具来帮助我们更好地管理时间、组织工作和提高生产力。幸运的是&#xff0c;现在有许多高效的…

VC++中使用OpenCV进行人脸检测

VC中使用OpenCV进行人脸检测 对于上面的图像&#xff0c;如何使用OpenCV进行人脸检测呢&#xff1f; 使用OpenCV进行人脸检测十分简单&#xff0c;OpenCV官网给了一个Python人脸检测的示例程序&#xff0c; objectDetection.py代码如下&#xff1a; from __future__ import p…

Pandas ------ 向 Excel 文件中写入含有 multi-index 和 Multi-column 表头的数据

Pandas ------ 向 Excel 文件中写入含有 multi-index 和 Multi-column 表头的数据 引言正文 引言 之前在 《pandas向已经拥有数据的Excel文件中添加新数据》 一文中我们介绍了如何通过 pandas 向 Excel 文件中写入数据。那么对于含有多表头的数据&#xff0c;我们该如何将它们…

STM32_JTAG引脚及复用代码

目录 1.JTAG引脚1.1 说明&#xff08;可以不看&#xff09;1.2 引脚 2.复用代码3. 手册介绍&#xff08;可以不看&#xff09; 总是忘记有些引脚是JTAG复用的&#xff0c;导致偶尔浪费一些时间&#xff0c;记录一下。 1.JTAG引脚 1.1 说明&#xff08;可以不看&#xff09; …