张量操作篇

  • 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]]