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正则表达式之作业计算器
Mar 18 Python
深入理解Python3中的http.client模块
Mar 29 Python
python3.4用函数操作mysql5.7数据库
Jun 23 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
Django+Xadmin构建项目的方法步骤
Mar 06 Python
pytorch自定义初始化权重的方法
Aug 17 Python
python 哈希表实现简单python字典代码实例
Sep 27 Python
Python Process多进程实现过程
Oct 22 Python
Python实现结构体代码实例
Feb 10 Python
利用Python自动化操作AutoCAD的实现
Apr 01 Python
Python基于pandas绘制散点图矩阵代码实例
Jun 04 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 #Python
python flask开发的简单基金查询工具
python爬取网页版QQ空间,生成各类图表
Python爬虫实战之爬取携程评论
Pytorch DataLoader shuffle验证方式
python 爬取吉首大学网站成绩单
python 批量压缩图片的脚本
Jun 02 #Python
You might like
PHP基础学习小结
2011/04/17 PHP
基于PHP 面向对象之成员方法详解
2013/05/04 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
CI框架附属类用法分析
2018/12/26 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
学习ExtJS 访问容器对象
2009/10/07 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
详解JS数值Number类型
2018/02/07 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
[01:07:19]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第一场
2018/04/06 DOTA
使用Python从零开始撸一个区块链
2018/03/14 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
python使用梯度下降算法实现一个多线性回归
2020/03/24 Python
春秋航空官方网站:Spring Airlines
2017/09/27 全球购物
德国大型箱包和皮具商店:Koffer
2019/10/01 全球购物
怎样声明一个匿名的内部类
2016/06/01 面试题
岗位职责的定义
2013/11/10 职场文书
土木工程专业个人求职信
2013/12/30 职场文书
入党积极分子思想汇报
2014/01/02 职场文书
司机辞职报告范文
2014/01/20 职场文书
英文请假条
2014/04/11 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
党员民主评议个人总结
2014/10/20 职场文书
个人委托书范文
2015/01/28 职场文书
自荐信模板大全
2015/03/27 职场文书
科技馆观后感
2015/06/08 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书