TensorFLow 數(shù)學(xué)運(yùn)算的示例代碼
一、Tensor 之間的運(yùn)算規(guī)則
- 相同大小 Tensor 之間的任何算術(shù)運(yùn)算都會(huì)將運(yùn)算應(yīng)用到元素級(jí)
- 不同大小 Tensor(要求dimension 0 必須相同) 之間的運(yùn)算叫做廣播(broadcasting)
- Tensor 與 Scalar(0維 tensor) 間的算術(shù)運(yùn)算會(huì)將那個(gè)標(biāo)量值傳播到各個(gè)元素
- Note: TensorFLow 在進(jìn)行數(shù)學(xué)運(yùn)算時(shí),一定要求各個(gè) Tensor 數(shù)據(jù)類型一致
二、常用操作符和基本數(shù)學(xué)函數(shù)
大多數(shù)運(yùn)算符都進(jìn)行了重載操作,使我們可以快速使用 (+ - * /) 等,但是有一點(diǎn)不好的是使用重載操作符后就不能為每個(gè)操作命名了。
# 算術(shù)操作符:+ - * / % tf.add(x, y, name=None) # 加法(支持 broadcasting) tf.subtract(x, y, name=None) # 減法 tf.multiply(x, y, name=None) # 乘法 tf.divide(x, y, name=None) # 浮點(diǎn)除法, 返回浮點(diǎn)數(shù)(python3 除法) tf.mod(x, y, name=None) # 取余 # 冪指對(duì)數(shù)操作符:^ ^2 ^0.5 e^ ln tf.pow(x, y, name=None) # 冪次方 tf.square(x, name=None) # 平方 tf.sqrt(x, name=None) # 開根號(hào),必須傳入浮點(diǎn)數(shù)或復(fù)數(shù) tf.exp(x, name=None) # 計(jì)算 e 的次方 tf.log(x, name=None) # 以 e 為底,必須傳入浮點(diǎn)數(shù)或復(fù)數(shù) # 取符號(hào)、負(fù)、倒數(shù)、絕對(duì)值、近似、兩數(shù)中較大/小的 tf.negative(x, name=None) # 取負(fù)(y = -x). tf.sign(x, name=None) # 返回 x 的符號(hào) tf.reciprocal(x, name=None) # 取倒數(shù) tf.abs(x, name=None) # 求絕對(duì)值 tf.round(x, name=None) # 四舍五入 tf.ceil(x, name=None) # 向上取整 tf.floor(x, name=None) # 向下取整 tf.rint(x, name=None) # 取最接近的整數(shù) tf.maximum(x, y, name=None) # 返回兩tensor中的最大值 (x > y ? x : y) tf.minimum(x, y, name=None) # 返回兩tensor中的最小值 (x < y ? x : y) # 三角函數(shù)和反三角函數(shù) tf.cos(x, name=None) tf.sin(x, name=None) tf.tan(x, name=None) tf.acos(x, name=None) tf.asin(x, name=None) tf.atan(x, name=None) # 其它 tf.div(x, y, name=None) # python 2.7 除法, x/y-->int or x/float(y)-->float tf.truediv(x, y, name=None) # python 3 除法, x/y-->float tf.floordiv(x, y, name=None) # python 3 除法, x//y-->int tf.realdiv(x, y, name=None) tf.truncatediv(x, y, name=None) tf.floor_div(x, y, name=None) tf.truncatemod(x, y, name=None) tf.floormod(x, y, name=None) tf.cross(x, y, name=None) tf.add_n(inputs, name=None) # inputs: A list of Tensor objects, each with same shape and type tf.squared_difference(x, y, name=None)
三、矩陣數(shù)學(xué)函數(shù)
# 矩陣乘法(tensors of rank >= 2)
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)
# 轉(zhuǎn)置,可以通過指定 perm=[1, 0] 來(lái)進(jìn)行軸變換
tf.transpose(a, perm=None, name='transpose')
# 在張量 a 的最后兩個(gè)維度上進(jìn)行轉(zhuǎn)置
tf.matrix_transpose(a, name='matrix_transpose')
# Matrix with two batch dimensions, x.shape is [1, 2, 3, 4]
# tf.matrix_transpose(x) is shape [1, 2, 4, 3]
# 求矩陣的跡
tf.trace(x, name=None)
# 計(jì)算方陣行列式的值
tf.matrix_determinant(input, name=None)
# 求解可逆方陣的逆,input 必須為浮點(diǎn)型或復(fù)數(shù)
tf.matrix_inverse(input, adjoint=None, name=None)
# 奇異值分解
tf.svd(tensor, full_matrices=False, compute_uv=True, name=None)
# QR 分解
tf.qr(input, full_matrices=None, name=None)
# 求張量的范數(shù)(默認(rèn)2)
tf.norm(tensor, ord='euclidean', axis=None, keep_dims=False, name=None)
# 構(gòu)建一個(gè)單位矩陣, 或者 batch 個(gè)矩陣,batch_shape 以 list 的形式傳入
tf.eye(num_rows, num_columns=None, batch_shape=None, dtype=tf.float32, name=None)
# Construct one identity matrix.
tf.eye(2)
==> [[1., 0.],
[0., 1.]]
# Construct a batch of 3 identity matricies, each 2 x 2.
# batch_identity[i, :, :] is a 2 x 2 identity matrix, i = 0, 1, 2.
batch_identity = tf.eye(2, batch_shape=[3])
# Construct one 2 x 3 "identity" matrix
tf.eye(2, num_columns=3)
==> [[ 1., 0., 0.],
[ 0., 1., 0.]]
# 構(gòu)建一個(gè)對(duì)角矩陣,rank = 2*rank(diagonal)
tf.diag(diagonal, name=None)
# 'diagonal' is [1, 2, 3, 4]
tf.diag(diagonal) ==> [[1, 0, 0, 0]
[0, 2, 0, 0]
[0, 0, 3, 0]
[0, 0, 0, 4]]
# 其它
tf.diag_part
tf.matrix_diag
tf.matrix_diag_part
tf.matrix_band_part
tf.matrix_set_diag
tf.cholesky
tf.cholesky_solve
tf.matrix_solve
tf.matrix_triangular_solve
tf.matrix_solve_ls
tf.self_adjoint_eig
tf.self_adjoint_eigvals
四、Reduction:reduce various dimensions of a tensor
# 計(jì)算輸入 tensor 所有元素的和,或者計(jì)算指定的軸所有元素的和 tf.reduce_sum(input_tensor, axis=None, keep_dims=False, name=None) # 'x' is [[1, 1, 1] # [1, 1, 1]] tf.reduce_sum(x) ==> 6 tf.reduce_sum(x, 0) ==> [2, 2, 2] tf.reduce_sum(x, 1) ==> [3, 3] tf.reduce_sum(x, 1, keep_dims=True) ==> [[3], [3]] # 維度不縮減 tf.reduce_sum(x, [0, 1]) ==> 6 # 計(jì)算輸入 tensor 所有元素的均值/最大值/最小值/積/邏輯與/或 # 或者計(jì)算指定的軸所有元素的均值/最大值/最小值/積/邏輯與/或(just like reduce_sum) tf.reduce_mean(input_tensor, axis=None, keep_dims=False, name=None) tf.reduce_max(input_tensor, axis=None, keep_dims=False, name=None) tf.reduce_min(input_tensor, axis=None, keep_dims=False, name=None) tf.reduce_prod(input_tensor, axis=None, keep_dims=False, name=None) tf.reduce_all(input_tensor, axis=None, keep_dims=False, name=None) # 全部滿足條件 tf.reduce_any(input_tensor, axis=None, keep_dims=False, name=None) #至少有一個(gè)滿足條件 ------------------------------------------- # 分界線以上和 Numpy 中相應(yīng)的用法完全一致 ------------------------------------------- # inputs 為一 list, 計(jì)算 list 中所有元素的累計(jì)和, # tf.add(x, y, name=None)只能計(jì)算兩個(gè)元素的和,此函數(shù)相當(dāng)于擴(kuò)展了其功能 tf.accumulate_n(inputs, shape=None, tensor_dtype=None, name=None) # Computes log(sum(exp(elements across dimensions of a tensor))) tf.reduce_logsumexp(input_tensor, axis=None, keep_dims=False, name=None) # Computes number of nonzero elements across dimensions of a tensor tf.count_nonzero(input_tensor, axis=None, keep_dims=False, name=None)
五、Scan:perform scans (running totals) across one axis of a tensor
# Compute the cumulative sum of the tensor x along axis tf.cumsum(x, axis=0, exclusive=False, reverse=False, name=None) # Eg: tf.cumsum([a, b, c]) # => [a, a + b, a + b + c] tf.cumsum([a, b, c], exclusive=True) # => [0, a, a + b] tf.cumsum([a, b, c], reverse=True) # => [a + b + c, b + c, c] tf.cumsum([a, b, c], exclusive=True, reverse=True) # => [b + c, c, 0] # Compute the cumulative product of the tensor x along axis tf.cumprod(x, axis=0, exclusive=False, reverse=False, name=None)
六、Segmentation
沿著第一維(x 軸)根據(jù) segment_ids(list)分割好相應(yīng)的數(shù)據(jù)后再進(jìn)行操作

# Computes the sum/mean/max/min/prod along segments of a tensor tf.segment_sum(data, segment_ids, name=None) # Eg: m = tf.constant([5,1,7,2,3,4,1,3]) s_id = [0,0,0,1,2,2,3,3] s.run(tf.segment_sum(m, segment_ids=s_id)) >array([13, 2, 7, 4], dtype=int32) tf.segment_mean(data, segment_ids, name=None) tf.segment_max(data, segment_ids, name=None) tf.segment_min(data, segment_ids, name=None) tf.segment_prod(data, segment_ids, name=None) # 其它 tf.unsorted_segment_sum tf.sparse_segment_sum tf.sparse_segment_mean tf.sparse_segment_sqrt_n
七、 序列比較與索引提取
# 比較兩個(gè) list 或者 string 的不同,并返回不同的值和索引 tf.setdiff1d(x, y, index_dtype=tf.int32, name=None) # 返回 x 中的唯一值所組成的tensor 和原 tensor 中元素在現(xiàn) tensor 中的索引 tf.unique(x, out_idx=None, name=None) # x if condition else y, condition 為 bool 類型的,可用tf.equal()等來(lái)表示 # x 和 y 的形狀和數(shù)據(jù)類型必須一致 tf.where(condition, x=None, y=None, name=None) # 返回沿著坐標(biāo)軸方向的最大/最小值的索引 tf.argmax(input, axis=None, name=None, output_type=tf.int64) tf.argmin(input, axis=None, name=None, output_type=tf.int64) # x 的值當(dāng)作 y 的索引,range(len(x)) 索引當(dāng)作 y 的值 # y[x[i]] = i for i in [0, 1, ..., len(x) - 1] tf.invert_permutation(x, name=None) # 其它 tf.edit_distance
到此這篇關(guān)于TensorFLow 數(shù)學(xué)運(yùn)算的示例代碼的文章就介紹到這了,更多相關(guān)TensorFLow 數(shù)學(xué)運(yùn)算內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python正則表達(dá)式match和search用法實(shí)例
這篇文章主要介紹了python正則表達(dá)式match和search用法,實(shí)例分析了正則表達(dá)式中match和search的功能、定義及相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
python GUI庫(kù)圖形界面開發(fā)之PyQt5不規(guī)則窗口實(shí)現(xiàn)與顯示GIF動(dòng)畫的詳細(xì)方法與實(shí)例
這篇文章主要介紹了python GUI庫(kù)圖形界面開發(fā)之PyQt5不規(guī)則窗口與顯示GIF動(dòng)畫的詳細(xì)方法與實(shí)例,需要的朋友可以參考下2020-03-03
Python opencv實(shí)現(xiàn)人眼/人臉識(shí)別以及實(shí)時(shí)打碼處理
這篇文章主要為大家詳細(xì)介紹了Python opencv實(shí)現(xiàn)人眼、人臉識(shí)別,以及實(shí)時(shí)打碼處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
科學(xué)Python開發(fā)環(huán)境Spyder必知必會(huì)點(diǎn)
這篇文章主要為大家介紹了科學(xué)Python開發(fā)環(huán)境Spyder必知必會(huì)點(diǎn)及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01

