tensorflow

一.簡介node

1.tensorflow (tensor+flow)(張量+流動):維度(dimension number)(秩)(Rank)爲0、一、2時分別稱爲標量(數字)(scalar)、向量(vector)(一維數組)和矩陣(二維數組),維度爲3時是3階張量,維度大於3時是N階張量。張量(數據結構:多維數組)本質是數據,因此tensorflow是用來處理數據(張量)流動的框架,尤爲多維張量,較多涉及機器學習和深度學習等。流:計算模型:張量之間經過計算而轉換的過程python

2.tensorflow利用了數據流圖,(數據流圖用「結點」(nodes)和「線」(edges)的有向圖來描述數學計算),因此tensorflow包括 數據(Data)、流(Flow)、圖(Graph)三大部分。數組

3.Tensorflow架構分爲三個部分:預處理數據、tensor創建模型、訓練和評估模型。瀏覽器

4.TensorBoard能夠圖形化和直觀地監控TensorFlow正在作什麼。網絡

5.使用圖(Graph)表示計算流程,在會話(Session)中執行圖,使用張量(Tensor)表示數據,使用變量(Variable)維護狀態,使用feed和fetch爲任意的操做賦值或從中獲取數據session

6.運行過程:(1)建立或導入數據,(2)建立圖(結構):一個計算任務中的全部變量和計算方式、、、數據結構

7.它是開放源代碼軟件庫,用於高性能數值計算,將計算工做部署到多種平臺GPU,CPU等設備()架構

 

二.構建計算圖並執行框架

1.計算圖(至關於數據流圖):計算圖上每一個節點爲一個張量對象(操做或張量),節點之間的邊表示計算之間的關係(即數據傳遞)(實線--數據流動,虛線--控制依賴)。邊是有方向的,代表運行的順序dom

2.計算圖的構建包括節點和邊。

(1)節點能夠有0個或多個輸出,但只能有一個輸出。包括:常量、變量、佔位符;

(2)邊表示運算操做之間流動的張量

(3)計算圖的執行要經過session會話對象。

常量

 1 import tensorflow as tf  # 導入包
 2 
 3 # 定義常量,它將做爲一個節點加入到默認計算圖內,它運行時值不會改變,無需初始化
 4 # 1.定義的常量能夠是字符串,數字,張量...
 5 t_1 = tf.constant('常量')
 6 t_2 = tf.constant([4, 3, 2])
 7 t_3 = tf.constant(4)
 8 
 9 # 2.屬性name可選,建議寫(tensorboard可視化),類型dtype=None, 形狀shape=None
10 ten1 = tf.constant([[1,2,3],[2,4,5]], dtype=tf.float16, shape=[3,2],name='tens1')
11 
12 # 3.能夠建立特殊常量(張量對象),相似numpy建立數組
13 t_4 = tf.zeros([3,2],tf.int32)  # 建立一個全部元素爲零的張量
14 t_5 = tf.ones([2,5],tf.int32)  # 建立一個全部元素都設爲 1 的張量
15 t_6 = tf.linspace(2.0,5.0,5)  # 等差序列
16 t_7 = tf.range(10)  # 生成一個數字序列
17 t_8 = tf.random_normal([2, 3])  # 建立一個正態分佈隨機數組
18 t_9 = tf.random_crop(t_8,[2,5],seed=12)  # 將給定的張量隨機裁剪爲指定的大小
19 t_10 = tf.random_shuffle(t_8)  # 以隨機的順序來呈現訓練樣本
20 tf.set_random_seed(54)  # 爲全部隨機產生的張量設置種子
21 
22 # 上下文管理,創建對話(session)並顯示運行(run)結果,並關閉會話(session),釋放資源
23 with tf.Session() as sess:
24     print(t_2)  # 一個張量對象
25     print(sess.run(t_2))  # 運行張量對象並獲取值
26     print(t_2.eval())  # 獲取張量值,
27 ---------------------------------------------------------
28 [4 3 2]
29 [4 3 2]
常量

 

變量

 1 import tensorflow as tf
 2 # Varial(value,name)變量,運行過程當中會改變,建立時必須有顯示初始化的常量/隨機值
 3 
 4 # 變量要有初始化操做,變量一般在神經網絡中表示權重和偏置
 5 t_1 = tf.Variable(2, name='w1')  # 建立變量(值,類型,名稱)
 6 t_2 = tf.Variable(4, name='w2')
 7 t_3 = tf.assign(t_1, t_2)  # assign更新節點,替代賦值,
 8 # init_op = t_1.initializer()  # 個別變量初始化
 9 
10 with tf.Session() as sess:
11     init = tf.global_variables_initializer()  # 在它以前全部變量初始化,本質是一個操做靜態節點
12     sess.run(init)  # 必須運行(初始化變量)這個操做
13     print(sess.run(t_1))
14     print(sess.run(t_2))
15     print(sess.run(t_3))
16 ---------------------------------------------------
17 2
18 4
19 4
變量

 

佔位符

 1 # 佔位符 placeholder ,有些變量定義時不知道其值,只有真正開始運行程序時才由外部輸入,好比訓練數據,這時候須要佔位符
 2 # tf.placeholder(dtype,shape=None,name=None) 相似動態變量,函數的參數或c、python中格式化輸出時的%佔位符
 3 # feed提交數據,Fetch提取數據
 4 import tensorflow as tf
 5 
 6 a = tf.placeholder(tf.float32, name='A')  # 佔位符,無需初始化,但運行時需feed_dict字典傳參
 7 b = tf.placeholder(tf.float32, name='B')
 8 c = tf.multiply(a, b, name='C')
 9 d= tf.subtract(a, b, name='D')
10 
11 init = tf.global_variables_initializer()
12 
13 with tf.Session() as sess:
14     sess.run(init)
15     result = sess.run(c, feed_dict={a: 8.0, b: 3.5})  # feed_dict字典格式參數傳值
16     result2 = sess.run([c,d], feed_dict={a: [8.0,2.0,6.3], b: [6.2,3.2,3.5]})  # 返回值相似列表
17     # 多個操做能夠經過一次feed完成執行
18     print(result2[0])  # 取第一個c
19 -------------------------------------------
20 [49.6       6.4      22.050001]
佔位符

會話:擁有並管理tensorflow程序運行時的全部資源,當計算完成時須要關閉會話幫助系統回收資源

 1 #會話,Tensorflow不會自動生成默認的會話,須要手動指定
 2 import tensorflow as tf
 3 tf.reset_default_graph()  # reset_default_graph() 清除計算圖default graph 和不斷增長的節點
 4 value = tf.Variable(0, name='value',trainable=False)  #無需參加訓練
 5 sess = tf.Session()
 6 with sess.as_default(): #指定默認會話,則能夠經過tf.Tensor.eval函數來計算一個張量的取值
 7     print(value.eval())  #eval必需要有默認會話,若上面沒有指定則print(re.eval(session=sess)) 
 8     
 9 # 2.在交互式環境下設置默認會話
10 sess = tf.InteractiveSession()  # 自動地將生成的會話註冊爲默認會話
11 print(value.eval())
12 sess.close()
會話

 (4)其餘

shape(a,b,c,...)#a最外圍元素個數,b次外圍元素個數,   

 .get_shape()得到張量的結構

dtype類型(14):默認:不帶小數點會被認爲int32,帶小數點會被認爲float32

 

三.可視化tensorboard

利用日誌

 1 #tensorboard 是 tensorflow的可視化工具
 2 # 經過tensorflow程序運行過程當中輸出的日誌文件可視化tensorflow程序的運行轉檯
 3 # tb和tf程序跑在不一樣的進程中
 4 # 1.定義日誌存放路徑
 5 import tensorflow as tf
 6 tf.reset_default_graph()  # 清除計算圖default graph 和不斷增長的節點
 7 logdir = 'E:\python_work\machine_learning\tensflow_learning'  # 存放日誌的路徑
 8 
 9 # 構建一個計算圖,定義要顯示的信息
10 value = tf.Variable(0, name='value')
11 one = tf.constant(1)
12 new_value = tf.add(value, one)
13 updata_value = tf.assign(value, new_value)  # 更新節點,替代賦值
14 # 建立一個操做,用於記錄損失值loss,後面在tensorboard中scalars中可見
15 # sum_loss_op = tf.summary.scalar('loss',loss_function)
16 # tf.summary.image('input',image,10) #輸入的樣本圖像加入summary
17 # tf.summary.histogram('forward',forward),前向輸出值在以直方圖顯示
18 # tf.summary.scalar('loss',loss_function) 將loss損失以標量顯示
19 # tf.summary.scalar('accuracy',accuracy) 將accuracy以標量顯示
20 init = tf.global_variables_initializer()  # 變量初始化
21 
22 with tf.Session() as sess:
23     sess.run(init)  # 執行初始化操做
24     for _ in range(10):
25         sess.run(updata_value)
26         print(sess.run(value))
27         
28 #構建結束
29 
30 # 3.生成一個寫日誌的writer,並將當前的Tensorflow計算圖寫入日誌
31 merged_summary_op = tf.summary.merge_all() #合併全部summary
32 writer = tf.summary.FileWriter(logdir,tf.get_default_graph())
33 writer.close()
34 
35 # 4.利用存儲的日誌啓動tensorboard
36 # 在anaconda prompt中先進入日誌存放的目錄(重要)
37 # 在運行tensorboard ,並將日誌的地址指向程序日誌輸出的地址
38 # 命令:tensorboard --logdir=/path/log
39 # 啓動服務的端口默認爲6006;使用--port參數能夠改變啓動服務的端口
40 #最後瀏覽器查看
可視化

 

四.CPU和GPU

GPU:優先考慮,計算密集型的程序,易於並行的程序,速度快

CPU:適合矩陣運算,神經網絡的處理過程正好適合GPU發揮性能

相關文章
相關標籤/搜索