[tensorflow in a nutshell] tensorflow簡明教程 (第一部分)

原文連接: https://medium.com/@camrongodbout/tensorflow-in-a-nutshell-part-one-basics-3f4403709c9d#.31jv5ekoy算法

 

學習世界上最流行的深度學習框架的最快最簡單的教程

(其實這個系列寫的差強人意,可是的確是學習tensflow精簡的教程,比較適合新手入門,高手請繞行--------譯者注)shell

tensorflow是google公司推出的深度學習框架。深度學習是一類採用多層神經網絡的機器學習算法。深度學習的思想最先在1943年由神經物理學家Warren McCulloch和數學家Walter Pitts提出,他們在一篇文章裏面討論了神經元的工做原理以及如何採用數字電路模擬一個簡單的神經網絡。數組

從那時候起,不少工做逐步發展起來。然而, 伴隨這些高度精確的數學模型的是複雜的計算量。近年來,隨着GPU和CPU處理速度的提高,深度學習變得流行起來。網絡

tensorflow的設計,受到了機器處理速度限制的影響。這個工具在2015年11月開源,目前可以在包括手機在內的各類計算機上運行。它能夠用來編寫各類訓練模型,也是此時此刻最流行的深度學習框架。session

計算圖的基礎知識

在tensorflow裏面,任何事情都是構建在計算圖的基礎上的。若是你以前用過theano,這部份內容會看起來很熟悉。咱們能夠把計算圖看成網絡的節點,其中,每一個節點都表示某種操做,就像運行某個函數同樣,好比簡單的加減,或者複雜的多變量運算。框架

每一個運算能夠返回一個值,或者其餘的張量,這些張量能夠用在後續圖中。下面是一些簡單的例子。less

 1 import tensorflow as tf
 2 
 3 
 4 tf.add(1, 2)
 5 # 3
 6 
 7 tf.sub(2, 1)
 8 # 1
 9 
10 tf.mul(2, 2)
11 # 4
12 
13 tf.div(2, 2)
14 # 1
15 
16 tf.mod(4, 5)
17 # 4
18 
19 tf.pow(3, 2)
20 # 9
21 
22 # x < y
23 tf.less(1, 2)
24 # True 
25 
26 # x <= y
27 tf.less_equal(1, 1)
28 # True
29 
30 tf.greater(1, 2)
31 # False
32 
33 tf.greater_equal(1, 2)
34 # False
35 
36 tf.logical_and(True, False)
37 # False
38 
39 tf.logical_or(True, False)
40 # True
41 
42 tf.logical_xor(True, False)
43 # True

每一個操做都能處理常量,矩陣,數組,或者多維矩陣。多維矩陣也就是一個張量,而二維張量就是一個m * m的矩陣。dom

 1 import tensorflow as tf
 2 
 3 # create a constant 2X2 matrix
 4 tensor_1 = tf.constant([[1., 2.], [3.,4]])
 5 
 6 tensor_2 = tf.constant([[5.,6.],[7.,8.]])
 7 
 8 # create a matrix multiplication operation
 9 output_tensor = tf.matmul(tensor_1, tensor_2)
10 
11 # have to run the graph using a session
12 sess = tf.Session()
13 
14 result = sess.run(output_tensor)
15 print(result)
16 
17 sess.close()

上述代碼建立了兩個常數張量,並把它們的成績輸出來。這個簡單的例子展現瞭如何建立一個圖而且執行它。全部須要的輸入都自動運行,並且它們還能夠並行的執行。執行過程涉及到圖中的三個操做,建立兩個常量,和矩陣的乘法。機器學習

在tensorflow中,咱們建立的變量和操做會自動的加到圖中。在引入tensorflow的時候,系統會自動的構建一個缺省的圖。建立一個圖,而不採用默認的圖,在一個文件構建多個獨立模型的時候,是很是有用的。函數

1 new_graph = tf.Graph()
2 with new_graph.as_default():
3     new_g_const = tf.constant([1., 2.])

全部在with new_graph.as_default()以外的變量和操做會加到系統默認的圖上,下面的代碼能夠獲得一個默認圖的句柄。

1 default_g = tf.get_default_graph()

大部分狀況下,這是獲得系統默認圖最好的方法。

運行週期

tensorflow中有兩種運行週期。

tf.Session()

它封裝了操做和張量執行的環境。運行週期能夠有它們本身的變量,隊列。因此,運行週期結束的時候,須要調用close()函數結束掉。運行週期有三個可選的參數,分別爲:

1. target:要鏈接的執行引擎

2. graph:須要啓動的圖

3.config:一些配置

tf.InteractiveSession()

它和前面的tf.session()很是相似,只不過這個執行週期是爲IPython和 Jupyter Notebooks設計的,它能夠容許你添加一些東西,並經過調用Tensor.eval()以及Operation.run()來執行,而不須要每次執行session.run()來執行。

1 sess = tf.InteractiveSession()
2 a = tf.constant(1)
3 b = tf.constant(2)
4 c = a + b
5 # instead of sess.run(c)
6 c.eval()

InteractiveSession 容許你不用顯式的傳遞一個session對象。

變量

在tensorflow中,變量是由運行週期Session管理的。它們存在於session之間,這是很是有用的,由於張量和操做這些對象是不變的。變量的建立過程以下:

1 tensorflow_var = tf.Variable(1, name="my_variable")

大多數時候,你但願建立各類0,1或者隨機張量。

  • tf.zeros() — 建立全零矩陣
  • tf.ones() — 建立全1矩陣
  • tf.random_normal() — 兩個數之間的隨機數矩陣
  • tf.random_uniform() — 隨機數矩陣
  • tf.truncated_normal() — 和前面相似,可是不包括大於隨機方差的數

 這些函數能夠定義生成的矩陣的尺寸,好比

1 # 4x4x4 matrix normally distribued mean 0 std 1
2 normal = tf.truncated_normal([4, 4, 4], mean=0.0, stddev=1.0)

爲了把變量設置成這些矩陣,咱們能夠

1 normal_var = tf.Variable(tf.truncated_normal([4,4,4] , mean=0.0, stddev=1.0)

爲了初始化這些變量,須要在session裏面,執行初始化操做,這和多個session運行變量是同樣的。

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

若是想要徹底改變變量的值,你能夠調用variable.assign()函數,這個函數也須要在一個session裏面執行

 1 initial_var = tf.Variable(1)
 2 changed_var = initial_var.assign(initial_var + initial_var)
 3 init = tf.initialize_all_variables()
 4 sess = tf.Session()
 5 sess.run(init)
 6 sess.run(changed_var)
 7 # 2
 8 sess.run(changed_var)
 9 # 4
10 sess.run(changed_var)
11 # 8

有時候,你須要對變量添加一些東西,你須要執行variable.assign_add()函數,該函數輸入一個數爲參數,並把該數添加到變量上。函數variable.assign_sub()相似。

1 counter = tf.Variable(0)
2 sess.run(counter.assign_add(1))
3 # 1
4 sess.run(counter.assign_sub(1))
5 # -1

做用域

爲了控制模型的複雜度並儘量簡單的把模型劃分紅更小的片斷,tensorflow引入了做用域。做用域是個很是見的概念,

1 with tf.name_scope("Scope1"):
2     with tf.name_scope("Scope_nested"):
3         nested_var = tf.mul(5, 5)

可能這裏還不能看到做用域的做用,可是在第二部分學習TensorBoard的時候,咱們就會看到它的用途。

小結

這裏展現了不少tensorflow的重要組成部分。這些獨立的部分組合在一塊兒就能夠構建複雜的模型。

相關文章
相關標籤/搜索