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中DJANGO简单测试实例
May 11 Python
对命令行模式与python交互模式介绍
May 12 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 Python
Python中Unittest框架的具体使用
Aug 27 Python
python tkinter组件使用详解
Sep 16 Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 Python
tensorflow模型转ncnn的操作方式
May 25 Python
使用sklearn对多分类的每个类别进行指标评价操作
Jun 11 Python
浅析python函数式编程
Sep 26 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 Python
python中lower函数实现方法及用法讲解
Dec 23 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 #Python
python flask开发的简单基金查询工具
python爬取网页版QQ空间,生成各类图表
Python爬虫实战之爬取携程评论
Pytorch DataLoader shuffle验证方式
python 爬取吉首大学网站成绩单
python 批量压缩图片的脚本
Jun 02 #Python
You might like
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
document.documentElement && document.documentElement.scrollTop
2007/12/01 Javascript
心扬JS分页函数代码
2010/09/10 Javascript
js中判断数字\字母\中文的正则表达式 (实例)
2012/06/29 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
使用socket.io实现简单聊天室案例
2018/01/02 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
Python subprocess模块详细解读
2018/01/29 Python
浅谈python之新式类
2018/08/12 Python
对python模块中多个类的用法详解
2019/01/10 Python
Python3模拟登录操作实例分析
2019/03/12 Python
Pygame框架实现飞机大战
2020/08/07 Python
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
英语商务邀请函范文
2014/01/16 职场文书
学校安全检查制度
2014/01/27 职场文书
小学防溺水制度
2014/01/29 职场文书
军人违纪检讨书
2014/02/04 职场文书
2014元旦晚会策划方案
2014/02/19 职场文书
团代会主持词
2014/04/02 职场文书
就业协议书范本
2014/04/11 职场文书
公司离职证明标准范本
2014/10/05 职场文书
努力学习保证书
2015/02/26 职场文书
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android