张量分析是大学什么阶段学的(张量分析的应用和意义)

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

张量分析是大学什么阶段学的(张量分析的应用和意义)

张量的定义

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

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

新张量=张量[索引]

张量的查看和存储

点击张量的存储。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)张量的存储布局如下:

& lt张量:shape=(3,2),dtype=float32,numpy=array([[1。, 4.], [2., 1.], [3., 5.]],dtype=float32)>[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_max min mean sum, 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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/259439.html

发表回复

登录后才能评论