参考文档
内容脉络
低阶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,那么我们就说这两个张量在该维度上是相容的。
如果两个张量在所有维度上都是相容的,它们就能使用广播。
广播之后,每个维度的长度将取两个张量在该维度长度的较大值。
在任何一个维度上,如果一个张量的长度为1,另一个张量长度大于1,那么在该维度上,就好像是对第一个张量进行了复制。
tf.broadcast_to 以显式的方式按照广播机制扩展张量的维度。
计算图
介绍使用Autograph的规范建议,Autograph的机制原理,Autograph和tf.Module
Autograph的规范建议
总结:
被@tf.function修饰的函数应尽可能使用TensorFlow中的函数而不是Python中的其他函数。例如使用tf.print而不是print,使用tf.range而不是range,使用tf.constant(True)而不是True
避免在@tf.function修饰的函数内部定义tf.Variable
被@tf.function修饰的函数不可修改该函数外部的Python列表或字典等数据结构变量
Autograph的机制原理
当我们使用@tf.function装饰一个函数的时候,发生的事情:
创建计算图
执行计算图
如果调用被@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、搜索、推荐、数据挖掘算法和优化,提供面试辅导、专业知识入门到进阶辅导等定制化需求等服务,助力您顺利完成学习和求职之旅(有需要者可私信联系)
友友们,自己的知乎账号为“快乐星球”,定期更新技术文章,敬请关注!