Tensorflow名称中的Tensor即张量,不仅仅是Tensorflow,几乎所有的深度学习平台都以张量为基本的数据结构。简单来说,张量就是多维数组,本质上是一种数据容器,它可以有任意维度,比如矩阵就是二维张量(二维数组)。
深度学习中使用张量来表示数据,计算图是由张量和张量运算形成的运算结构图,如果把张量作神经网络的原料的话,计算图就相当于神经网络这台机器的齿轮,它用图的形式来表达计算过程-----即数据的计算和流动。Tensorflow名称为张量(Tensor)的流动(flow) 。
主要学习内容:
1)理解和掌握张量的概念、维度(轴 axis)
2)掌握常用数据类型的张量表示,包括:
①向量数据
②时间序列数据
③图像数据
④视频数据
3) 理解和掌握计算图的作用及结构
一、 理解张量的相关概念
在Python中,通常用numpy来存储张量,numpy是个常用的科学计算包,其核结构是Ndarray (即多维数组)。在Tensorflow中的张量Tensor可以和Numpy数组相互转换。
0维张量(标量):
只含有1个数字的张量叫做0维张量,也叫标量。如果把张量比喻成水桶,0维度张量就是只有1滴水的水桶。
1维张量
即一维数组,维度个数(轴数)为1。
2维张量
即二维数组,维度个数(轴数)为2。
3维张量
一个3维张量可以看成是将多个2维张量放入一个1维张量中,形状上相当于一个数字立方体
张量的形状改变
使用reshape()方法
reshape前后张量的元素个数(size)相同
reshape的参数中可以只指定部分维度,-1表示该维度由计算得出(size除以其他维度的积)
3维以上张量
张量可以是任意维度的,除了2维、3维外,常用的还有4维、5
维张量。
(高维相当于低维的堆叠)
二、掌握常用数据类型的张量表示
含义
向量数据:2D张量,形状为(samples, features) 。
时间序列数据:3D张量,形状为(sampLes,timesteps, features)。
图像数据:4D张量,形状为(samples,height,width、channels)。
视频数据:5D张量,形状为(samples,frames、height、width、channels)。
注:samples为样本量,features为特征数,timesteps为时序值,channels为图像颜色通道数(如,常见的RGB三个通道),frames为视频的帧数。图像和视频如果为灰度模式,则不需要channels这一维度,会减少一个维度。另外需要注意的是,不同系统中的表示顺序可能会不同,如openCV和TensorfLow中图像张量的表示形式里channels的位置是不同的。
示例
2D张量的例子:
统计1000个人的姓名、年龄和收入3个特征的情况,会形成一个形状(1000,3)的2D张量。也就是一张二维表格,1000行,4列。
3D张量的刚子:
统计1只股票200个交易日内、每个交易日240分钟、每分钟的初始价、最高价、最低价和结束价,会形成一个(200,240,4)的3D张量。如果统计1000只股票,则会形成一个(1000,200,240,4)的4D张量。同理,如果统计5个股票交易所的各1000只股票,则会形成一个(5,1000,200,240,4)的5D张量。即:高维张量是低维张量的堆叠。
如图,一张600 * 600像素的猫的彩色图片(RGB模式),可以用一个形状为:(600,600,3)的3D张量来表示(RGB图片每个像素点有红、黄、蓝3个通道值)。如果有5张猫的图片,那么可以用形状为(5,600,600,3)的4D张量表示。
三、理解计算图的作用及结构
计算图是一种表述计算逻辑的图形结构,表现为有向无环图,它定义了数据的流转方式、计算方式、以及各种计算之间的依赖关系。计算图通常由节点和有向边构成:
节点:数据和计算
有向边:数据流、控制流(即依赖关系)
计算图适用于需要大规模计算的环境,配合GPU在并行计算方面的优势可以有效提升计算效率。主流的神经网络框架Tensoflow、Pytorch等都采用计算图结构。
了解TensorfLow中的张量和计算图功能
1.TensorfLow中大多数神经网络建模工作现在都可以用更高层的APIKeras方便地实现,但TensorfLow同时也提供了强大的直接操作张量和计算图的功能。
2.TensorfLow提供了张量Tensor的定义、数据类型、类型转换、数值操作、形状变换、算术操作、矩阵运算、索引与切片等各种操作功能,允许开发人员从更底层上构建计算逻辑。
3.TensorfLow2.×版本中已经内置了Keras作为官方推荐的神经网络API,Keras允许模块化地构建神经网络,使用非常方便,受到广泛欢迎。我们后续主要使用Keras API来构建神经网络模型。
四、总结
1.张量(Tensor)是神经网络的基本数据结构,本质上是一种维度任意的多维数据容器。
2.深度学习中使用张量来表示各种数据,如向量数据、时间序列数据、图像数据、视频数据等,需要熟悉它们的形状格式,在神经网络的训练中会经常用到。
3.计算图是张量计算过程的逻辑表示,图运算非常适用于神经网络这种大规模运算场景,配合GPU的并行计算能门能够大幅提高运算效率。
4.TensorfLow提供了在底层直接定义操作张量和计算图的功能,大多数情况下使用Tensorflow推荐的Keras高层API可以模块化地、更高效地构建神经网络模型。