张量tensor——神经网络数据的表示

一般来说,当前所有机器学习系统都使用张量作为基本数据结构。

张量的核心在于,它是一个数据容器。它包含的数据几乎总是数值数据,因此它是数字的容器。如矩阵,它是二维张量。张量是矩阵向任意维度的推广。【注意:张量的维度(dimension)通常叫做轴(axis)】

一、不同维度张量介绍

1.1、标量(0D张量)

仅包含一个数字的张量叫作 标量 scalar ,也叫标量张量、零维张量、0D 张量)。在 Numpy 中,一个 float32 或 float64 的数字就是一个标量张量(或标量数组)。
 
可以用ndim属性来查看一个Numpy张量的轴的个数。标量张量有0个轴(ndim==0).张量轴的个数也叫作阶(rank).
 
 
1.2、向量(1D张量)
 
数字组成的数组叫做向量(vector)或一维张量(1D张量)。一维张量只有一个轴。
 
 
这个向量有 5 个元素,所以被称为 5D 向量 。不要把 5D 向量和 5D 张量弄混! 5D 向量只有一个轴,沿着轴有 5 个维度,而 5D 张量有 5 个轴(沿着每个轴可能有任意个维度)。维度 ( dimensionality )可以表示沿着某个轴上的元素个数(比如 5D 向),也可以表示张量中轴的个 数(比如 5D 张量),这有时会令人感到混乱。对于后一种情况,技术上更准确的说法是 5 阶张量 (张量的阶数即轴的个数),但 5D 张量 这种模糊的写法更常见。
 
1.3、矩阵(2D张量)
 
向量组成的数组叫做矩阵(matrix)或二维张量(2D张量)。矩阵有2个轴(通常叫做行和列)。
 
 
第一个轴上的元素叫做行(row),第二个轴上的元素叫做列(column).
 
1.4、3D张量与更高维张量
 
将多个矩阵组合成一个新的数组,可以得到一个3D张量。
 
 
将多个3D张量组合成一个数组,可以创建一个4D张量,以此类推。深度学习处理的一般是0D到4D的张量,但处理视频 数据时可能会遇到5D张量。
 
二、关键属性
 
张量是由以下三个关键属性定义的。
 
1)轴的个数(阶)。例如,3D张量有3个轴,矩阵有2个轴。
 
2)形状。这是一个整数元组,表示张量沿着每个维度的大小(元素个数)。例如,上面示例中矩阵的形状为(3, 5),3D张量示例的形状为(3,3,5)。向量的形状只包含一个元素,比如(5,),而标量的形状为空,即()。
 
3)数据类型(在Python库中通常叫做dtype)。 这是张量中所包含数据的类型,例如,张 量的类型可以是 float32 uint8 float64 等。在极少数情况下,你可能会遇到字符 char )张量。注意, Numpy (以及大多数其他库)中不存在字符串张量,因为张量存
储在预先分配的连续内存段中,而字符串的长度是可变的,无法用这种方式存储。
 
 
三、现实世界中的数据张量
 
1)向量数据:2D张量,形状为(samples, features)。
 
2)时间序列数据或序列数据:3D张量,形状为(samples,timestamps,features)。
 
3)图像:4D张量,形状为(samples, height,width,channels)或(samples,channels,height,width)。
 
4)视频:5D张量,形状为(samples,frames, height,width,channels)或(samples,frames,channels,height,width)。
 
 
3.1各张量示例
 
3.1.1 向量数据
 
这是最常见的数据。对于这种数据集,每个数据点都被编码为一个向量,因此一个数据批 量就被编码为 2D 张量(即向量组成的数组),其中第一个轴是 样本轴 ,第二个轴是 特征轴
 
例子:
 
人口统计数据集,其中包括每个人的年龄、邮编和收入。每个人可以表示为包含 3 个值 的向量,而整个数据集包含 100 000 个人,因此可以存储在形状为 (100000, 3) 的 2D 张量中。
 
3.1.2 时间序列或序列数据
 
当时间(或序列顺序)对于数据很重要时,应该将数据存储在带有时间轴的 3D 张量中。 每个样本可以被编码为一个向量序列(即 2D 张量),因此一个数据批量就被编码为一个 3D 张 量。
 
 
例子:
 
股票价格数据集。每一分钟,我们将股票的当前价格、前一分钟的最高价格和前一分钟 的最低价格保存下来。因此每分钟被编码为一个 3D 向量,整个交易日被编码为一个形 状为 (390, 3) 的 2D 张量(一个交易日有 390 分钟),而 250 天的数据则可以保存在一 个形状为 (250, 390, 3) 的 3D 张量中。这里每个样本是一天的股票数据。
 
3.1.3 图像数据
 
图像通常具有三个维度:高度、宽度和颜色深度。虽然灰度图像(比如 MNIST 数字图像) 只有一个颜色通道,因此可以保存在 2D 张量中,但按照惯例,图像张量始终都是 3D 张量,灰 度图像的彩色通道只有一维。因此,如果图像大小为 256 × 256,那么 128 张灰度图像组成的批 量可以保存在一个形状为 (128, 256, 256, 1) 的张量中,而 128 张彩色图像组成的批量则 可以保存在
个形状为 (128, 256, 256, 3) 的张量中。
 
 
图像张量的形状有两种约定: 通道在后(channels-last )的约定(在 TensorFlow 中使用)和 通道在前(channels-first )的约定(在 Theano 中使用)。 Google TensorFlow 机器学习框架将 颜色深度轴放在最后: (samples, height, width, color_depth) 。与此相反,Theano 将图像深度轴放在批量轴之后: (samples, color_depth, height, width)。如果采 用 Theano 约定,前面的两个例子将变成 (128, 1, 256, 256) (128, 3, 256, 256)。 Keras 框架同时支持这两种格式。
 
 
3.1.4 视频数据
 
视频数据是现实生活中需要用到 5D 张量的少数数据类型之一。视频可以看作一系列帧, 每一帧都是一张彩色图像。由于每一帧都可以保存在一个形状为 (height, width, color_ depth) 的 3D 张量中,因此一系列帧可以保存在一个形状为 (frames, height, width, color_depth) 的 4D 张量中,而不同视频组成的批量则可以保存在一个 5D 张量中,其形状为 (samples, frames, height, width, color_depth)
 
例子:
 
举个例子,一个以每秒 4 帧采样的 60 YouTube 视频片段,视频尺寸为 144 × 256,这个 视频共有 240 帧。 4 个这样的视频片段组成的批量将保存在形状为 (4, 240, 144, 256, 3) 的张量中。总共有 106 168 320 个值!如果张量的数据类型( dtype )是 float32,每个值都是 32 位,那么这个张量共有 405MB。好大!你在现实生活中遇到的视频要小得多,因为它们不以 float32 格式存储,而且通常被大大压缩,比如 MPEG 格式。
  • 11
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值