张量Tensor(机器学习的数学基础)

1、张量是什么

  当前的机器学习模型基本都使用张量(Tensor)作为基本的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量来编码一个模型的输入和输出,以及模型的参数。
  张量(Tensor)与NumPy的ndarrays类似,但是张量可以在GPU或其他硬件加速器上运行。事实上,张量和NumPy数组通常可以共享相同的底层内存(属于引用拷贝),不需要复制数据,直接使用 torch.from_numpy()转换即可。

2、张量的属性

  1. 轴(阶):向量有1个轴,矩阵有2个轴,3D张量有3个轴。在NumPy里用ndarrayndim属性表示。
  2. 形状:这是一个整数元组,在Python中通常用shape属性表示张量沿着每个轴的维度大小(元素个数)。例如,矩阵的形状可表示为(2,6);3D张量的形状可表示为(40,2,6);向量为(6,),而标量的形状为空,即()。
  3. 数据类型:张量中包含的数据类型,在Python中通常用dtype属性表示(float64、float32…)。

3、常见的几种数据张量

  通常来说,深度学习中所有数据张量的第一个轴(0轴)都是样本轴(也称样本维度)。由于深度学习通常不会同时处理整个数据集,而是会将数据拆分成小批量进行输入训练。对于这种批量张量(batch tensor),第一个轴叫作批量轴(batch axis)或批量维度

序号数据类型张量类型形状
1向量数据2D张量(samples,feature)
2时间序列数据或序列数据3D张量(samples,timesteps,feature)
3图像4D张量(samples,height,width,channels)or(samples,channels,height,width)
4视频5D张量(samples,frames,height,width,channels)or(samples,frames,channels,height,width)

  注意:向量只有1个轴,是1D张量,但加上样本轴后的向量数据有2个轴,是2D张量。
  接下来,一起看一下 python深度学习(第二版) 提供的例子:

3.1 向量数据

  1. 人口统计数据集
       其中包括每个人的年龄、性别、身份证号和住址。每个人可以表示为包含4个值的向量,而整个数据集包含100,000个人,因此可以存储在形状为(100000,4) 的2D张量中。
  2. 文本文档数据集
       我们将每个文档表示为每个单词在其中出现的次数(字典中包含20,000个常见单词)。每个文档可以被编码为包含20000个值的向量(每个值对应于字典中每个单词的出现次数),整个数据集包含500个文档,因此可以存储在形状为
    (500,20000) 的张量中。
       用Excel可以很容易表示,三个文档中单词A、B、C中各出现的次数:
    在这里插入图片描述

3.2 时间序列数据或序列数据

  1. 股票价格数据集
       每一分钟, 我们将股票的当前价格、前1分钟的最高价格和前1分钟的最低价格保存下来。因此每分钟被编码为个3D向量(注意,不是3D张量),整个交易日被编码为1个形状为(390,3) 的2D张量(一个交易日有390分钟).而250天的数据则可以保存在个形状为(250,390, 3) 的3D张量中。这里每个样本是1天的股票数据。
  2. 推文数据集
       我们将每条推文编码为280个字符组成的序列,而每个字符又来自于128个字符组成的字母表。在这种情况下,每个字符可以被编码为大小为128的二进制向量(独热编码:只有在该字符对应的索引位置取值为1,其他元素都为0)。那么每条推文可以被编码为一个形状为(280,128)的2D张量,而包含100万条推文的数据集则可以存在一个形状为(1000000, 280, 128) 的张量中。

3.3 图像

  图像通常具有三个维度:高度、宽度和颜色深度。虽然灰度图像(比如MNIST 数字图像)只有一个颜色通道,因此可以保存在2D张量中(不考虑样本轴)。但按照惯例,图像张量始终都是3D张量,灰度图像的彩色通道只有一维。因此,如果图像大小为 256 × 256 256\times256 256×256,那么512张灰度图像组成的批量可以保存在一个形状为(512,256,256,1)的张量中,而相同数量的彩色图像可以保存在一个形状为(512,256,256,3)的张量中。
  图像张量的形状有两种约定:

  1. 通道在后(channels-last)的约定:Google的TensorFlow机器学习框架将颜色深度轴放在最后(samples,height,width,color_depth)。
  2. 通道在前(channels-first)的约定:与1相反,Theano框架将图像深度轴放在批量轴之后(samples,color_depth,height,width)。如果采用Theano约定,前面的两个例子将变成(512,1,256,256)和(512,3,256,256)。

  值得注意的是,Keras框架同时支持这两种格式。

3.4 视频

  视频的每一帧都是一张图片,所以比图像多了一个维度。
  视频数据是现实生活中需要用到5D张量的少数数据类型之一。视额可以看作一系列帧,每一帧都是一张彩色图像。由于每一帧都可以保存在一个形状为(height, width. color_depth)的3D张量中,因此,一系列帧可以保存在一个形状为(frames,height, width,color_depth)的4D张量中,而不同视频组成的批量则可以保存在一个5D张量中,其形状为
(samples,frames,height,width,color_ depth)。
  举个例子,一个以每秒4帧采样的60秒YouTube视频片段,视频尺寸为 44 × 256 44\times256 44×256,这个视颊共有240帧。4个这样的视频片段组成的批量将保存在形状为(4,240,144,256,3)的张量中。总共有106,168,320个值!如果张量的数据类型(dtype)是float32,每个值都是32位,那么这个张量共有405MB,很大。但我们在现实生活中遇到的视频要小得多。因为它们不以float32格式存储,而且通常被大大压缩,比如MPEG格式。
  解释:float32表示一个float32的值占计算机内存32个比特位。所以这个张量的大小为: 106168320 × 32 ÷ 1024 ÷ 1024 ÷ 8 = 405 M B 106168320\times32\div1024\div1024\div8=405 MB 106168320×32÷1024÷1024÷8=405MB

侵删!如有错误还请指正,不定期更新,觉得不错的话请给个赞吧~

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TerryBlog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值