张量操作篇
- 1 数据类型转换
- 1.1数据类型
- 1.2数据类型转换
- 2 张量操作
- 2.1 形状操作
- 2.2切片和合并
- 2.3 归约计算
- 2.4索引求取
1 数据类型转换
1.1数据类型
整型数据
代码 | 描述 |
tf.int8 | 8位整数 |
tf.int16 | 16位整数 |
tf.int32 | 32位整数 |
tf.int64 | 64位整数 |
tf.uint8 | 8位无符号整数。 |
tf.uint16 | 16位无符号整数。 |
浮点型数据
代码 | 描述 |
tf.float16 | 16位浮点数 |
tf.float32 | 32位浮点数 |
tf.float64 | 64位浮点数 |
tf.double | 等同于tf.float64 |
字符型
代码 | 描述 |
tf.string | 字符串 |
布尔型
代码 | 描述 |
tf.bool | 布尔型 |
复数型
代码 | 描述 |
tf.complex64 | 64位复数 |
tf.complex128 | 128位复数 |
1.2数据类型转换
操作 | 描述 |
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 |
2 张量操作
2.1 形状操作
操作 | 描述 |
tf.shape(input, name=None) | 返回数据的shape.ps: ‘t’ is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]] ,shape(t) ==> [2, 2, 3] |
tf.size(input, name=None) | 返回数据的元素数量 . ps: ‘t’ is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]]] ,size(t) ==> 12 |
tf.rank(input, name=None) | 返回tensor的rank注意:此rank不同于矩阵的rank,tensor的rank表示一个tensor需要的索引数目来唯一表示任何一个元素也就是通常所说的 “order”, “degree”或”ndims”.ps: ’t’ is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]] shape of tensor ‘t’ is [2, 2, 3] rank(t) ==> 3 |
tf.reshape(tensor, shape, name=None) | 改变tensor的形状,tensor ‘t’ is [1, 2, 3, 4, 5, 6, 7, 8, 9],tensor ‘t’ has shape [9] reshape(t, [3, 3]) ==> [[1, 2, 3],[4, 5, 6],[7, 8, 9]],如果shape有元素[-1],表示在该维度打平至一维,-1 将自动推导得为9:reshape(t, [2, -1]) ==> [[1, 1, 1, 2, 2, 2, 3, 3, 3],[4, 4, 4, 5, 5, 5, 6, 6, 6]] |
tf.expand_dim() | 增加数据的维度,# ‘t’ is a tensor of shape shape(expand_dims(t, 0)) ==> [1, 2],shape(expand_dims(t, 1)) ==> [2,1], shape(expand_dims(t, -1)) ==> [2, 1] |
tf.squeeze | 该函数返回一个张量,这个张量是将原始input中所有维度为1的那些维都删掉的结果 |
2.2切片和合并
操作 | 描述 |
tf.slice(input_, begin, size, name=None) | x=[[1,2,3],[4,5,6]] ,slice(x,begin,size) begin = [0,1] ,size = [2,1],输出[[2],[5]],对tensor进行分片。 |
tf.split(split_dim, num_split, value, name=’split’) | 沿着某一维度将tensor分离为num_split tensors‘value’ is a tensor with shape [5, 30],split0, split1, split2 = tf.split(1, 3, value),tf.shape(split0) ==> [5, 10] |
tf.concat(concat_dim, values, name=’concat’) | 沿着某一维度连结tensor t1 = [[1, 2, 3], [4, 5, 6]],t2 = [[7, 8, 9], [10, 11, 12]],tf.concat(0, [t1, t2]) ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],tf.concat(1, [t1, t2]) ==> [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]],如果想沿着tensor一新轴连结打包,那么可以:tf.concat(axis, [tf.expand_dims(t, axis) for t in tensors]),等同于tf.pack(tensors, axis=axis)。 |
tf.transpose(a, perm=None, name=’transpose’) | 调换tensor的维度顺序按照列表perm的维度排列调换tensor顺序,‘x’ is [[1 2 3],[4 5 6]],tf.transpose(x, perm=[1, 0]) ==> [[1 4],[2 5], [3 6]] |
tf.one_hot(indices, depth, on_value=None, off_value=None,axis=None, dtype=None, name=None) | indices = [0, 2, -1, 1],depth = 3#Then output is [4 x 3]: output =[ [1.0 0.0 0.0], [0.0 0.0 1.0], [0.0 0.0 0.0] ,[0.0 1.0 0.0] ] |
2.3 归约计算
操作 | 描述 |
tf.reduce_sum(input_tensor, reduction_indices=None,keep_dims=False, name=None) | 计算总和 |
tf.reduce_min(input_tensor,reduction_indices=None,keep_dims=False, name=None) | 求最小值 |
tf.reduce_max(input_tensor,reduction_indices=None,keep_dims=False, name=None) | 求最大值 |
tf.reduce_mean(input_tensor,reduction_indices=None,keep_dims=False, name=None) | 求平均值 |
2.4索引求取
操作 | 描述 |
tf.argmin(input, dimension, name=None) | 返回input最小值的索引index |
tf.argmax(input, dimension, name=None) | 返回input最大值的索引index |
tf.listdiff(x, y, name=None) | 返回x,y中不同值的索引 |
tf.where(input, name=None) | 具体下列例子,该式子需要重点掌握 |
tf.unique(x, name=None) | # tensor ‘x’ is [1, 1, 2, 4, 4, 4, 7, 8, 8] ,y idx = unique(x)y ==> [1, 2, 4, 7, 8] ,idx ==> [0, 0, 1, 2, 2, 2, 3, 4, 4] |
tf.where
理解:就是要根据条件找到你要的东西。
condition:条件,是一个boolean
x:数据
y:同x维度的数据。
返回,返回符合条件的数据。当条件为真,取x对应的数据;当条件为假,取y对应的数据
import tensorflow as tf
x = [[1,2,3],[4,5,6]]
y = [[7,8,9],[10,11,12]]
condition3 = [[True,False,False],
[False,True,True]]
condition4 = [[True,False,False],
[True,True,False]]
with tf.Session() as sess:
print(sess.run(tf.where(condition3,x,y)))
print(sess.run(tf.where(condition4,x,y)))
#结果一
[[1,8,9],[10,5,6]]
#结果二
[[1,8,9],[4,5,12]]