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

发布于:2025-07-12 ⋅ 阅读:(17) ⋅ 点赞:(0)

参考文档

  1. TensorFlow的低阶API

内容脉络

低阶API主要包括张量操作,计算图和自动微分

张量

主要包括张量的结构操作和张量的数学运算。

张量结构操作诸如:张量创建,索引切片,维度变换,合并分割。

张量数学运算主要有:标量运算,向量运算,矩阵运算。

另外我们会介绍张量运算的广播机制

张量创建

和numpy创建array的方法很像

索引切片

和numpy几乎一样

对于tf.Variable,可以通过索引和切片对部分元素进行修改

功能 实现
提取张量的连续子区域 索引、切片、tf.slice
提取张量的不规则的区域 tf.gather,tf.gather_nd,tf.boolean_mask
修改张量的某些元素得到新的张量 tf.where,tf.scatter_nd

维度变换

实现:tf.reshape, tf.squeeze, tf.expand_dims, tf.transpose

tf.reshape:可以改变张量的形状,但是本质上不会改变张量元素的存储顺序,所以,该操作非常迅速且是可逆的

tf.squeeze:可以减少维度。如果张量在某个维度上只有一个元素,利用tf.squeeze可以消除这个维度。它本质上不会改变张量元素的存储顺序

tf.expand_dims:可以增加维度

tf.transpose:可以交换维度。会改变张量元素的存储顺序。常用于图片存储格式的变换上

合并分割

合并:

tf.concat和tf.stack:对多个张量进行合并。

区别:tf.concat是连接,不会增加维度,而tf.stack是堆叠,会增加维度。

分割:

tf.split方法把一个张量分割成多个张量。可以指定分割份数平均分割,也可以通过指定每份的记录数量进行分割。

标量运算

许多标量运算符都在 tf.math模块下

向量运算

类似于numpy

向量运算符只在一个特定轴上运算,将一个向量映射到一个标量或者另外一个向量

许多向量运算符都以reduce开头

矩阵运算

矩阵必须是二维的。类似tf.constant([1,2,3])这样的不是矩阵

矩阵运算包括:矩阵乘法,矩阵转置,矩阵逆,矩阵求迹,矩阵范数,矩阵行列式,矩阵求特征值,矩阵分解

除了一些常用的运算外,大部分和矩阵有关的运算都在tf.linalg子包中

广播机制

TensorFlow的广播规则和numpy是一样的:

  1. 如果张量的维度不同,将维度较小的张量进行扩展,直到两个张量的维度都一样。

  2. 如果两个张量在某个维度上的长度是相同的,或者其中一个张量在该维度上的长度为1,那么我们就说这两个张量在该维度上是相容的。

  3. 如果两个张量在所有维度上都是相容的,它们就能使用广播。

  4. 广播之后,每个维度的长度将取两个张量在该维度长度的较大值。

  5. 在任何一个维度上,如果一个张量的长度为1,另一个张量长度大于1,那么在该维度上,就好像是对第一个张量进行了复制。

  6. tf.broadcast_to 以显式的方式按照广播机制扩展张量的维度。

计算图

介绍使用Autograph的规范建议,Autograph的机制原理,Autograph和tf.Module

Autograph的规范建议

总结:

  1. 被@tf.function修饰的函数应尽可能使用TensorFlow中的函数而不是Python中的其他函数。例如使用tf.print而不是print,使用tf.range而不是range,使用tf.constant(True)而不是True

  2. 避免在@tf.function修饰的函数内部定义tf.Variable

  3. 被@tf.function修饰的函数不可修改该函数外部的Python列表或字典等数据结构变量

Autograph的机制原理

当我们使用@tf.function装饰一个函数的时候,发生的事情:

  1. 创建计算图

  2. 执行计算图

如果调用被@tf.function装饰的函数时输入的参数不是Tensor类型,则每次都会重新创建计算图

Autograph和tf.Module

利用tf.Module提供的封装,再结合TensoFlow丰富的低阶API,实际上我们能够基于TensorFlow开发任意机器学习模型(而非仅仅是神经网络模型),并实现跨平台部署使用

tf.keras.models.Model,tf.keras.layers.Layer 都是继承自tf.Module的,提供了方便的变量管理和所引用的子模块管理的功能

结尾

亲爱的读者朋友:感谢您在繁忙中驻足阅读本期内容!您的到来是对我们最大的支持❤️

正如古语所言:"当局者迷,旁观者清"。您独到的见解与客观评价,恰似一盏明灯💡,能帮助我们照亮内容盲区,让未来的创作更加贴近您的需求。

若此文给您带来启发或收获,不妨通过以下方式为彼此搭建一座桥梁: ✨ 点击右上角【点赞】图标,让好内容被更多人看见 ✨ 滑动屏幕【收藏】本篇,便于随时查阅回味 ✨ 在评论区留下您的真知灼见,让我们共同碰撞思维的火花

我始终秉持匠心精神,以键盘为犁铧深耕知识沃土💻,用每一次敲击传递专业价值,不断优化内容呈现形式,力求为您打造沉浸式的阅读盛宴📚。

有任何疑问或建议?评论区就是我们的连心桥!您的每一条留言我都将认真研读,并在24小时内回复解答📝。

愿我们携手同行,在知识的雨林中茁壮成长🌳,共享思想绽放的甘甜果实。下期相遇时,期待看到您智慧的评论与闪亮的点赞身影✨!

万分感谢🙏🙏您的点赞👍👍、收藏⭐🌟、评论💬🗯️、关注❤️💚~ 


自我介绍:一线互联网大厂资深算法研发(工作6年+),4年以上招聘面试官经验(一二面面试官,面试候选人400+),深谙岗位专业知识、技能雷达图,已累计辅导15+求职者顺利入职大中型互联网公司。熟练掌握大模型、NLP、搜索、推荐、数据挖掘算法和优化,提供面试辅导、专业知识入门到进阶辅导等定制化需求等服务,助力您顺利完成学习和求职之旅(有需要者可私信联系)  

友友们,自己的知乎账号为“快乐星球”,定期更新技术文章,敬请关注!      


网站公告

今日签到

点亮在社区的每一天
去签到