写在前面
这篇文章就将对tensor的一些基础操作进行最终讲解,下篇文章就开始学习神经网络,正式进入深度学习!
写在中间
一、张量排序( tf.sort()、tf.argsort()、tf.math.top_k() )
tf.sort (tensor, axis, direction)
用于对张量中的值进行排序
-
tensor
:表示要进行排序的张量。 -
axis
:这是一个可选的参数,用于指定沿着哪个轴进行排序。如果axis
为 None,则沿着最后一个轴进行排序。默认值为 -1。 -
direction
:这是一个可选的参数,用于指定排序的方向。如果direction
为ASCENDING
,则按照升序排序;如果为DESCENDING
,则按照降序排序。默认值为升序排列。
tf.argsort (tensor, axis, direction)
用于对张量中的值进行排序并返回排序后的索引。
-
tensor
: 一个 tensor,表示要进行排序的值。 -
axis
: 可选参数,一个整数或一维整数张量,指定要对哪个轴进行排序。默认值为 -1,表示对最后一个轴进行排序。 -
direction
: 这是一个可选的参数,用于指定排序的方向。如果direction
为ASCENDING
,则按照升序排序;如果为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]
写在最后
👍🏻点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!