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中pycurl库的用法实例
Sep 30 Python
Python代码调试的几种方法总结
Apr 15 Python
Python找出list中最常出现元素的方法
Jun 14 Python
Python 爬虫学习笔记之正则表达式
Sep 21 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
Python中str.format()详解
Mar 12 Python
小米5s微信跳一跳小程序python源码
Jan 08 Python
使用Python获取并处理IP的类型及格式方法
Nov 01 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
Jul 31 Python
python和c语言哪个更适合初学者
Jun 22 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
Dec 04 Python
Python爬虫基础初探selenium
May 31 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 #Python
python flask开发的简单基金查询工具
python爬取网页版QQ空间,生成各类图表
Python爬虫实战之爬取携程评论
Pytorch DataLoader shuffle验证方式
python 爬取吉首大学网站成绩单
python 批量压缩图片的脚本
Jun 02 #Python
You might like
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
jQuery autocomplete插件修改
2009/04/17 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
AngularJS2 与 D3.js集成实现自定义可视化的方法
2017/12/01 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
[49:08]Secret vs VP 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
Python socket编程实例详解
2015/05/27 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
将python代码和注释分离的方法
2018/04/21 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
2019/08/22 Python
python实现梯度下降法
2020/03/24 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
啤酒销售实习自我鉴定
2013/09/24 职场文书
婚庆答谢词
2015/01/04 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
反邪教学习心得体会
2016/01/15 职场文书
导游词之无锡梅园
2019/11/28 职场文书
Python WSGI 规范简介
2021/04/11 Python
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android
Java线程的6种状态与生命周期
2022/05/11 Java/Android