首页 > 数码 >

焦点消息!张量分析_由浅入深地带你了解分析张量

提起张量分析_由浅入深地带你了解分析张量 大家在熟悉不过了,被越来越多的人所熟知,那你知道张量分析_由浅入深地带你了解分析张量 吗?快和小编一起去了解一下吧!


【资料图】

张量分析(由浅入深,你知道分析张量)

神经 *** 的输入、输出和权值都是张量,神经 *** 中的各种计算和变换都是对张量的运算。张量,一种数据结构,是神经 *** 的基石。可以说,不理解张量,就没有真正理解神经 *** 和人工智能。本文由浅入深地详细讲解了分析张量,希望对读者有所启发——宵远。

张量的定义

张量是一个多维数组,即存储一组数的数据结构,可以通过索引单独访问,也可以通过多个索引进行索引。

张量是向量和矩阵到任意维的推广。如下图所示,张量的维数与张量中用来表示标量值的索引数一致。

新张量=张量[索引]

张量的查看和存储

点击张量的存储。ipynb进行深入研究。以下是该文件的主要内容:

张量,PyTorch中的基本数据结构

索引对PyTorch张量进行操作以探索和处理数据。

与NumPy多维数组的互操作性

将计算转移到GPU以加快速度

张量的视图定义和存储

存储是数字数据的一维数组,例如包含给定类型数字(可能是float或int32)的连续内存块。张量是一种存储的视图,可以通过使用偏移和每个维度的每维度步骤将其索引到存储中。的存储布局永远是一维的,与任何可能涉及它的张量的维数无关。

多个张量可以索引同一个存储,即使它们索引数据的方式不同。但是底层内存只分配一次,所以无论存储实例管理的数据有多大,都可以快速创建数据上的备选张量视图。

张量观的多维意义

张量的观点就是我们如何理解张量,比如形状为[2,4,4,3]的张量A。逻辑上我们可以理解为两张图片,每张4行4列,每个位置都有RGB 3通道的数据;张量的存储体现在,张量作为一个连续的存储区存储在内存中。对于同一个存储,我们可以有不同的理解方式,比如上面的A,在不改变张量存储的情况下,我们可以把张量A理解为两个样本,每个样本的特征都是一个长度为48的向量。这就是存储和视图的关系。

张量存储的一维性

存储数据时,内存不支持这种维度层次的概念,只能按顺序分块写入内存。所以这种层次关系需要人工管理,即需要人工跟踪每个张量的存储顺序。为了表达方便,我们把张量形状左侧的维度称为大维度,形状右侧的维度称为小维度。比如在[2,4,4,3]的张量中,与通道数相比,图片数称为大维,通道数称为小维。在优先写入小尺寸的设置下,形状(2,3)张量的存储布局如下:

[1.,4.,2.,1.,3.,5.]

创建数据时,会根据初始维度顺序写入数据。改变张量的视图只是改变了张量的理解公式,而不改变张量的存储顺序。这在一定程度上是因为计算效率的原因,大量数据的写操作会消耗更多的计算资源。

张量存储的形状(大小)、存储偏移量和步长

为了索引到存储器中,张量依赖于一些信息,这些信息和它们的存储器一起清楚地定义了它们:大小、存储偏移和步长(如下)。

英文意思形状是一个元组,表示张量表示的每个维度上有多少个元素。注意张量的形状等同于存储的大小。Step stride是一个元组,它指示当索引在每个维度上增加1时,存储中必须跳过的元素的数量。存储偏移量storage offset存储张量中之一个元素对应的索引。

在上面的例子中,访问二维张量中的元素(I,j)(i,j)的结果是访问存储中的$ storage _ offset+stride[0]I+stride[1]j $元素。

更一般化:对于形状为(d1,d2,…,dn)的张量的视图中的元素E(e1,e2,…,en)E(e1,e2,…,en),如果张量的存储步长为stride (s1,s2,…,sn)

由此,我们得到张量视图的计算公式:

张量视图=张量存储+张量形状+张量步长+张量偏移

张量存储对张量运算的影响

张量和存储之间的这种间接性导致了一些操作,例如转置张量或提取子张量。这些操作是廉价的,因为它们不会导致内存重新分配;相反,它们包括为新的张量对象分配不同的形状、存储偏移量或步长值。

张量的维数降低了,而索引的存储空仍然与原来的点张量相同。改变子张量会对原张量产生副作用(子张量的修改会影响原张量)。但这种效应可能不会一直存在,因为子张量可以克隆成新的张量。

没有分配新的内存:转置只能通过创建一个新的张量实例来获得,该实例的步长与原始张量的步长不同。您可以通过重新排列张量函数(如PyTorch中的tense()函数)来强制复制一个张量,使其布局与新创建的张量的布局相同。

张量的表示和存储的区别和联系

接触

对于元素E (E1,E2,...,EN)在张量的视野中,其形状是(D1,D2,...,DN),如果张量的存储步长为(S1,S2,...,Sn)且存储偏移量storage offset为s_o,则元素E的存储位置索引为:

张量视图=张量存储+张量形状+张量步长+张量偏移

区分

同一个存储可以有不同的视图:tensor_B.storage()与tensor_B_transpose.storage()相同,但tensor_B与tensor_B_transpose不同。

同一个视图可以有不同的存储:tensor_A与tensor_B_transpose相同,但tensor_A.storage()与tensor_B_transpose.storage()不同。

摘要:张量视图与存储之间的关系是通过索引建立的。两者之间没有必然,就是同一个存储可以有不同的视图,同一个视图可以有不同的存储。

张量运算

点击TensorFlow张量的常用运算。ipynb了解更多信息。以下是该文件的主要内容:

dtype=int32,float32,string,booltf.convert_to_tensor,tf.constant,tf.zeros,tf.ones,tf.zeros_like,tf.fill,tf.random.normal,tf.random.uniform,tf.rangeA[1][2][1],A[1,2,1],A[:,:,0:3:2],A[...,0:3:2]tf.reshape,tf.expand_dims,tf.squeeze,tf.transposetf.tile+,-,*,/,//,%,**,tf.pow,tf.square,tf.sqrt,tf.math.log,tf.matmul,@tf.concat,tf.stack,tf.split,tf.unstacktf.norm,tf.reduce_maxminmeansum,tf.argmax,tf.argmintf.equaltf.pad,tf.keras.preprocessing.sequence.pad_sequences,tf.tiletf.maximum,tf.minimum,tf.clip_by_valuetf.gather,tf.gather_ndtf.boolean_masktf.wheretf.scatter_ndtf.meshgrid

关键词:

责任编辑:Rex_19

推荐阅读

湖南常宁:春耕春种忙

· 2023-03-19 11:54:26

关于我们 联系我们 商务合作 诚聘英才 网站地图

Copyright @ 2008-2020 xjd.rexun.cn Corporation,All Rights Reserved

热讯新闻网 版权所有 备案号:豫ICP备20005723号-6
文章投诉邮箱:2 9 5 9 1 1 5 7 8@qq.com 违法信息举报邮箱:jubao@123777.net.cn

营业执照公示信息