关于tensoeflow的张量(tensor)
tensorflow程序使用张量(tensor)数据结构来代表所有的数据,计算图中、操作间传递的数据都是张量(tensor)
一、其实张量(tensor)是一个n维的数组或者列表,每个张量(tensor)中包含有类型、阶和形状,下面分别介绍这三种
1、张量(tensor)的类型(type)
tensoe类型 | 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位浮点数组成的复数:实部和虚部 |
2、张量(tensor)的阶(rank)
传统上我们说一个n*n的矩阵(方阵)阶数是n阶。但是张量(tensor)和矩阵在阶数表达的不是同一个概念,在张量(tensor)中是看有几层括号就表示是几维。例如:[[1,2,3],[1,2,3],[1,2,3]]方阵如果按矩阵的思想说它是三维的,但是如果按张量(tensor)来说,它有两层括号,所以它是两阶的。下面我们举例说明:
阶(rank) | 实例 | 例子 |
0 | 标量(只有大小) | b = 2 |
1 | 向量(有大小和方向) | b = [1,2] |
2 | 矩阵(数据表) | b = [[1,2],[1,2]] |
3 | 三阶张量 | b = [[1,2,3],[1,2,3],[1,2,3]] |
n | n阶张量 | b = [[[[[...[[1],[1]]...]]]]] |
3、形状(shape)
张量的形状(shape)用于描述张量内部的组织关系。例如b = [[1,2,3],[1,2,3]]它的shape是(2,3)。
二、张量的相关操作
1、类型转换
函数 | 描述 |
tf.string_to_number (string_tensor, out_type=None, name=None) | 把字符串转为数字 |
tf.to_double(x, name=’ToDouble’) | 转为64位浮点类型–float64 |
tf.to_float(x, name=’ToFloat’) | 转为32位浮点类型–float32 |
tf.to_int32(x, name=’ToInt32’) | 转为32位整型–int32 |
tf.to_int64(x, name=’ToInt64’) | 转为64位整型–int64 |
tf.cast(x, dtype, name=None) | 将x或者x.values转换为dtype所指定的类型 |
例如:x = tf.Variable(1.0)
tf.cast(x,tf.int32)
结果是x变成了有符号整形,既x = 1。
2、数值操作
(1)、创建固定值张量(tensor)
函数 | 描述 |
tf.zeros(shape, dtype=tf.float32, name=None) | 创建所有元素设置为零的张量。此操作返回一个dtype具有形状shape和所有元素设置为零的类型的张量。 |
tf.ones(shape, dtype=tf.float32, name=None) | 创建一个所有元素设置为1的张量。此操作返回一个类型的张量,dtype形状shape和所有元素设置为1。 |
tf.zeros_like(tensor, dtype=None, name=None) | 给tensor定单张量(),此操作返回tensor与所有元素设置为零相同的类型和形状的张量。 |
tf.ones_like(tensor, dtype=None, name=None) | 给tensor定单张量(),此操作返回tensor与所有元素设置为1 相同的类型和形状的张量。 |
tf.fill(dims, value, name=None) | 创建一个填充了标量值的张量。此操作创建一个张量的形状dims并填充它value。 |
tf.constant(value, dtype=None, shape=None, name= None) | 创建一个常数张量。 |
(2)、创建随机张量(tensor)
函数 | 描述 |
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) | 正态分布随机数,均值为mean,标准差为stddev |
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) |
截断正态分布随机数,均值为mean,标准差为stddev 只保留[mean - 2*stddev,mean + 2*stddev]范围内的随机数 |
a = tf.random_uniform(shape, minval=0, maxval=None, dtype=tf.float32, seed=None, name=None) | 均匀分布随机数,范围是[minval,maxval] |
tf.set_random_crop(value,size,seed=None,name=None) | 将输入值value按照size尺寸随机剪辑 |
tf.set_random_seed(seed) | 设置随机数种子 |
(3)、创建等差张量(tensor)
函数 | 描述 |
tf.linspace(start,stop,num,name=None) | 在[start,stop]范围内产生num个数,构成等差数列(start和stop不能用浮点数,只能用整数) |
tf.range(start,limit=None,delta=1,name=None) | 在[start,limit]范围内以步长delta产生等差数列,不包括limit |
3、形状变换
函数 | 描述 |
tf.shape(input, name=None) | 返回张量的形状,input可以是张量,也可以是数组或者列表 |
tf.size(input, name=None) | 返回一个张量,其内容是输入数据inpute的元素数量 |
tf.rank(input, name=None) | 返回一个张量,其内容是输入数据inpute的维度或者阶(rank,外层括号的数量) |
tf.reshape(input, shape, name=None) | 返回一个新的张量,新张量的形状按shape指定形状进行变化 |
tf.squeeze(input, squeeze_dims=None, name=None) | 将dim指定的维度去掉(dim指定的维度为1,不为1就会报错) |
tf.expand_dims(input, dim, name=None) |
插入维度1,进入tensor,dim是指定的维度,如果超过会报错 |
4、数据操作
函数 | 描述 |
tf.slice(input, begin, size, name = None) |
作用:这个函数的作用是从输入数据input中提取出一块切片 |
tf.split(value,num_or_size_splits,axis=0, num=None,name='split') |
沿着维度axis,把value分离为num_or_size_splits个张量 |
tf.concat( values, axis, name='concat') |
沿着维度axis,把value拼接起来 例如: t1 = [[1, 2, 3], [4, 5, 6]] 结果:[[1, 2, 3], [4, 5, 6],[7, 8, 9], [10, 11, 12]]
|
tf.stack(values,axis=0) | 将两个N维张量沿着axis组合成一个N+1维的张量 |
tf.batch_gather(params, indices, validate_indices=None,name=None) |
合并索引indices所指示的params中的切片 例如:y = tf. constant([0.0,1.0,-2.0]) t = tf. constant(y,[2,0]) sess = tf.Session() t2 = sess.run([t]) print(t2)#输出[array([-2.0,0.0],dtype = float32)] |
tf.one_hot(indices, depth, on_value=None, off_value=None, axis=None, dtype=None, name=None) |
生成符合onehot编码的张量 indices:要生成的张量 depth:在depth长度的数组中,哪个索引的值为onehot值 on_value:为onehot值时,该值为多少 off_value:非onehot值时,该值为多少 |
tf.count_nonzero(input_tensor,axis=None,keep_dims=False,dtype=tf.int64,name=None,reduction_indices=None) |
统计非零个数 |
至此关于张量(tensor)常用的几个函数写完了,写这个博客的目的只是为了方便查阅,如果哪个函数在使用中有什么不理解的地方请百度搜索更详细的解释。