张量是TensorFlow中数据的载体。
Tensorflow中的“Tensor”表示张量,其实就是多维数组。
- Python中的列表list
- NumPy中的数组对象ndarray
他们都可以作为数据的载体
区别:
1. Python列表(list)
* 元素可以使用不同的数据类型,可以嵌套
* 在内存中不连续存放,是一个动态的指针数组
* 读写效率低,占用内存空间大
* 不适合做数值计算
2. NumPy数组(ndarray)
* 元素数据类型相同
* 每个元素在内存中占用的空间相同,存储在一个连续的内存区域中
* 存储空间小,读取和写入速度快
* 在CPU中运算,不能够主动检测、利用GPU进行运算
3.TensorFlow张量(Tensor):
* 可以高速运行于GPU和TPU之上
* 支持CPU、嵌入式、单机多卡和多机多卡等多种计算方法
* 高速的实现神经网络和深度学习中的算法
1.创建Tensor对象
张量由Tensor类实现,每个张量都是一个Tensor对象
tf.constant()函数:创建张量
tf.constant(value,dtype,shape)
value:数字/Python列表/NumPy数组
dthpe:元素的数据类型
shape:张量的形状
注:本节代码均使用JupyterNoteBook完成
tf.constant([1,2],[3,4])
# 自定义数据类型
tf.constant(1.0,dtype=tf.float64)
参数为NumPy数组
numpy创建浮点数数组时,默认的浮点型是64位浮点数。
当使用NumPy数组创建张量时,TensorFlow会接受数组元素的数据类型,使用64位浮点数保存数据。
由于计算机处理32位浮点数的速度远快于64位浮点数,所以建议在使用numpy数组创建张量时,将数据类型改为32位。
# tf.convert_to_tensor()函数
# tf.convert_to_tensor(数组/列表/数字/布尔型/字符串)
na = np.arange(12).reshape(3,4)
ta = tf.convert_to_tensor(na)
type(na)
type(ta)
# tf.is_tensor()函数 判断是否为张量,输出为布尔值
tf.is_tensor(ta)
tf.is_tensor(na)
# isinstance()函数
isinstance(ta.tf.Tensor)
isinstance(na.tf.ndarray)
创建特殊张量
# tf.zero(shape,dtype = tf.float32)创建全零张量 数据类型默认为float32
tf.zero([5])
# tf.ones(shape,dtype = tf.float32)创建全1张量 数据类型默认为float32
tf.ones(shape = (2,1))
tf.ones([6,6])
# tf.fill(dims,value)函数,创建元素值都相同的张量。
# dims表示形状,value表示值
tf.fill(dims=[3,4],value=5)
# tf.constant()函数,创建元素值都相同的张量。
tf.constant(value=5,shape=[3,4])# 与fill函数一致
# 创建随机数张量--正态分布
# tf.random.normal(shape,mean,stddev,dtype)
# shape:形状 mean:均值 stddev:标准差
# 当均值和标准差省略时,默认为标准正态分布。
tf.random.normal(shape = [3,3],mean = 2,stddev = 3)
# 创建随机数张量--截断正态分布
# tf.random.truncated.normal(shape,mean,stddev,dtype)
# 返回一个截断的正太分布
# 截断的标准是2倍的标准差
# 设置随机种子--tf.random.set_seed()函数
tf.random.set_seed(8)
tf.random.normal(shape = [2,2])
# 创建均匀分布张量--tf.random.uniform()函数
# tf.random.uniform(shape,minval,maxval,dtype)
# [最小值,最大值) 前闭后开,不包括最大值
tf.random.uniform(shape=(3,3),minval=0,maxval=10,dtype='int32')
# 随机打乱--tf.random.shuffle()函数
x = tf.constant([[1,2],[3,4],[5,6]])
tf.random.shuffle(x)
y = [1,2,3,4,5,6]
tf.random.shuffle(y)
z = np.arange(5)
tf.random.shuffle(z)
# 创建序列--tf.range()函数
# tf.range(start,limit,delta=1,dtype) 产生一个整型的数字序列
# start:起始数字 limit:结束数字 delta:步长
# [start,limit) 前闭后开
# 除了limit 剩下都可以省略
tf.range(10)
tf.range(10,delta=2)
tf.range(1,10,2)
Tensor对象的属性
ndim:维度 ( x.ndim)
shape:形状 (x.shape)
dtype:数据类型 (x.dtype)
在TensorFlow中,所有的运算都是在张量之间进行的
NumPy数组仅仅是作为输入和输出来使用
张量可以运行于 CPU,也可以运行于GPU和TPU
而NumPy数组只能在CPU中运行