tensorflow2的一些常用API(维度变换、索引切片、广播机制、分割合并、数据统计等)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

1.将数据集打散并依旧保留对应标签:

idx = tf.range(10)
idx = tf.random.shuffle(idx)
a = tf.gather(a, axis= , idx)
b = tf.gather(b, axis= , idx)

2.通过转置来改变tensor的content:

a = tf.random.normal([4, 28, 28, 3]) # [b, w, h, c]

# 我们需要[b, h, w, c]
a = tf.transpose(a, [0, 2, 1, 3])

3.增加,合并,减少维度:

a = tf.random.normal([4, 28, 28, 3])
b = tf.random.normal([4, 28, 28, 3])
# 增加一个维度
a = tf.expand_dims(a, axis=0) # axis正负皆可只要放对位置就行
b = tf.expand_dims(b, axis=0)
# 然后我们可以通过concat合并
c = tf.concat([a, b] , axis=0) # c.shape=[2, 4, 28, 28, 3]
# 减少维度(只能压缩为1的维度)
a = tf.random.normal([1, 28, 28, 1])
a = tf.squeeze(a) # a.shape = [28, 28]
a = tf.squeeze(a, axis=0) # a.shape = [28, 28, 1]
#  同样axis也可以为负
a = tf.squeeze(a, axis=-4) # a.shape = [28, 28, 1]

4. tensor的广播机制

不同维度的数据不能相加,因此经常需要扩展维度,如expand_dims方法+tile方法可以实现,但我又不想改变原本的内存占用,让程序运行起来很卡,此时broadcasting应运而生。

举个例子:

首先broadcasting遵循大维度小维度概念,从左到右维度重要性逐渐变低,比如说[4, 32, 8]

4和32对应8来说就是高维度

举个例子:当我的数据的每个维度对应的特征为:[classes, students, scores],[4, 32, 8]意为4个班级,每个班级32个人,每人有八门课的成绩,当我需要为每个人加上5分我该怎么做呢?

[4, 32, 8] + [5.0],注意这里的[5.0]是data不是shape,shape是[1],随着tensorflow的广播机制,tf可以自动将这个[5.0]的data的shape自动扩展成[4, 32, 8]的形式进行相加。

我们来看看代码段:

a = tf.ones([2, 2, 2])
b = tf.ones([2, 2, 2])
a = tf.expand_dims(a, axis=0)# 顺便实现一下expand方法
b = tf.expand_dims(b, axis=0)
c = tf.concat([a, b], axis=0)
d = c + [5.0]
print(d)

 总体而言broadcasting是一种内存优化机制,和numpy库的广播机制比较相似。

但他也有限制,只有在维度为1或者没有维度时才能广播(记得右对齐)。

比如说:[1, 3] +[4.0, 3.0]这个是不行的,因为[4.0, 3.0]的shape是[2]就算扩展了也是[1, 2],维度不同的数据不能相加,就像维度不同的矩阵不能相加一个道理啦。

5.介绍一下expand_dims和tile方法如何进行维度扩展

前面介绍了broadcasting,但它有限制这里介绍一种更具通用性的方法。当我们想将维度成整数倍扩展时,就要使用tile方法了。

代码展示如下:

# 将a的维度扩展的和b一样
a = tf.random.normal([3, 2])
b = tf.random.normal([3, 6, 4])
a = tf.expand_dims(a, axis=0)
a = tf.tile(a, [3, 2, 2])  # 这里的[3, 2, 2]里边的元素是对应维度扩展的倍数,type不能是float,只能是int32,int64
print(a.shape)

6.一些易忘运算

除法:整除:/ ;余除:%

矩阵相乘:@,matmul(a@b or tf.matmul(a, b))

可以一次性算多个的如[3, 2, 4](3个2*4的矩阵)@[3, 4, 5](3个4@5的矩阵) = [3, 2,5]

某一维度操作:reduce_mean/max/min/sum

自然对数:tf.math.log(这是以e为底的),当我们要实现以10为底2的对数怎么办?

tf.math.log(2.)/tf.math.log(10.) = log(10,2)

7.张量的合并与分割

tf.concat我前面已经用了,大致的感觉也非常直观,就像是把两张纸拼起来,但是注意这个操作是不会增加维度的。

具体用法:

tf.concat([a, b] ,axis=)

当你想要增加维度这里就会用到stack方法

tf.stack([a, b], axis=) 

接下来我们对两者进行一个对比:

a = tf.random.normal([3, 2, 2])
b = tf.random.normal([3, 2, 2])
c = tf.concat([a, b], axis=0)
d = tf.stack([a, b], axis=0)  # 任意维度都可以加,但是一般加大维度都是加在第一个

结果:

tips:对于concat来说相加维度可以不等但是其余维度都得相等,对于stack来说每个维度都得相等

合并讲完了讲一下切割操作:

#  首先明确一下unstack是删除维度
# 假设c的shape是[2, 4, 32, 8]


a, b = tf.unstack(c, axis=0) 
#  相当于是把[2, 4, 32, 8]变成了两个[4, 32, 8]



#  当对半开以后维度是1删了也就删了,但维度不是1删完以后会是什么结果呢?
res = tf.unstack(c, axis=3)
#  这里的res返回的是一个list,等于说res = [[2, 4, 32], [2, 4, 32], [2, 4, 32],...]总共八个元素,需要某一个元素只需要res[i]即可

 unstack感觉不是很灵活额,这里就有个更好使的——tf.split

这里直接上例子:

#  对半分
a = tf.random.normal([4, 32, 8])
b = tf.split(a, axis=2, num_or_size_splits=2)
for i in range(len(b)):
    print(b[i].shape)


#  任意分
a = tf.random.normal([4, 32, 8])
b = tf.split(a, axis=2, num_or_size_splits=[2, 2, 4])
for i in range(len(b)):
    print(b[i].shape)

            

8.数据统计

   8.1范数

a = tf.ones([2, 2])
b = tf.norm(a, ord=,axis=)  # ord指定几范数,axis指定维度 

   8.2最大值最小值索引检索

a = tf.random.truncated_normal([4, 10], stddev=1, seed=1)
print(a)
a_max = tf.argmax(a, axis=0)  # 列方向上的最大值对于的索引
a_min = tf.argmin(a, axis=1)  # 行方向上的最小值对于的索引
print(a_max)
print(a_min)

 结果: 

 8.3 tf.equal

a = tf.constant([1, 2, 3, 4])
b = tf.range(4)
res = tf.equal(a, b)
print(res)
print(tf.reduce_sum(tf.cast(res, dtype=tf.int32)))  # 这个方法可以用来算精确度

结果:

预测准确率的实例:

总体来说用到四个接口argmax, cast, equal, reduce_sum 

logits = tf.random.truncated_normal([2, 4], stddev=1, seed=1)
y = [1, 0]
pred = tf.cast(tf.argmax(logits, axis=1), dtype=tf.int32)
correct = tf.equal(pred, y)
res = tf.reduce_sum(tf.cast(correct, dtype=tf.int32))
print(f'accuracy:{res/2*100}%')

结果:

8.4 tf.unique 

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

结果:返回一个去掉重复值以后的tensor, 完了再给出一个索引

 小tips:这里可以用tf.gather把tf.uniqued的操作还原回去

tf.gather(b[0], b[1])

9. 张量排序

9.1 tf.sort/argsort

代码示例:

a = tf.random.shuffle(tf.constant(range(5)))
print(a)
print(tf.sort(a))  # 默认从小到大,如需从大到小排序:, direction='DESCENDING'
print(tf.argsort(a))
print(tf.gather(tf.sort(a), tf.argsort(a))

结果:

 9.2 tf.math.top_k

当你需要选取一个tensor中的某几个最大或最小值,我可以通过此api快速获得

a = tf.random.truncated_normal([4, 4], stddev=0.1, seed=1)
print(a)
res = tf.math.top_k(a, 2)  # 默认以最后一个维度为准
print(res.indices)  # 相当于argsort
print(res.values)   # 相当于sort

结果:

深度学习编程笔记:tensorflow2.1基础知识---常用的函数API 强制tensor转换为该数据类型 tf.cast(张量名,dtype=数据类型) 计算张量维度上元素的最小值 tf.reduce_min(张量名) 计算张量维度上元素的最大值 tf.reduce_max(张量名) 例子: import tensorflow as tf x1 = tf.constant([1,2,3],dtype=tf.float64) print(x1) ... 阅读详情

相关推荐

张量可视化实战:用网格/热力/箭头/切片理解多维数组

张量是深度学习的核心数据结构,本质是多维数组在内存中的布局与计算规则的统一体。其原理根植于线性代数中的标量、向量、矩阵扩展,依赖内存连续性、轴对齐机制广播规则实现高效运算。技术价值在于 bridging 数学抽象与工程实现——避免形状错配、梯度断裂、GPU内存爆炸等高频故障。典型应用场景覆盖医疗影像(3D体素)、视频分析(4D时空张量)、模型调试(中间层形状追踪)等对维度语义极度敏感的领域。本文聚焦‘Visual Representation’与‘三框架同源可视化’,通过坐标网格、颜色热力、方向箭头、动态

weixin_30628077的博客 375

tensorflow API 文档 (PDF版)

tensorflow API 文档PDF版。 网页版:http://www.tensorfly.cn/tfdoc/api_docs/index.html

用瑞士卷理解多维张量:构建深度学习维度直觉

张量是深度学习的核心数据结构,本质为多维数组,其形状(shape)与内存布局(stride、contiguous性)共同决定计算行为。理解张量的关键不在背诵公式,而在建立空间直觉——即维度如何对应物理结构、变换如何映射为可感知操作。瑞士卷类比将batch、channel、height、width具象为盒、卷、层、纹,使transpose、view、unsqueeze等操作获得可触摸的物理意义,显著提升对内存连续性、广播机制维度对齐等底层原理的认知效率。该方法已广泛应用于PyTorch调试、Attentio

aefg95955的博客 383

Tensorflow常用API

import 相关模块,如 import tensorflow as tf。

星辰的博客 816

PyTorch:tensor-数学API

-柚子皮- 乘法API 1. 二维tensor相乘:torch.mm a是 [m, k],b是[k, n],结果是 [m, n] c = torch.mm(a, b) 2. 三维tensor相乘torch.bmm 只能用于三维tensor相乘,这个函数不支持广播,也就是第一维必须相同,另外两维符合矩阵相乘法则 c = torch.bmm(a, b) 3. 任意多维tensor相乘:torch.matmul 支持广播;当两个都是一维时,表示点积 c = torch.matmul(a, b) 利用这

皮皮blog 2815

机器学习——TensorFlow2

生成一个5x5的矩阵,要求为int类型TensorFlow支持多种数据类型的矩阵,具体包括以下常用的数据类型:tf.float16tf.float32tf.float64tf.int32tf.int64除了上述常用的数据类型外,TensorFlow还支持其他一些数据类型,例如bool、complex64和string等。您可以通过tf.dtypes.DType类中提供的方法来创建、转换和管理数据类型。

渗透测试 780

TensorFlow2-维度变换

目录 TensorFlow2-维度变换 Outline(大纲) 图片视图 First Reshape(重塑视图) Second Reshape(恢复视图) Transpose(转置) Expand_dims(增加维度) Squeeze...

weixin_30840253的博客 251

深度学习框架(篇五)-TensorFlow-低阶API

TensorFlow低阶API核心功能解析:1) 张量操作包括结构操作(创建/索引/维度变换/合并分割)和数学运算(标量/向量/矩阵运算及广播机制);2) 计算图使用规范强调优先使用TensorFlow原生函数,避免修改外部数据结构;3) Autograph机制通过@tf.function实现计算图创建与执行,结合tf.Module实现模型封装。该API体系为开发各类机器学习模型提供了底层支持。

乐于创作,乐于分享,志于创作高价值博文 1661

tensorflow2.0学习-4 低阶API

原文https://github.com/lyhue1991/eat_tensorflow2_in_30_days 1、张量 张量的操作主要包括张量的结构操作和张量的数学运算。 张量结构操作诸如:张量创建,索引切片维度变换合并分割。 张量数学运算主要有:标量运算,向量运算,矩阵运算。另外我们会介绍张量运算的广播机制。 本篇我们介绍张量的结构操作。 创建张量:张量创建的许多方法和nu...

Just for fun的专栏 682

30天干掉tensorflow2.0-day11 张量的结构操作

TensorFlow的低阶API TensorFlow的低阶API主要包括张量操作,计算图和自动微分。 如果把模型比作一个房子,那么低阶API就是【模型之砖】。 在低阶API层次上,可以把TensorFlow当做一个增强版的numpy来使用。 TensorFlow提供的方法比numpy更全面,运算速度更快,如果需要的话,还可以使用GPU进行加速。 前面几章我们对低阶API已经有了一个整体的认识...

Elenstone的博客 273

MachineLearning入门---第6章---TensorFlow的低阶API简介

TensorFlow的低阶API主要包括张量操作,计算图和⾃动微分。 如果把模型⽐作⼀个房⼦,那么低阶API就是【模型之砖】。 在低阶API层次上,可以把TensorFlow当做⼀个增强版的numpy来使⽤。 TensorFlow提供的⽅法⽐numpy更全⾯,运算速度更快,如果需要的话,还可以使⽤GPU进⾏加速。 张量的结构操作: 张量的操作主要包括张量的结构操作 和 张量的数学运算 张量结构操作诸如:张量创建,索引切⽚,维度变换合并分割。 张量数学运算主要有:标量运算,向量运算,矩阵运算。另外我们会介绍

Fuly的博客 1452

【再学Tensorflow2TensorFlow2的张量操作与AutoGraph计算图

TensorFlow的低阶API主要包括张量操作,计算图和自动微分。在低阶API层次上,可以把TensorFlow当做一个增强版的numpy来使用。但TensorFlow提供的方法比numpy更全面,运算速度更快,如果需要的话,还可以使用GPU进行加速。

小哲的博客 771

《30天吃掉那只 TensorFlow2.0》 四、TensorFlow的低阶API

Autograph计算图我们将介绍使用Autograph的规范建议,Autograph的机制原理,Autograph和tf.Module.前面几章我们对低阶API已经有了一个整体的认识,本章我们将重点详细介绍张量操作和Autograph计算图。TensorFlow提供的方法比numpy更全面,运算速度更快,如果需要的话,还可以使用GPU进行加速。张量数学运算主要有:标量运算,向量运算,矩阵运算。张量结构操作诸如:张量创建,索引切片维度变换合并分割。张量的操作主要包括张量的结构操作和张量的数学运算。...

风信子的猫Redamancy的快乐星球 5401

神经网络与深度学习——TensorFlow实践(八)

第8讲 TensorFlow基础 1.tensorflow 端到端 开源

lt_BeiMo的博客 2308

深度学习——TensorFlow初体验

今天学习TensorFlow,一个超级好用的神经网络搭载库 什么是TensorFlow TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。它是谷歌基于DistBelief进行研发的第二代人工智能学习系统。2015年11月9日,Google发布人工智能系统Te

L_superhero的博客 1802

TensorFlow

TensorFlow 是一个,专门为机器学习任务而设计,让开发者能够轻松地构建从简单线性回归到复杂神经网络的各种模型。TensorFlow 是由 Google 开发的开源机器学习框架,用于构建和训练各种机器学习和深度学习模型。和,表示数据以张量的形式在计算图中流动。核心概念。

qq_32381773的博客 187

Tensorflow2.0快速入门必了解函数

TensorFlow基本概念: 程序 = 数据结构+算法 TensorFlow程序 = 张量数据结构 + 计算图计算语言 张量和计算图是TensorFlow的核心概念。 TensorFlow的基本数据结构是张量tensor,张量即多维数组,类似于numpy中的array 常量 : contant 变量: Variable 常量的值在计算图中不可以被重新赋值,变量可以在计算图中用assign等算子重新赋值。 不同类型的数据可以用不同维度(rank)的张量来表示。 标量为0维张量,向量为1维张量,矩阵为2

shuai_yue的博客 465

TensorFlow2.0学习

文章目录一、TensorFlow的建模流程1.1 结构化数据建模流程范例1.1.1 准备数据1.1.2 定义模型1.1.3 训练模型1.1.4 评估模型1.1.5 使用模型1.1.6 保存模型1.2 图片数据建模流程1.2.1 准备数据1.2.2 定义模型1.2.3 训练模型1.2.4 评估模型1.2.5 使用模型1.2.6 保存模型1.3 文本数据建模流程范例1.3.1 准备数据1.3.2 定义模型1.3.3 训练模型1.3.4 评估模型1.3.5 使用模型1.3.6 保存模型1.4 时间序列数据建模流程

Mr.gai的博客 525

python标量计算教学_张量的数学运算 - Python与算法之美的个人空间 - OSCHINA - 中文开源技术交流社区...

TensorFlow的低阶API主要包括张量操作,计算图和自动微分。如果把模型比作一个房子,那么低阶API就是【模型之砖】。在低阶API层次上,可以把TensorFlow当做一个增强版的numpy来使用。TensorFlow提供的方法比numpy更全面,运算速度更快,如果需要的话,还可以使用GPU进行加速。前面几章我们对低阶API已经有了一个整体的认识,本章我们将重点详细介绍张量操作和Autogr...

weixin_39534321的博客 467
上一篇: tensorflow2的常用函数记录与实例
下一篇: c++: 在函数‘_start’中:(.text+0x20):对‘main’未定义的引用
Hey Kids!!!
博客等级 码龄6年 7粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值