[TensorFlow系列-11]:TensorFlow基础 - 张量元素的排序
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[TensorFlow系列-11]:TensorFlow基础 - 张量元素的排序相关的知识,希望对你有一定的参考价值。
作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119643418
目录
第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,)
第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