将tf.batch_matmul替换成tf.matmul的实现
作者:guotong1988 发布时间:2021-03-25 03:35:43
我就废话不多说了,大家还是直接看代码吧~
import tensorflow as tf
h_doc=tf.placeholder(tf.int32,[None,30,512])
h_query=tf.placeholder(tf.int32,[None,10,512])
temp = tf.matmul(h_doc, h_query, adjoint_b = True) # tf.batch_matmul(h_doc, h_query, adj_y=True)
print(temp.get_shape())
(?, 30, 10)
补充知识:tf.matmul() 和tf.multiply() 的区别
1.tf.multiply()两个矩阵中对应元素各自相乘
格式: tf.multiply(x, y, name=None)
参数:
x: 一个类型为:half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128的张量。
y: 一个类型跟张量x相同的张量。
返回值: x * y element-wise.
注意:
(1)multiply这个函数实现的是元素级别的相乘,也就是两个相乘的数元素各自相乘,而不是矩阵乘法,注意和tf.matmul区别。
(2)两个相乘的数必须有相同的数据类型,不然就会报错。
2.tf.matmul()将矩阵a乘以矩阵b,生成a * b。
格式: tf.matmul(a, b, transpose_a=False, transpose_b=False, adjoint_a=False, adjoint_b=False, a_is_sparse=False, b_is_sparse=False, name=None)
参数:
a: 一个类型为 float16, float32, float64, int32, complex64, complex128 且张量秩 > 1 的张量。
b: 一个类型跟张量a相同的张量。
transpose_a: 如果为真, a则在进行乘法计算前进行转置。
transpose_b: 如果为真, b则在进行乘法计算前进行转置。
adjoint_a: 如果为真, a则在进行乘法计算前进行共轭和转置。
adjoint_b: 如果为真, b则在进行乘法计算前进行共轭和转置。
a_is_sparse: 如果为真, a会被处理为稀疏矩阵。
b_is_sparse: 如果为真, b会被处理为稀疏矩阵。
name: 操作的名字(可选参数)
返回值: 一个跟张量a和张量b类型一样的张量且最内部矩阵是a和b中的相应矩阵的乘积。
注意:
(1)输入必须是矩阵(或者是张量秩 >2的张量,表示成批的矩阵),并且其在转置之后有相匹配的矩阵尺寸。
(2)两个矩阵必须都是同样的类型,支持的类型如下:float16, float32, float64, int32, complex64, complex128。
引发错误:
ValueError: 如果transpose_a 和 adjoint_a, 或 transpose_b 和 adjoint_b 都被设置为真
程序示例:
运行结果:
注意:
在TensorFlow的世界里,变量的定义和初始化是分开的,所有关于图变量的赋值和计算都要通过tf.Session的run来进行。想要将所有图变量进行集体初始化时应该使用tf.global_variables_initializer。
来源:https://blog.csdn.net/guotong1988/article/details/77622078


猜你喜欢
- Python 如何转换string到float?简单几步,让你轻松解决。打开软件,新建python项目,如图所示右键菜单中创建.py文件,如
- Pandas提供了便捷的方式对时间序列进行重采样,根据时间粒度的变大或者变小分为降采样和升采样:降采样:时间粒度变大。例如,原来是按天统计的
- 如何将产生的密码记录并发送给用户?这里使用了cdonts邮件组件来发送邮件,前提服务器得支持cdonts组件。好了,看看具体实现方法吧,不是
- 本文实例讲述了JavaScript常用的返回,自动跳转,刷新,关闭语句。分享给大家供大家参考。具体如下:1. Javascript 返回上一
- 在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。我们最常
- 假设现在有一个应用场景,需要对文件系统进行监控,发生变化时产生日志,对新增的文件做一些相应的操作。比如说应用到我们之前的音乐高潮提取器:若当
- 本文主要跟大家分享在类unix操作系统下supervisor的使用以及一些关于进程的知识一、问题背景1、背景如何才能让一个进程摆脱终端,获得
- go module 是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始, go module
- 总有人认为linux搭建php环境很复杂,然后尝试安装lnmp一键安装包。其实说白了就是安装一个web服务器,然后支持php即可,很简单的,
- opencv中也提供了一种类似于Keras的神经网络,即为ann,这种神经网络的使用方法与Keras的很接近。关于mnist数据的解析,读者
- 随着 Node.js v8 的发布,Node.js 已原生支持 async/await 函数,Web 框架 Koa 也随之发布了 Koa 2
- 如下所示:list=[1,2,3,4,5,6,7,8,9,0,11,0,13,14,15,16,17,18,19,20]#把list分为长度
- 目录1.python中的异常2.捕捉异常try-except多个except子句 一个except块捕捉多个异常 空ex
- 1、公式推导 对幂律分布公式:对公式两边同时取以10为底的对数:所以对于幂律公式,对X,Y取对数后,在坐标轴上为线性方程。2、可视化 从图形
- 组件<template><div> <input id="upload_file&quo
- 前言注意:网上很多教程说需要在build目录下的dev-server.js文件中配置,但目前最新的vue-cli是没有dev-server.
- 一、前言Celery是一个基于python开发的分布式任务队列,而做python WEB开发最为流行的框架莫属Django,但是Django
- 三角函数如果我们以OP作为圆的半径r,以o点作为圆的圆心,圆上的点的x坐标就是r * cos a ,y坐标就是 r * sin a。pyth
- 方法组成模式方法里的所有语句都必须处在同一个归纳层次上无用的注释让代码自我表白标注为什么这样,而不是如何这样对方法表现进行描述等于重复表现这
- 很多人错误地认为ASP是简单、低效的代名词,认为ASP是低能的,不足挂齿的,也很简单,一学就会,一琢磨就精通。有人讲ASP不安全,写ASP的