TensorFlow中tf.batch_matmul()的用法


Posted in Python onJune 02, 2021

TensorFlow中tf.batch_matmul()用法

如果有两个三阶张量,size分别为

a.shape = [100, 3, 4]
b.shape = [100, 4, 5]
c = tf.batch_matmul(a, b)

则c.shape = [100, 3, 5] //将每一对 3x4 的矩阵与 4x5 的矩阵分别相乘。batch_size不变

100为张量的batch_size。剩下的两个维度为数据的维度。

不过新版的tensorflow已经移除了上面的函数,使用时换为tf.matmul就可以了。与上面注释的方式是同样的。

附: 如果是更高维度。例如(a, b, m, n) 与(a, b, n, k)之间做matmul运算。则结果的维度为(a, b, m, k)。

TensorFlow如何实现batch_matmul

我们知道,在tensorflow早期版本中有tf.batch_matmul()函数,可以实现多维tensor和低维tensor的直接相乘,这在使用过程中非常便捷。

但是最新版本的tensorflow现在只有tf.matmul()函数可以使用,不过只能实现同维度的tensor相乘, 下面的几种方法可以实现batch matmul的可能。

例如: tensor A(batch_size,m,n), tensor B(n,k),实现batch matmul 使得A * B。

方法1: 利用tf.matmul()

对tensor B 进行增维和扩展

A = tf.Variable(tf.random_normal(shape=(batch_size, 2, 3)))
B = tf.Variable(tf.random_normal(shape=(3, 5)))
B_exp = tf.tile(tf.expand_dims(B,0),[batch_size, 1, 1]) #先进行增维再扩展
C = tf.matmul(A, B_exp)

方法2: 利用tf.reshape()

对tensor A 进行reshape操作,然后利用tf.matmul()

A = tf.Variable(tf.random_normal(shape=(batch_size, 2, 3)))
B = tf.Variable(tf.random_normal(shape=(3, 5)))
A = tf.reshape(A, [-1, 3])
C = tf.reshape(tf.matmul(A, B), [-1, 2, 5])

方法3: 利用tf.scan()

利用tf.scan() 对tensor按第0维进行展开的特性

A = tf.Variable(tf.random_normal(shape=(batch_size, 2, 3)))
B = tf.Variable(tf.random_normal(shape=(3, 5)))
initializer = tf.Variable(tf.random_normal(shape=(2,5)))
C = tf.scan(lambda a,x: tf.matmul(x, B), A, initializer)

方法4: 利用tf.einsum()

A = tf.Variable(tf.random_normal(shape=(batch_size, 2, 3)))
B = tf.Variable(tf.random_normal(shape=(3, 5)))
C = tf.einsum('ijk,kl->ijl',A,B)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现多行注释的另类方法
Aug 22 Python
kNN算法python实现和简单数字识别的方法
Nov 18 Python
python编程开发之日期操作实例分析
Nov 13 Python
Python建立Map写Excel表实例解析
Jan 17 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
Python实现的文轩网爬虫完整示例
May 16 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
python实现用户名密码校验
Mar 18 Python
Python求凸包及多边形面积教程
Apr 12 Python
Python 使用生成器代替线程的方法
Aug 04 Python
python 常见的反爬虫策略
Sep 27 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
Apr 24 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 #Python
python flask开发的简单基金查询工具
python爬取网页版QQ空间,生成各类图表
Python爬虫实战之爬取携程评论
Pytorch DataLoader shuffle验证方式
python 爬取吉首大学网站成绩单
python 批量压缩图片的脚本
Jun 02 #Python
You might like
WINDOWS服务器安装多套PHP的另类解决方案
2006/10/09 PHP
PHP字符串 ==比较运算符的副作用
2009/10/21 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
各浏览器中querySelector和querySelectorAll的实现差异分析
2012/05/23 Javascript
js控制CSS样式属性语法对照表
2012/12/11 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
jquery移动点击的项目到列表最顶端的方法
2015/06/24 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
浅谈Vue.use的使用
2018/08/29 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
python创建列表并给列表赋初始值的方法
2015/07/28 Python
python变量不能以数字打头详解
2016/07/06 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
Django 开发调试工具 Django-debug-toolbar使用详解
2019/07/23 Python
python基于opencv检测程序运行效率
2019/12/28 Python
详解Python IO编程
2020/07/24 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
华为C++笔试题
2014/08/05 面试题
大学秋游活动方案
2014/02/11 职场文书
致跳远运动员广播稿
2014/02/11 职场文书
大学生社团活动总结
2014/04/26 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python