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读写ini文件示例(python读写文件)
Mar 25 Python
Python pass详细介绍及实例代码
Nov 24 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
用python与文件进行交互的方法
Mar 01 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
用Python爬取QQ音乐评论并制成词云图的实例
Aug 24 Python
你可能不知道的Python 技巧小结
Jan 29 Python
Django在Model保存前记录日志实例
May 14 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
这样写python注释让代码更加的优雅
Jun 02 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 #Python
python flask开发的简单基金查询工具
python爬取网页版QQ空间,生成各类图表
Python爬虫实战之爬取携程评论
Pytorch DataLoader shuffle验证方式
python 爬取吉首大学网站成绩单
python 批量压缩图片的脚本
Jun 02 #Python
You might like
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
分享PHP守护进程类
2015/12/30 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
关于Javascript 的 prototype问题。
2007/01/03 Javascript
extjs 为某个事件设置拦截器
2010/01/15 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
简单了解JavaScript sort方法
2019/11/25 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
Python获取SQLite查询结果表列名的方法
2017/06/21 Python
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
python实现微信防撤回神器
2019/04/29 Python
基于python的列表list和集合set操作
2019/11/24 Python
如何在mac下配置python虚拟环境
2020/07/06 Python
Python try except finally资源回收的实现
2021/01/25 Python
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
美国旅游网站:Tours4Fun
2017/02/17 全球购物
工程力学专业毕业生求职信
2013/10/06 职场文书
三年大学自我鉴定
2014/01/16 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
给老婆的检讨书
2015/01/27 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
基于Redission的分布式锁实战
2022/08/14 Redis
关于MySQL中explain工具的使用
2023/05/08 MySQL