【深度学习_TensorFlow】张量排序、填充与复制、张量限幅

写在前面

这篇文章就将对tensor的一些基础操作进行最终讲解,下篇文章就开始学习神经网络,正式进入深度学习!


写在中间

一、张量排序( tf.sort()、tf.argsort()、tf.math.top_k() )

tf.sort (tensor, axis, direction)用于对张量中的值进行排序

  • tensor:表示要进行排序的张量。

  • axis:这是一个可选的参数,用于指定沿着哪个轴进行排序。如果 axis 为 None,则沿着最后一个轴进行排序。默认值为 -1。

  • direction:这是一个可选的参数,用于指定排序的方向。如果 directionASCENDING,则按照升序排序;如果为 DESCENDING,则按照降序排序。默认值为升序排列。


tf.argsort (tensor, axis, direction)用于对张量中的值进行排序并返回排序后的索引。

  • tensor: 一个 tensor,表示要进行排序的值。

  • axis: 可选参数,一个整数或一维整数张量,指定要对哪个轴进行排序。默认值为 -1,表示对最后一个轴进行排序。

  • direction: 这是一个可选的参数,用于指定排序的方向。如果 directionASCENDING,则按照升序排序;如果为 DESCENDING,则按照降序排序。默认值为升序排列。


tf.math.top_k(tensor, k, sorted)用于查找输入张量中数值最大的前几个元素及其索引。

  • tensor: 表示要进行排序的张量。

  • k: 一个整数,表示要找到数值最大的前几个元素。k 必须大于零。

  • sorted: 一个布尔值,默认为 True。如果为 True,则返回的结果按照值从高到低排序;如果为 False,则按照值从低到高排序。

返回值:包含两个 Tensor

  • values: 包含输入张量中数值最大的前 k 个元素。

  • indices: 包含输入张量中数值最大的前 k 个元素的索引。


示例

import tensorflow as tf
tensor = tf.random.uniform([3, 3], maxval=10, dtype=tf.int32)
print(tensor)  # 原张量
# [[5 4 0]
#  [1 3 9]
#  [3 9 4]]
tensor1 = tf.sort(tensor)
print(tensor1)  # 升序后张量
# [[0 4 5]
#  [1 3 9]
#  [3 4 9]]
tensor2 = tf.sort(tensor, direction='DESCENDING')
print(tensor2)  # 降序后张量
# [[5 4 0]
#  [9 3 1]
#  [9 4 3]]
index = tf.argsort(tensor)
print(index)  # 升序标记
# [[2 1 0]
#  [0 1 2]
#  [0 2 1]]

res = tf.math.top_k(tensor, 2)  # k = 2
print(res.indices, res.values)  # 较大值的的下标、前两个较大值
# [[0 1]
#  [2 1]
#  [1 2]]

# [[5 4]
#  [9 3]
#  [9 4]]

二、张量填充与复制(tf.pad()、tf.tile())

tf.pad(tensor, paddings, mode='CONSTANT', constant_values=0)

  • tensor: 需要添加填充的张量。

  • paddings: 一个二维张量,表示在 tensor 的四个边缘(上、下、左、右)添加的填充大小。

mode: 指定填充模式,参数可以取以下值:

  • 'CONSTANT':表示使用一个固定的常数值作为填充值。

  • 'REFLECT':表示使用反射填充。反射填充会将边缘值映射到填充区域的相应位置。例如,如果填充大小为 2,那么边缘的第一个值会映射到第二个填充值,边缘的第二个值会映射到第一个填充值。

  • 'SYMMETRIC':表示使用对称填充。对称填充会将边缘值映射到填充区域的中心。例如,如果填充大小为 2,那么边缘的第一个值会映射到第二个填充值的中间位置,边缘的第二个值会映射到第一个填充值的中间位置。

  • constant_values: 当 mode'CONSTANT' 时,此参数指定填充值。默认值为 0。


tf.tile(tensor, multiples) 用于将一个张量沿特定轴多次复制。

  • tensor:需要进行复制的张量。

  • multiples:一个与tensor 张量形状相同的一维整数张量,表示 tensor 张量在各个轴上需要复制的次数。


示例

import tensorflow as tf
# 创建全为1的 3×3 张量
tensor = tf.ones([3, 3])
print(tensor)
# [[1. 1. 1.]
#  [1. 1. 1.]
#  [1. 1. 1.]]

# 在行、列维度的上下、左右分别填充默认数字0
tensor1 = tf.pad(tensor, [[1, 1], [1, 1]])
print(tensor1)
# [[0. 0. 0. 0. 0.]
#  [0. 1. 1. 1. 0.]
#  [0. 1. 1. 1. 0.]
#  [0. 1. 1. 1. 0.]
#  [0. 0. 0. 0. 0.]]

# 对原张量,在第一个维度上不复制,第二个维度上复制2倍
tensor2 = tf.tile(tensor, [1, 2])
print(tensor2)
# [[1. 1. 1. 1. 1. 1.]
#  [1. 1. 1. 1. 1. 1.]
#  [1. 1. 1. 1. 1. 1.]]

三、张量限幅(tf.clip_by_value)

tf.clip_by_value(tensor, clip_value_min, clip_value_max) 用于将张量中的值限制在一个指定的范围内。

  • tensor: 一个 TensorFlow 张量。

  • clip_value_min: 指定允许的最小值。

  • clip_value_max: 指定允许的最大值。


示例

import tensorflow as tf
tensor = tf.range(10)
print(tensor)
# [0 1 2 3 4 5 6 7 8 9]

# 将所有值限制在最小值与最大值之间,小于最小值的返回最小值,大于最大值的返回最大值
tensor1 = tf.clip_by_value(tensor, 2, 8)
print(tensor1)
# [2 2 2 3 4 5 6 7 8 8]

写在最后

点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!

你可能感兴趣的:(#,TensorFlow深度学习,深度学习,tensorflow,人工智能)