日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【TensorFlow2.0】(5) 数学计算、合并、分割

發布時間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【TensorFlow2.0】(5) 数学计算、合并、分割 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

各位同學好,今天和大家分享一下TensorFlow2.0中的數學運算方法、合并與分割。內容有:

(1)基本運算;(2)矩陣相乘;(3)合并 tf.concat()、tf.stack();(4)分割 tf.split()、tf.unstack()

那我們開始吧。


1. 基本數學運算

開始之前,我們先定義兩個tensor,下面的計算都使用這兩個

# 2行2列的全為2的tensor
a = tf.fill([2,2],2.) 
# 2行2列全1tensor,默認float32
b = tf.ones([2,2]) 

1.1 加減乘除

計算前要保證兩個tensor的數據類型相同。

# ==1== 加減乘除
a+b  # 元素之間相加
a-b  # 元素之間相減
a*b  # 元素之間相乘,理解為矩陣的點乘
a/b  # 元素之間相除

??


1.2 求余取整

# ==2== 取整求余
a // b  # a/b 取整除數
a % b   # a/b 取余數


1.3 對數和指數

求對數log:?tf.math.log(a)

注意,這里的 log 的底數統一都是 e

a = tf.ones([2,2])
# 求a的每一個元素求對數
tf.math.log(a)

如果想要對數的底數是其他值,需要通過公式計算

如果在tensorflow中要計算?,方法如下,保證計算的兩個tensor數據類型相同

tf.math.log(8.)/tf.math.log(2.)

指數計算?? :tf.exp(tensor)

a = tf.ones([2,2])
# 對tensor中的每一個元素求ex
tf.exp(a)


1.4 求次方、開平方

求n次方:(1)tf.pow(tensor, n)? ?(2)tensor**n

對tensor中的每個元素求n次方

求平方:?tf.square(tensor)

對tensor中的每個元素求平方

開平方: tf.sqrt(tensor)

對tensor中的每個元素求平方根

a = tf.fill([2,2],2.)
#(1)求n次方
# 法一:
tf.pow(a,2)
# 法二:
a**2
#(2)開平方
tf.sqrt(a)

??


2. 矩陣相乘

方法:(1)變量1 @ 變量2? (2)tf.mutmul(變量1, 變量2)

2.1 對于二維矩陣

# 創建二維矩陣,保證數據類型相同
a = tf.ones([2,2])  # 2行2列全1.0
b = tf.fill([2,2],2.)  # 2行2列全2.0
# 法一:
a @ b
# 法二:
tf.matmul(a,b)


2.2 對于高維矩陣

# 創建三維tensor
a = tf.ones([4,2,3])
b = tf.fill([4,3,5],2.)
# 法一:
a@b
# 法二:
tf.matmul(a,b)

可以將這幾個維度理解為 [圖像,行,列]將圖像維度單獨看作一個維度,對后面兩個維度進行矩陣相乘計算,維度相乘公式如下 [b, h, w] @ [b, w, k] = [b, h, k]

利用廣播對不滿足要求的矩陣擴張后再進行矩陣運算,維度相乘公式為:

?[b, h, w] @ [w, k] = [b, h, k]

a = tf.ones([4,2,3])
b = tf.fill([3,5],2.)
# 矩陣相乘
a @ b  #計算時自動廣播


3. 合并

3.1 tf.concat()

tf.concat( [tensor1,tensor2,..] , axis )

在指定的某個維度上合并,其他維度不變,不產生新的維度。在使用該方法進行合并兩個tensor變量時,除axis指定的維度可以不相等,其他維度必須相等

首先創建2個三維的tensor變量,在axis=0時的維度不同,其他維度相同。指定軸axis=0對兩個tensor合并。

# 創建三維的tensor
a = tf.ones([4,35,8]) # 可以理解為收集前4個班級35名學生8門課的成績
b = tf.ones([2,35,8])
# 將a和b合并,指定軸axis=0,在班級維度上合并
c = tf.concat([a,b],axis=0) 
c.shape


3.2 tf.stack()

tf.stack([tensor1,tensor,...], axis)

在指定軸的位置創建一個新的維度,用來合并幾個所有維度都相同的tensor變量。要求被合并的tensor變量的shape完全一樣。如果axis是正數,在指定軸前面創建一個維度;axis是負數,在指定軸后面創建。

# 創建兩個相同shape的tensor變量
a = tf.ones([4,35,8])  
b = tf.ones([4,35,8])  
# 在指定軸前面創建新維度合并,保證其他維度的shape相同
c = tf.stack([a,b],axis=0)
c.shape
# 若為負數在axis后面創建
d = tf.stack([a,b],axis=-2)
d.shape


4. 拆分

4.1 tf.unstack()

tf.unstack(tensor, axis)

在一個tensor變量的指定維度上,拆分這個維度。將指定維度全部拆分,該維度的shape是多少就拆分多少個拆分后這個維度消失,不會修改原數據,需要用一個新變量接收拆分結果。

# 創建一個四維全1的tensor
a = tf.ones([2,4,35,8])
# 指定拆分axis=1這個維度,全部拆分,為4份
res = tf.unstack(a,axis=1)
# 返回一個列表,查看某個tensor的維度
res[0].shape

對指定維度axis=1進行拆分,拆分后這個維度消失,返回由4個三維tensor組成的列表,列表中每一個tensor的shape都是[2, 35, 8]


4.2 tf.split()

tf.split(tensor, axis, num_or_size_splits)

tensor為需要切分的張量;axis指定在第幾個維度上切分;num_or_size_splits表示要切幾份,怎么切,如果是一個整數,那直接在指定維度上把張量平均切分成幾個小張量,如果是一個向量,就根據這個向量有幾個元素分為幾項

拆分后,指定的軸不消失

a = tf.ones([2,4,35,8])
# 在第1個軸上拆分,平均拆分成2份
res = tf.split(a,axis=1,num_or_size_splits=2)
res[0].shape
# 在第3個軸上拆分成2/2/4,返回一個列表
con = tf.split(a,axis=3,num_or_size_splits=[2,2,4])
con[2].shape

在軸axis=1上拆分,將該軸的shape為4,平均分成兩份,返回一個由兩個tensor構成的列表,每個tensor的維度都是[2,2,35,8]

在軸axis=3上按列表指定的方式來拆分,axis=3的shape為8,拆分成2/2/4,返回值是由三個tensor組成的列表,分別為[2,4,35,2]、[2,4,35,2]、[2,4,35,4]

總結

以上是生活随笔為你收集整理的【TensorFlow2.0】(5) 数学计算、合并、分割的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。