1.本文内容
主要介绍张量的切片和变形,以及视频和图像中的张量表示方式。
2.切片和变形
2.1切片
张量切片:选择张量的特定元素叫做张量切片。
假设你有1000张图片,均为28*28的灰度图像:
>>>A= image[10:99,0:28,0:28]=image[10:99]=image[10:99,:,:]
(90,28,28)
本代码中,等号代表三种写法相同,10:99代表选择地11张至第100张图片,选择每一张图片的0至28行,和0至28列。“:”代表选择张量中的整个轴。
2.2变形
张量变形:张量变形是指改变张量的行和列,以得到想要的形状。变形后的张量的元素总个数与初始张量相同。
x= np.array([[0., 1.],
[2., 3.],
[4., 5.]])
>>> print(x.shape)
(3, 2)
>>> x = x.reshape((6, 1))
>>> x
array([[ 0.],
[ 1.],
[ 2.],
[ 3.],
[ 4.],
[ 5.]])
>>> x = x.reshape((2, 3))
>>> x
array([[ 0., 1., 2.],
[ 3., 4., 5.]])
经常遇到的一种特殊的张量变形是转置(transposition)。对矩阵做转置是指将行和列互换
>>> x = np.zeros((300, 20))
>>> x = np.transpose(x)
>>> print(x.shape)
(20, 300)
2.图像数据
图像通常具有三个维度:高度、宽度和颜色深度。虽然灰度图像(比如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.视频数据
视频数据是现实生活中需要用到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)的张量中。总共有106168320个值!如果张量的数据类型(dtype是float32,每个值都是32位,那么这个张量共有405MB。