数据类型转换
-
tf.to_float
的方式转换到特定的数据类型。
tf.string_to_number(string_tensor, out_type=None, name=None)
tf.to_double(x, name='ToDouble')
tf.to_float(x, name='ToFloat')
tf.to_int32(x, name='ToInt32')
tf.to_int64(x, name='ToInt64')
-
tf.cast(x, dtype, name=None)
将x变成一个新的数据类型
# tensor `a` is [1.8, 2.2], dtype=tf.float
tf.cast(a, tf.int32) ==> [1, 2] # dtype=tf.int32
形状和信息的获取
-
tf.rank(input, name=None)
:返回 Tensor 的维度(轴)的个数,类似于 Numpy 中的 ndim 属性
-
tf.size(input, name=None)
:返回 tensor 中元素的总数
进行tensor的维度的操作
-
tf.expand_dims(input,axis=None,name=None,)
:扩展某一维,axis = -1表示扩展最后一维
-
tf.squeeze(input,axis=None,name=None,)
:若 axis 没指定,则移除 shape 中所有的 1,若指定某个轴,则只移除相应位置shape 中的 1。
-
tf.concat(values, axis, name='concat')
:沿着某坐标轴连接 N 个张量(Numpy 连接传入的是 tuple, 此处为 list )
t1 = [[1, 2, 3], [4, 5, 6]]
t2 = [[7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 0) ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 1) ==> [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]
-
tf.stack(values, axis, name='concat')
:维度+1
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
b = np.array([[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]])
# Note: 做 stack 之前把 a, b 的维度+1变为(1, 3, 3)
# 沿着 x 轴(垂直向下)连接 a, b 的第 0 维元素
sess.run(tf.stack([a,b], axis=0))
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]]])
# 沿着 y 轴(水平向右)连接 a, b 的第 1 维元素
sess.run(tf.stack([a,b], axis=1))
array([[[ 1, 2, 3],
[ 2, 4, 6]],
[[ 4, 5, 6],
[ 8, 10, 12]],
[[ 7, 8, 9],
[14, 16, 18]]])
# 沿着 z 轴(竖直向上)连接 a, b 的第 2 维元素
sess.run(tf.stack([a,b], axis=2))
array([[[ 1, 2],
[ 2, 4],
[ 3, 6]],
[[ 4, 8],
[ 5, 10],
[ 6, 12]],
[[ 7, 14],
[ 8, 16],
[ 9, 18]]])
# 改变 Tensor 的形状
tf.reshape(tensor, shape, name=None)
# Flatten:令 shape=[-1] 即可
# Reshape:shape 乘积不变即可,当某一维传入-1时,它会自动推得此维度的大小
# 转置
tf.transpose(a, perm=None, name='transpose')
# 返回 tensor 各个维度的大小
tf.shape(input, name=None)
# 't' is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]]
sess.run(tf.shape(t)) ==> array([2, 2, 3], dtype=int32) # 必须要 run 才能得出结果
# 亦可以使用 TF 变量对象 Var 的get_shape() 方法来实现Var.get_shape()
# 返回 tensor 中元素的总数
tf.size(input, name=None)
# 返回 Tensor 的维度(轴)的个数,类似于 Numpy 中的 ndim 属性
tf.rank(input, name=None)
# inserts a dimension of 1 into a tensor's shape
tf.expand_dims(
input,
axis=None,
name=None,
)
# 例1,'t' is a tensor of shape [2]
tf.shape(tf.expand_dims(t, 0)) # [1, 2]
tf.shape(tf.expand_dims(t, 1)) # [2, 1]
tf.shape(tf.expand_dims(t, -1)) # [2, 1],支持负索引
# 例2,'t2' is a tensor of shape [2, 3, 5]
tf.shape(tf.expand_dims(t2, 0)) # [1, 2, 3, 5], make it a batch of 1 image
tf.shape(tf.expand_dims(t2, 2)) # [2, 3, 1, 5]
tf.shape(tf.expand_dims(t2, 3)) # [2, 3, 5, 1]
# 若 axis 没指定,则移除 shape 中所有的 1,若指定某个轴,则只移除相应位置shape 中的 1
tf.squeeze(
input,
axis=None,
name=None,
)
# 例1,'t' is a tensor of shape [1, 2, 1, 3, 1, 1]
tf.shape(tf.squeeze(t)) # [2, 3]
# 例2, remove specific size 1 dimensions
tf.shape(tf.squeeze(t, axis=[2, 4])) # [1, 2, 3, 1]
# 其它
tf.broadcast_dynamic_shape
tf.broadcast_static_shape
tf.shape_n
tf.meshgrid
-
tf.gather(params, indices, axis=0)
:将params按照indices收集
-
tf.one_hot(indices, depth, on_value=1, off_value=0, axis=-1, dtype=None, name=None)
:将 indices 中的每个元素 j 扩展成一个深度为 depth 的向量,输出维度+1。
tf.pad(tensor, paddings, mode='CONSTANT', name=None)
tf.pad(tensor, paddings, mode='CONSTANT', name=None)
paddings: is an integer tensor with shape [n, 2],n是 tensor 的维度
For example:
# 't' is [[1, 2, 3], [4, 5, 6]].
# 'paddings' is [[1, 1,], [2, 2]].
# paddings[0, 0/1]: 沿着第 0 维(x轴)在 tensor 上方/下方补 1 圈零
# paddings[1, 0/1]: 沿着第 1 维(y轴)在 tensor 左方/右方补 2 圈零
tf.pad(t, paddings, "CONSTANT") ==> [[0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 2, 3, 0, 0],
[0, 0, 4, 5, 6, 0, 0],
[0, 0, 0, 0, 0, 0, 0]]
-
tf.tile(input,multiples,name= None)
:表示在multiples指定的维度上进行扩张多少倍
a = tf.tile([1,2,3],[2])# 表示把第0维扩展2倍
b = tf.tile([[1,2],
[3,4],
[5,6]],[2,3])#表示把第0维扩展2倍,第1维扩展3倍。
with tf.Session() as sess:
print(sess.run(a))
print(sess.run(b))
>>[1 2 3 1 2 3]
[[1 2 1 2 1 2]
[3 4 3 4 3 4]
[5 6 5 6 5 6]
[1 2 1 2 1 2]
[3 4 3 4 3 4]
[5 6 5 6 5 6]]