张量分析(由浅入深地带你了解分析张量)

张量分析(由浅入深地带你了解分析张量)

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

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

张量的定义

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

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

新张量=张量[索引]

张量的查看和存储

点击张量的存储。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_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

以上就是由优质生活领域创作者 嘉文社百科网小编 整理编辑的,如果觉得有帮助欢迎收藏转发~

分享到 :
相关推荐

达拉然光辉(达拉然光辉宝典有什么用)

今天和大家分享一个关于达拉然辉煌的问题(达拉然辉煌收藏有什么用)。以下是这个问题的总...

语法英语(英语四年级语法)

今天给大家介绍一下语法英语和四级语法对应的知识点。希望对你有帮助,也别忘了收藏这个网...

深圳春节活动(深圳春节活动本地宝)

今天给大家分享一下深圳春节活动的知识,也为大家讲解一下深圳春节活动的地方瑰宝。如果你...

上海迪士尼-上海迪士尼最吓人项目

今天来给大家分享一下关于上海迪士尼-上海迪士尼最吓人项目的问题,以下是对此问题的归纳...

草房子读后感(草房子读后感50字)

  今天小编给各位分享草房子读后感(草房子读后感50字),如果能碰巧解决你现在面临的...

南方人冬至吃什么(南方人冬至吃什么风俗食物)

   今天跟大家分享一下关于南方人冬至吃什么(南方人冬至吃什么民间食物)的问题。以下...

画圣诞树用什么软件(画圣诞树用什么软件好)

   今天跟大家分享一下用什么软件画圣诞树的问题(画圣诞树用什么软件好)。以下是边肖...

「重点」营口是属于哪个城市

营口是地级市。不属于哪个城市。营口市。辽宁省辖地级市。地处辽东半岛中枢。渤海东岸。大...