摘要:向量雖然簡單,高效,且容易理解??焖偕上蛄康姆椒ê瘮?shù)生成等差數(shù)列函數(shù)用來快速生成一個等差數(shù)列。例拼瓷磚就是將一段向量重復若干次。向量操作將向量反序可以使用函數(shù)。向量計算向量加減法同樣長度的向量之間可以進行加減操作。
摘要: Tensorflow向量操作
向量向量在編程語言中就是最常用的一維數(shù)組。
二維數(shù)組叫做矩陣,三維以上叫做張量。
向量雖然簡單,高效,且容易理解。但是與操作0維的標量數(shù)據(jù)畢竟還是不同的。比如向量經(jīng)常用于表示一個序列,生成序列像標量一樣一個一個手工寫就不劃算了。當然可以用循環(huán)來寫。在向量中這樣還好,如果是在矩陣或者是張量中就強烈建議不要用循環(huán)來做了。系統(tǒng)提供的函數(shù)一般都是經(jīng)過高度優(yōu)化的,而且可以使用GPU資源來進行加速。
我們一方面盡可能地多使用系統(tǒng)的函數(shù),另一方面也不要迷信它們,代碼優(yōu)化是一個實踐的過程,可以實際比較測量一下。
range函數(shù)生成等差數(shù)列
tf.range函數(shù)用來快速生成一個等差數(shù)列。相當于之前我們講numpy時的np.arange函數(shù)。
原型:
tf.range(start, limit, delta=1, dtype=None, name="range")
例:
>>> b11 = tf.range(1,100,1) >>> b11linspace生成浮點等差數(shù)組>>> sess.run(b11) array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], dtype=int32)
tf.linspace與tf.range的區(qū)別在于,數(shù)據(jù)類型不同。
tf.lin_space( start, stop, num, name=None )
其中,start和stop必須是浮點數(shù),且類型必須相同。num必須是整數(shù)。
例:
>>> a2 = tf.linspace(1.0,10.0,4) >>> a2拼瓷磚>>> sess.run(a2) array([ 1., 4., 7., 10.], dtype=float32)
就是將一段向量重復若干次。
>>> a10 = tf.range(1,4,1) >>> sess.run(a10) array([1, 2, 3], dtype=int32) >>> a11 = tf.tile(a10,[3]) >>> sess.run(a11) array([1, 2, 3, 1, 2, 3, 1, 2, 3], dtype=int32)向量操作
將向量反序
可以使用tf.reverse函數(shù)。
原型:
tf.reverse( tensor, axis, name=None )
tensor是向量,axis軸對于向量不重要,給個[-1]就可以了。折騰軸是張量時間的事情,暫時還用不到。
>>> a2 = tf.linspace(1.0,10.0,4) >>> a3 = tf.reverse(a2,[-1]) >>> sess.run(a3) array([10., 7., 4., 1.], dtype=float32)切片
切片也是向量的常用操作之一,就是取數(shù)組的一部分。
例:
>>> a5 = tf.linspace(1.0,100.0, 10) >>> sess.run(a5) array([ 1., 12., 23., 34., 45., 56., 67., 78., 89., 100.], dtype=float32) >>> a6 = tf.slice(a5, [2],[4]) >>> sess.run(a6) array([23., 34., 45., 56.], dtype=float32)
將來處理張量時,我們從一個矩陣切一塊,或從一個張量中切一塊,就好玩得多了。但是原理跟向量上是一樣的。
連接tf.concat也是需要給定軸信息的。對于兩個線性的向量,我們給0或者-1就好。
>>> a20 = tf.linspace(1.0,2.0,10) >>> sess.run(a20) array([1. , 1.1111112, 1.2222222, 1.3333334, 1.4444444, 1.5555556, 1.6666667, 1.7777778, 1.8888888, 2. ], dtype=float32) >>> a21 = tf.linspace(2.0,3.0,5) >>> sess.run(a22) array([1. , 1.1111112, 1.2222222, 1.3333334, 1.4444444, 1.5555556, 1.6666667, 1.7777778, 1.8888888, 2. , 2. , 2.25 , 2.5 , 2.75 , 3. ], dtype=float32) >>> a23 = tf.concat([a20,a21],-1) >>> sess.run(a23) array([1. , 1.1111112, 1.2222222, 1.3333334, 1.4444444, 1.5555556, 1.6666667, 1.7777778, 1.8888888, 2. , 2. , 2.25 , 2.5 , 2.75 , 3. ], dtype=float32)向量計算
向量加減法
同樣長度的向量之間可以進行加減操作。
例:
>>> a40 = tf.constant([1,1]) >>> a41 = tf.constant([2,2]) >>> a42 = a40 + a41 >>> sess.run(a42) array([3, 3], dtype=int32) >>> a43 = a40 - a41 >>> sess.run(a43) array([-1, -1], dtype=int32) >>> a43
向量乘除標量
向量乘除標量也非常好理解,就是針對向量中的每個數(shù)都做乘除法。
例:
>>> a44 = a40 * 2 >>> sess.run(a44) array([2, 2], dtype=int32) >>> a45 = a44 / 2 >>> sess.run(a45) array([1., 1.]) >>> a44>>> a45
廣播運算
如果針對向量和標量進行加減運算,也是會對向量中的每個數(shù)進行加減運算。這種操作稱為廣播操作。
例:
**>>> a46 = a40 + 1
小結(jié)sess.run(a46)
array([2, 2], dtype=int32)
a46**
從上面我們學習的函數(shù)我們可以看到,與普通語言中提供的函數(shù)多是為一維數(shù)組操作不同,Tensorflow中的切片、拼接等操作也是基于張量的。
當我們后面學到張量遇到困難時,不妨回來看下這一節(jié)。不管后面張量多么復雜,其實也只是從一維向二維和多維推廣而己。
詳情請閱讀原文
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41588.html
摘要:當時,范數(shù)稱為歐幾里得范數(shù)。更嚴格地說,范數(shù)是滿足下列性質(zhì)的任意函數(shù)這條被稱為三角不等式范數(shù)的推廣除了范數(shù)之外,在機器學習中還常用范數(shù),就是所有元素的絕對值的和。 摘要: 范數(shù)的定義和Tensorflow實現(xiàn) 矩陣進階 - 范數(shù) 作為快餐教程,我們盡可能多上代碼,多介紹工具,少講原理和公式。但是我也深知這樣是無法講清楚的,畢竟問題的復雜度擺在這里呢。與大家一起在Tensorflow探索...
閱讀 819·2023-04-25 20:18
閱讀 2104·2021-11-22 13:54
閱讀 2546·2021-09-26 09:55
閱讀 3912·2021-09-22 15:28
閱讀 2982·2021-09-03 10:34
閱讀 1719·2021-07-28 00:15
閱讀 1644·2019-08-30 14:25
閱讀 1288·2019-08-29 17:16