Tensorflow2

合并与分割

tf.concat

tf.concat可以实现拼接操作.
格式:

  1. tf.concat(
  2. values, axis, name='concat'
  3. )

参数:

  • values: 一个 tensor 或 tensor list
  • axis: 操作的维度
  • name: 数据名称, 默认为 “concat

例子:

  1. part_1 = tf.zeros([5, 3])
  2. print(part_1)
  3. part_2 = tf.ones([5, 3])
  4. print(part_2)
  5. # 竖向拼接
  6. result_1 = tf.concat([part_1, part_2], axis=0)
  7. print(result_1)
  8. # 横向拼接
  9. result_2 = tf.concat([part_1, part_2], axis=1)
  10. print(result_2)

输出结果:

  1. tf.Tensor(
  2. [[0. 0. 0.]
  3. [0. 0. 0.]
  4. [0. 0. 0.]
  5. [0. 0. 0.]
  6. [0. 0. 0.]], shape=(5, 3), dtype=float32)
  7. tf.Tensor(
  8. [[1. 1. 1.]
  9. [1. 1. 1.]
  10. [1. 1. 1.]
  11. [1. 1. 1.]
  12. [1. 1. 1.]], shape=(5, 3), dtype=float32)
  13. tf.Tensor(
  14. [[0. 0. 0.]
  15. [0. 0. 0.]
  16. [0. 0. 0.]
  17. [0. 0. 0.]
  18. [0. 0. 0.]
  19. [1. 1. 1.]
  20. [1. 1. 1.]
  21. [1. 1. 1.]
  22. [1. 1. 1.]
  23. [1. 1. 1.]], shape=(10, 3), dtype=float32)
  24. tf.Tensor(
  25. [[0. 0. 0. 1. 1. 1.]
  26. [0. 0. 0. 1. 1. 1.]
  27. [0. 0. 0. 1. 1. 1.]
  28. [0. 0. 0. 1. 1. 1.]
  29. [0. 0. 0. 1. 1. 1.]], shape=(5, 6), dtype=float32)

tf.stack

tf.stack可以创建一个新的维度来合并两个张量.
格式:

  1. tf.stack(
  2. values, axis=0, name='stack'
  3. )

参数:

  • values: 一个 tensor list
  • axis: 操作的维度
  • name: 数据名称, 默认为 “stack

例子:

  1. part_1 = tf.zeros([5, 3])
  2. print(part_1)
  3. part_2 = tf.ones([5, 3])
  4. print(part_2)
  5. # 头拼接
  6. result_1 = tf.stack([part_1, part_2], axis=0)
  7. print(result_1)
  8. # 尾拼接
  9. result_2 = tf.stack([part_1, part_2], axis=2)
  10. print(result_2)

输出结果:

  1. tf.Tensor(
  2. [[0. 0. 0.]
  3. [0. 0. 0.]
  4. [0. 0. 0.]
  5. [0. 0. 0.]
  6. [0. 0. 0.]], shape=(5, 3), dtype=float32)
  7. tf.Tensor(
  8. [[1. 1. 1.]
  9. [1. 1. 1.]
  10. [1. 1. 1.]
  11. [1. 1. 1.]
  12. [1. 1. 1.]], shape=(5, 3), dtype=float32)
  13. tf.Tensor(
  14. [[[0. 0. 0.]
  15. [0. 0. 0.]
  16. [0. 0. 0.]
  17. [0. 0. 0.]
  18. [0. 0. 0.]]
  19. [[1. 1. 1.]
  20. [1. 1. 1.]
  21. [1. 1. 1.]
  22. [1. 1. 1.]
  23. [1. 1. 1.]]], shape=(2, 5, 3), dtype=float32)
  24. tf.Tensor(
  25. [[[0. 1.]
  26. [0. 1.]
  27. [0. 1.]]
  28. [[0. 1.]
  29. [0. 1.]
  30. [0. 1.]]
  31. [[0. 1.]
  32. [0. 1.]
  33. [0. 1.]]
  34. [[0. 1.]
  35. [0. 1.]
  36. [0. 1.]]
  37. [[0. 1.]
  38. [0. 1.]
  39. [0. 1.]]], shape=(5, 3, 2), dtype=float32)

tf.unstack

tf.unstack是一个矩阵分解函数.格式:

  1. # unstack
  2. tf.unstack(
  3. value, num=None, axis=0, name='unstack'
  4. )

参数:

  • values: 一个 tensor, 维度大于 0
  • num: 轴的长度
  • axis: 操作的维度
  • name: 数据名称, 默认为 “unstack”

例子:

  1. a = tf.stack([tf.zeros([5, 3]), tf.ones([5, 3])], axis=0)
  2. print(a)
  3. b = tf.unstack(a, axis=0)
  4. print(b)

输出结果:

  1. tf.Tensor(
  2. [[[0. 0. 0.]
  3. [0. 0. 0.]
  4. [0. 0. 0.]
  5. [0. 0. 0.]
  6. [0. 0. 0.]]
  7. [[1. 1. 1.]
  8. [1. 1. 1.]
  9. [1. 1. 1.]
  10. [1. 1. 1.]
  11. [1. 1. 1.]]], shape=(2, 5, 3), dtype=float32)
  12. [<tf.Tensor: shape=(5, 3), dtype=float32, numpy=
  13. array([[0., 0., 0.],
  14. [0., 0., 0.],
  15. [0., 0., 0.],
  16. [0., 0., 0.],
  17. [0., 0., 0.]], dtype=float32)>, <tf.Tensor: shape=(5, 3), dtype=float32, numpy=
  18. array([[1., 1., 1.],
  19. [1., 1., 1.],
  20. [1., 1., 1.],
  21. [1., 1., 1.],
  22. [1., 1., 1.]], dtype=float32)>]

tf.split

tf.split()可以把一个张量划分为几个子张量.
格式:

  1. tf.split(
  2. value, num_or_size_splits, axis=0, num=None, name='split'
  3. )

参数:

  • value: 待切分的张量
  • num_or_size_splits: 切成几份
  • axis: 操作的维度
  • num: num_or_size_splits 不能实现的情况下使用
  • name: 数据名称, 默认为 “split

例子:

  1. # split
  2. a = tf.stack([tf.zeros([5, 3]), tf.ones([5, 3])], axis=0)
  3. print(a)
  4. b = tf.split(a, 2)
  5. print(b)

输出结果:

  1. tf.Tensor(
  2. [[[0. 0. 0.]
  3. [0. 0. 0.]
  4. [0. 0. 0.]
  5. [0. 0. 0.]
  6. [0. 0. 0.]]
  7. [[1. 1. 1.]
  8. [1. 1. 1.]
  9. [1. 1. 1.]
  10. [1. 1. 1.]
  11. [1. 1. 1.]]], shape=(2, 5, 3), dtype=float32)
  12. [<tf.Tensor: shape=(1, 5, 3), dtype=float32, numpy=
  13. array([[[0., 0., 0.],
  14. [0., 0., 0.],
  15. [0., 0., 0.],
  16. [0., 0., 0.],
  17. [0., 0., 0.]]], dtype=float32)>, <tf.Tensor: shape=(1, 5, 3), dtype=float32, numpy=
  18. array([[[1., 1., 1.],
  19. [1., 1., 1.],
  20. [1., 1., 1.],
  21. [1., 1., 1.],
  22. [1., 1., 1.]]], dtype=float32)>]

数据统计

tf.norm

tf.norm可以计算向量, 矩阵, 张量的范数.
格式:

  1. tf.norm(
  2. tensor, ord='euclidean', axis=None, keepdims=None, name=None
  3. )

参数:

  • tensor: 输入的张量
  • ord: 范数的顺序
  • axis: 操作的维度
  • keep_dims: 如果为 True, 则 axis 中指定的轴将保持为大小 1
  • name: 数据名称

例子:

  1. a = tf.fill([2, 2], 2.0)
  2. print(a)
  3. # sqrt(2^2 * 4) = sqrt(16) = 4
  4. b = tf.norm(a)
  5. print(b)
  6. # [2 + 2, 2 + 2] = [4, 4]
  7. c = tf.norm(a, ord=1, axis= 0)
  8. print(c)
  9. # [sqrt(2^2 + 2^2), sqrt(2^2 + 2^2)] = [sqrt(8), sqrt(8)]
  10. d = tf.norm(a, ord=2, axis= 0)
  11. print(d)

输出结果:

  1. tf.Tensor(
  2. [[2. 2.]
  3. [2. 2.]], shape=(2, 2), dtype=float32)
  4. tf.Tensor(4.0, shape=(), dtype=float32)
  5. tf.Tensor([4. 4.], shape=(2,), dtype=float32)
  6. tf.Tensor([2.828427 2.828427], shape=(2,), dtype=float32)

reduce_min/max/mean

计算一个张量各个维度上元素的最小值 / 最大值 / 平均值.
格式:

  1. tf.math.reduce_min / reduce_max / reduce_mean(
  2. input_tensor, axis=None, keepdims=False, name=None
  3. )

参数:

  • input_tensor: 传入的张量
  • axis: 维度, 默认计算所有维度
  • keepdims: 如果为真保留维度, 默认为 False
  • name: 数据名称

例子:

  1. a = tf.reshape(tf.range(9), [3, 3])
  2. print(a)
  3. min = tf.reduce_min(a)
  4. print(min)
  5. max = tf.reduce_max(a)
  6. print(max)

输出结果:

  1. tf.Tensor(
  2. [[0 1 2]
  3. [3 4 5]
  4. [6 7 8]], shape=(3, 3), dtype=int32)
  5. tf.Tensor(0, shape=(), dtype=int32)
  6. tf.Tensor(8, shape=(), dtype=int32)

argmax / argmin

tf.argmax/tf.argmin可以找到最大 / 最小值所在的索引 (index).
格式:

  1. tf.math.argmax(
  2. input, axis=None, output_type=tf.dtypes.int64, name=None
  3. )

参数:

  • input: 输入
  • axis: 操作的维度
  • output_type: 输出数据类型, 默认为 int64
  • name: 数据名称

例子:

  1. # argmax / argmin
  2. a = tf.reshape(tf.range(9), [3, 3])
  3. print(a)
  4. max = tf.argmax(a)
  5. print(max)
  6. min = tf.argmin(a)
  7. print(min)

输出结果:

  1. tf.Tensor(
  2. [[0 1 2]
  3. [3 4 5]
  4. [6 7 8]], shape=(3, 3), dtype=int32)
  5. tf.Tensor([2 2 2], shape=(3,), dtype=int64)
  6. tf.Tensor([0 0 0], shape=(3,), dtype=int64)

tf.equal

tf.equal可以判断两个张量是否相等, 返回 True / False.
格式:

  1. tf.math.equal(
  2. x, y, name=None
  3. )

例子:

  1. a = tf.zeros(5, dtype=tf.float32)
  2. print(a)
  3. b = tf.range(5, dtype=tf.float32)
  4. print(b)
  5. print(tf.equal(a, b))

输出结果:

  1. tf.Tensor([0. 0. 0. 0. 0.], shape=(5,), dtype=float32)
  2. tf.Tensor([0. 1. 2. 3. 4.], shape=(5,), dtype=float32)
  3. tf.Tensor([ True False False False False], shape=(5,), dtype=bool)

tf.unique

tf.unique可以找出张量中不重复的值
格式:

  1. tf.unique(
  2. x, out_idx=tf.dtypes.int32, name=None
  3. )

参数:

  • input: 输入
  • output_type: 输出数据类型, 默认为 int32
  • name: 数据名称

例子:

  1. a = tf.range(5)
  2. print(tf.unique(a))
  3. b = tf.constant([4, 2, 2, 4, 3])
  4. print(tf.unique(b))

输出结果:

  1. Unique(y=<tf.Tensor: shape=(5,), dtype=int32, numpy=array([0, 1, 2, 3, 4])>, idx=<tf.Tensor: shape=(5,), dtype=int32, numpy=array([0, 1, 2, 3, 4])>)
  2. Unique(y=<tf.Tensor: shape=(3,), dtype=int32, numpy=array([4, 2, 3])>, idx=<tf.Tensor: shape=(5,), dtype=int32, numpy=array([0, 1, 1, 0, 2])>)