学习基础类型定义及操作函数,以期能使用TensorFlow编写代码
张量及操作
张量可以说是TensorFlow的标志,因为整个框架的名称TensorFlow就是张量流的意思。
张量介绍
TensorFlow程序使用tensor数据结构来代表所有的数据。计算图中,操作间传递的数据都是Tensor。
可以把tensor看作一个n维的数组或者列表,每个tensor中包含了类型(type)、阶(rank)和形状(shape)。
- tensor类型
tensor类型与python类型对比如下:
tensor类型 | python类型 | 描述 |
---|---|---|
DT_FLOAT | tf.float32 | 32位浮点数 |
DT_DOUBLE | tf.float64 | 64位浮点数 |
DT_INT64 | tf.int64 | 64位有符号整型 |
DT_INT32 | tf.int32 | 32位有符号整型 |
DT_INT16 | tf.int16 | 16位有符号整型 |
DT_INT8 | tf.int8 | 8位有符号整型 |
DT_UINT8 | tf.uint8 | 8位无符号整型 |
DT_STRING | tf.string | 可变长度的字节数组,每一个张量元素都是一个字节数组 |
DT_BOOL | tf.bool | 布尔型 |
DT_COMPLEX64 | tf.complex64 | 由两个32位浮点数组成的复数:实数和虚数 |
- rank(阶)
rank(阶)指的就是维度。但张量的阶和矩阵的阶并不是同一个概念,主要是看有几层中括号。例如,对于一个传统意义上的3阶矩阵a=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]来讲,在张量中的阶数表示为2阶(因为它有两层中括号)。
标量、向量、矩阵的阶数:
rank | 实例 | 例子 |
---|---|---|
0 | 标量(只有大小) | a = 1 |
1 | 向量(大小和方向) | b = [1, 1, 1, 1] |
2 | 矩阵(数据表) | C = [[1, 1], [1, 1]] |
3 | 3阶张量(数据立体) | D = [[[1], [1]], [[1], [1]]] |
n | n阶 | E = [[[[[[…[[1],[1],]]]…]]]]] (n层中括号) |
- shape(形状)
shape(形状)用于描述张量内部的组织关系。’形状’可以通过python中的整型列表或元组(int list或tuples)来表示,也可以用TensorFlow中的相关形状函数来表示。例如:一个二阶张量a = [[1, 2, 3], [4, 5, 6]] 形状是两行三列,描述为(2, 3)
张量相关操作
- 类型转换
函数 | 描述 |
---|---|
tf.string_to_number(string_tensor, out_type=None,name=None) | 字符串转为数字 |
tf.to_double(x,name=’ToDouble’) | 转为64位浮点类型 |
tf.to_float(x,name=’ToFloat’) | 转为32位浮点类型 |
tf.to_int32(x,name=’ToInt32’) | 转为32位整型 |
tf.to_int64(x,name=’ToInt64’) | 转为64位整型 |
tf.cast(x,dtype,name=None) | 将x或者x.values转换为dtype所指定的类型。例如:W=tf.Variable(1.0), tf.cast(W, tf.int32) ===> W=1 # dtype=tf.int32 |
- 数值操作
函数 | 描述 |
---|---|
tf.ones(shape,dtype) | 按指定类型与形状生成值为1的张量,如:tf.ones([2,3], tf.int32) ===> [[1 1 1]][1 1 1]] |
tf.zeros(shape,dtype) | 按指定类型与形状生成值为0的张量,如:tf.zeros([2,3], tf.int32) ===> [[0 0 0][0 0 0]] |
tf.ones_like(input) | 生成一个和输入的张量一样形状和类型的0,如:tensor=[[1,2,3],[4,5,6]] tf.ones_like(tensor) ===> [[0 0 0][0 0 0]] |