张量

张量

参考书籍:Deep learning with Python,Francois Chollet

张量是神经网络中的最常用的数据结构,可以理解为是一个数据容器。

张量里面可以装数字,也可以装字符,但是不能装字符串,因为每个张量单元的内存预设是一样大的。

关键属性

轴的个数(阶,rank)

张量是矩阵向任意维度的推广,张量的维度通常叫做,张量轴的个数也被叫作阶(rank)

形状

张量的形状表示的是张量沿着每个轴的维度大小,也就是每个轴的元素个数。

数据类型(dtype)

张量的每个元素的数据类型,可以是float32,unit8,float64等

常见的张量类型

标量(0D张量)

形象理解为一行书中的一个字

标量(scalar)是仅含有一个数字的张量,也被称作为0D张量,标量张量有0个轴(ndim=0)

形状为空,即x.shape=()

向量(1D张量)

形象理解为一页书中的一行

数字组成的数组叫作向量(vector),也被称作一维张量,向量只有一个1个轴(ndim=1)

若向量中有5个元素,则被称为5D向量

向量的形状只包含一个元素,即x.shape=(5,),5只是示意

矩阵(2D张量)

形象理解为一本书中的一页

向量组成的数组叫作矩阵(matrix),也被称作二维张量,矩阵有两个轴,第一个轴被称为,从上到下,由小到大,第二个轴被称为,从左到右,由小到大

矩阵的形状包含两个元素,即x.shape=(3,5),即3行5列。

3D张量

形象理解为一堆书中的一本

矩阵组成的数组叫做3D张量,有三个轴

在这里插入图片描述

3D张量的形状包含三个元素,也就是有几个轴,就包含几个元素,即x.shape=(3,3,5),即3行5列。

4D张量

形象理解为一个书架上的一排书

定义由上,以此类推,形状也以此类推。

注意:张量的形状的顺序是从0轴开始,0轴代表的是最高的维度,类比图书馆–书架–某一排书–这排书中的某一本–一本书的某一页–一页中的某个字这种架构,另外每个轴的维度计数也是从0开始的,理解这里有助于在一个张量中操作各个轴的数据,Python中 ":**" 代表选择了该轴的所有数据,下面代码为例说明各种操作:

import numpy as np
x = np.array([[[[1, 2, 5, 45],
              [25, 361, 45, 19]],
              [[5, 6, 7, 8],
               [4, 9, 16, 25]],
              [[1, 2, 5, 45],
               [22, 33, 44, 55]],
              ],
             [[[1, 2, 3, 4],
               [5, 6, 8, 9]],
              [[10, 11, 12, 13],
               [14, 15, 16, 17]],
              [[18, 19, 20, 21],
               [22, 23, 24, 25]],
              ]]
             )
print("x.shape:", x.shape)
print("x中某个数:", x[1, 1, 1, 3]) #就是第二个3D张量里面第二个矩阵的第2行第4列
print("x中第二个3d张量的第二个矩阵:\n", x[1, 1, :, :])

输出:
x.shape: (2, 3, 2, 4)        # 建立了一个4D张量,各个轴的维度大小如图所示
x中某个数: 17
x中第二个3d张量的第二个矩阵:
 [[10 11 12 13]
 [14 15 16 17]]

张量计算

逐元素计算:当两个张量的维度是一样时,逐元素计算也就是对应位置上的元素进行计算,当两个张量的维度不一样时,这时较小的张量会被广播,也就是扩张成较大张量的形状,前提是两者不发生歧义(也就是较小的张量需要知道怎么扩维,例子如下)

y = np.array([1, 2])
y1 = np.array([[1, 2, 3],
              [4, 5, 6]])
y3 = 3
# y2 = y + y1
# print("y2=:\n", y2)    #这是不能输出的,因为[1,2]这个张量不知道怎么扩维成[1,2,3]
y4 = y1 + y3
print("y4=:\n", y4)

张量点积:其实可以理解成矩阵乘法,高维张量的最后一阶(或者说一维)的大小必须和低维张量的第0轴的大小一样大

在这里插入图片描述
在这里插入图片描述

张量变形:张量变形指的是改变张量的行和列,变形前后张量的元素总个数的值不变,特殊的张量变形是转置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值