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的urllib模块显示下载进度示例
Jan 17 Python
Python异常处理总结
Aug 15 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
Mar 27 Python
python爬虫之BeautifulSoup 使用select方法详解
Oct 23 Python
Python_LDA实现方法详解
Oct 25 Python
Python3.5常见内置方法参数用法实例详解
Apr 29 Python
python如何实现代码检查
Jun 28 Python
python+django+rest框架配置创建方法
Aug 31 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
windows10环境下用anaconda和VScode配置的图文教程
Mar 30 Python
基于PyQt5制作一个群发邮件工具
Apr 08 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 #Python
python flask开发的简单基金查询工具
python爬取网页版QQ空间,生成各类图表
Python爬虫实战之爬取携程评论
Pytorch DataLoader shuffle验证方式
python 爬取吉首大学网站成绩单
python 批量压缩图片的脚本
Jun 02 #Python
You might like
PHP 进程锁定问题分析研究
2009/11/24 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
JavaScript prototype属性使用说明
2010/05/13 Javascript
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
2012/02/03 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
php结合js实现多条件组合查询
2019/05/28 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
js回调函数仿360开机
2019/12/26 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
python交互式图形编程实例(二)
2017/11/17 Python
使用tensorflow实现AlexNet
2017/11/20 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
python plotly画柱状图代码实例
2019/12/13 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
python 实现两个npy档案合并
2020/07/01 Python
python的launcher用法知识点总结
2020/08/07 Python
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
计算机专业毕业生自荐信
2013/12/31 职场文书
欢送退休感言
2014/02/08 职场文书
保护环境的建议书
2014/03/12 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
大学生求职自荐信
2015/03/24 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
Java异常处理try catch的基本用法
2021/12/06 Java/Android