[TensorFlow系列-11]:TensorFlow基础 - 张量元素的排序

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[TensorFlow系列-11]:TensorFlow基础 - 张量元素的排序相关的知识,希望对你有一定的参考价值。

 作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119643418


目录

第1章 Tensor运算概述

1.1 概述:

1.3  “in place“运算 :不支持

1.4 Tensor的广播机制: 不同维度的张量运算

1.5 环境准备

1.6 排序运算概述

第2章 排序:tf.sort(values, axis=-1, direction='ASCENDING')

第3章 排序: tf.argsort(values, axis=-1, direction='ASCENDING')

第4章 获取前K个最值:tf.math.top_k(input, k=1, sorted=True,)

第5章 取第K个最大值:kthvalue(不支持)

第6章 打乱张量元素:tf.random.shuffle(value, seed=None)


第1章 Tensor运算概述

https://tensorflow.google.cn/api_docs/python/tf

1.1 概述:

Tensorflow提供了大量的张量运算,基本上可以对标Numpy多维数组的运算,以支持对张量的各种复杂的运算。

这些操作运算中大多是对数组中每个元素执行相同的函数运算,并获得每个元素函数运算的结果序列,这些序列生成一个新的同维度的数组。

1.2 运算分类

(1)算术运算:加、减、系数乘、系数除

(2)函数运算:sin,cos

(3)取整运算:上取整、下取整

(4)统计运算:最大值、最小值、均值

(5)比较运算:大于,等于,小于、排序

(6)线性代数运算:矩阵、点乘、叉乘

1.3  “in place“运算 :不支持

1.4 Tensor的广播机制: 不同维度的张量运算

1.5 环境准备

#环境准备
import numpy as np
import tensorflow as tf
print("hello world")
print("tensorflow version:", tf.__version__)

1.6 排序运算概述

(1) sort:排序

  • 可以按照不同的张量维度进行排序,有axis指定。
  • 可以按照升序或降序排序,有descending进行排序。

(2)topk:获取前K个元素。

  • k:要获取的元素的个数
  • axis:指定dim方向,而不是全部元素
  • sorted:向量是否已经排序,如果未排序,该函数先对张量进行排序。

(3)kthvalue:获取第K个最小值

  • k:指定待获取元素的序号
  • axis:指定操作的张量维度方向

第2章 排序:tf.sort(values, axis=-1, direction='ASCENDING')

# 代码示例:

# 排序sort

a = tf.constant([[5,4,6],[6,3,4]])  
print ("源数据:")
print (a)
print ('\\n')

print("\\n排序:默认")
print(tf.sort(a))

print("\\n排序:axis=0")
b = tf.sort(a,axis=0, direction="ASCENDING")
print(b)

print("\\n排序:axis=1")
b = tf.sort(a,axis=1, direction="DESCENDING")
print(b)
#输出:

源数据:
tf.Tensor(
[[5 4 6]
 [6 3 4]], shape=(2, 3), dtype=int32)



排序:默认
tf.Tensor(
[[4 5 6]
 [3 4 6]], shape=(2, 3), dtype=int32)

排序:axis=0
tf.Tensor(
[[5 3 4]
 [6 4 6]], shape=(2, 3), dtype=int32)

排序:axis=1
tf.Tensor(
[[6 5 4]
 [6 4 3]], shape=(2, 3), dtype=int32)

备注:

  • 默认是按照axis= 0的方向进行排序
  • 默认是按照升序排序
  • 排序后,不影响源张量的数据

第3章 排序: tf.argsort(values, axis=-1, direction='ASCENDING')

# 代码示例

# 排序argsort

a = tf.constant([[5,4,6],[6,3,4]])  
print ("源数据:")
print (a)

print("\\n排序:默认")
print(tf.argsort(a))

print("\\n排序:axis=0")
b = tf.argsort(a,axis=0, direction="ASCENDING")
print(b)

print("\\n排序:axis=1")
b = tf.argsort(a,axis=1, direction="DESCENDING")
print(b)
# 输出

源数据:
tf.Tensor(
[[5 4 6]
 [6 3 4]], shape=(2, 3), dtype=int32)

排序:默认
tf.Tensor(
[[1 0 2]
 [1 2 0]], shape=(2, 3), dtype=int32)

排序:axis=0
tf.Tensor(
[[0 1 1]
 [1 0 0]], shape=(2, 3), dtype=int32)

排序:axis=1
tf.Tensor(
[[2 0 1]
 [0 2 1]], shape=(2, 3), dtype=int32)

第4章 获取前K个最值:tf.math.top_k(input, k=1, sorted=True,)

# 代码示例:

# topk: 获取最后一个维度上元素序列中第K个最大值
# Finds values and indices of the `k` largest entries for the last dimension.
# the last dimension:最内层维度,
a = tf.constant([[2,4,6,12,8,10],[1,1,5,11,11,9]])  
print ("源数据:")
print (a)

print ("\\n默认参数:")
b = tf.math.top_k(a,2)
print(b)

print ("\\n取K个最大值:")
# sorted:对数据结果排序 
b = tf.math.top_k(a,k=2, sorted=True)
print(b)

print ("\\n取K个最大值:")
# sorted:对数据结果不排序
b = tf.math.top_k(a,k=2, sorted=False)
print(b)
输出:

源数据:
tf.Tensor(
[[ 2  4  6 12  8 10]
 [ 1  1  5 11 11  9]], shape=(2, 6), dtype=int32)

默认参数:
TopKV2(values=<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[12, 10],
       [11, 11]])>, indices=<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[3, 5],
       [3, 4]])>)

取K个最大值:
TopKV2(values=<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[12, 10],
       [11, 11]])>, indices=<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[3, 5],
       [3, 4]])>)

取K个最大值:
TopKV2(values=<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[10, 12],
       [11, 11]])>, indices=<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[5, 3],
       [4, 3]])>)

备注:

  • 对于值相同的元素,依然参与排序,并不剔除值相同的元素。
  • 默认是k个最大值
  • 操作后,对源张量数据无影响

第5章 取第K个最大值:kthvalue(不支持)

第6章 打乱张量元素:tf.random.shuffle(value, seed=None)

#代码示例:

print("按随机的方式打乱一维张量")
print("打乱前")
a = tf.constant([2,4,6,8,10,12])  
print(a)
print("打乱后")
b= tf.random.shuffle(a)
print(b)

print("\\n按随机的方式打乱二维张量")
print("打乱前")
a = tf.constant([[2,4,6,8,10,12],[3,5,7,9,1,13]])  
print(a)
print("打乱后")
b= tf.random.shuffle(a)
print(b)
输出:

打乱一维张量
打乱前
tf.Tensor([ 2  4  6  8 10 12], shape=(6,), dtype=int32)
打乱后
tf.Tensor([12  8  6  4  2 10], shape=(6,), dtype=int32)

打乱二维张量
打乱前
tf.Tensor(
[[ 2  4  6  8 10 12]
 [ 3  5  7  9  1 13]], shape=(2, 6), dtype=int32)
打乱后
tf.Tensor(
[[ 3  5  7  9  1 13]
 [ 2  4  6  8 10 12]], shape=(2, 6), dtype=int32)


作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119643418

以上是关于[TensorFlow系列-11]:TensorFlow基础 - 张量元素的排序的主要内容,如果未能解决你的问题,请参考以下文章

使用亚马逊的云服务器EC2做深度学习配置TensorFlow

模块“tensorflow”没有属性“GPUOptions”

无法安装旧版本的 tensorflow

Win10上安装TensorFlow(官方文档翻译)

安装带有 SYCL 支持的 TensorFlow

TensorBoard的使用(结合线性模型)