1. 程式人生 > 程式設計 >將tf.batch_matmul替換成tf.matmul的實現

將tf.batch_matmul替換成tf.matmul的實現

我就廢話不多說了,大家還是直接看程式碼吧~

import tensorflow as tf
h_doc=tf.placeholder(tf.int32,[None,30,512])
h_query=tf.placeholder(tf.int32,10,512])
temp = tf.matmul(h_doc,h_query,adjoint_b = True) # tf.batch_matmul(h_doc,adj_y=True)
print(temp.get_shape())

(?,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,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,complex128。

引發錯誤:

ValueError: 如果transpose_a 和 adjoint_a,或 transpose_b 和 adjoint_b 都被設定為真

程式示例:

將tf.batch_matmul替換成tf.matmul的實現

執行結果:

將tf.batch_matmul替換成tf.matmul的實現

注意:

在TensorFlow的世界裡,變數的定義和初始化是分開的,所有關於圖變數的賦值和計算都要通過tf.Session的run來進行。想要將所有圖變數進行集體初始化時應該使用tf.global_variables_initializer。

以上這篇將tf.batch_matmul替換成tf.matmul的實現就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。