赞
踩
当前的机器学习模型基本都使用张量(Tensor)作为基本的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量来编码一个模型的输入和输出,以及模型的参数。
张量(Tensor)与NumPy的ndarrays类似,但是张量可以在GPU或其他硬件加速器上运行。事实上,张量和NumPy数组通常可以共享相同的底层内存(属于引用拷贝),不需要复制数据,直接使用 torch.from_numpy()
转换即可。
通常来说,深度学习中所有数据张量的第一个轴(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深度学习(第二版) 提供的例子:
图像通常具有三个维度:高度、宽度和颜色深度。虽然灰度图像(比如MNIST 数字图像)只有一个颜色通道,因此可以保存在2D张量中(不考虑样本轴)。但按照惯例,图像张量始终都是3D张量,灰度图像的彩色通道只有一维。因此,如果图像大小为
256
×
256
256\times256
256×256,那么512张灰度图像组成的批量可以保存在一个形状为(512,256,256,1)的张量中,而相同数量的彩色图像可以保存在一个形状为(512,256,256,3)的张量中。
图像张量的形状有两种约定:
值得注意的是,Keras框架同时支持这两种格式。
视频的每一帧都是一张图片,所以比图像多了一个维度。
视频数据是现实生活中需要用到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
侵删!如有错误还请指正,不定期更新,觉得不错的话请给个赞吧~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。