TensorFlow工具快速入門教程5 TensorFlow簡介
- ofollow,noindex">本書目錄
什麼是TensorFlow?
目前,世界上最出名的深度學習庫是Google的TensorFlow。 Google在其所有產品中使用機器學習來改進搜尋引擎,翻譯,圖片字幕或推薦。
Google使用者可以通過AI體驗更快,更精準的搜尋。如果使用者在搜尋欄中鍵入關鍵字,則Google會提供有關下個字詞的建議。

image
谷歌希望利用機器學習來利用其龐大的資料集,為使用者提供最佳體驗。角色分工有:研究人員、資料科學家、程式員。
谷歌不止擁有世界最大的海量資料,還擁有世界上最龐大的計算機叢集,所以TensorFlow是按比例建造的。 TensorFlow是由Google Brain Team開發的庫,用於加速機器學習和深度神經網路研究。
它在多個CPU或GPU甚至移動作業系統上執行,支援多種語言的包裝器,如Python(為主),C++或Java。
TensorFlow的歷史
幾年前深度學習在提供大量資料時開始超越所有其他機器學習演算法。谷歌看使用這些深度神經網路來改善其服務:Gmail、照片、谷歌搜尋引擎
他們構建了Tensorflow的框架,讓研究人員和開發人員在AI模型上協同工作。
Tensorflow於2015年底首次公開,第一個穩定版本於2017年出現。它基於Apache開源許可。您可以使用它,修改它並重新發布修改後的版本,而無需向Google支付任何費用。
TensorFlow架構
Tensorflow架構分為三個部分:
- 預處理資料
- 建立模型
- 訓練和評估模型
之所以叫Tensorflow,因為它將輸入作為多維陣列,也稱為張量(tensors)。您可以構造對輸入的操作(Graph)流程圖。
TensorFlow能做什麼?
TensorFlow可基於硬體和軟體要求分類
開發階段:訓練模型。可在臺式機或筆記本電腦上完成。
執行或推理階段:Windows,macOS或Linux;雲服務;iOS和Android等移動裝置
您可以在多臺機器上訓練,在其他機器上執行。
該模型可以在GPU和CPU上進行訓練和使用。 GPU最初是為視訊遊戲而設計的。在2010年底,斯坦福大學的研究人員發現GPU在矩陣運算和代數方面也非常擅長,因此它可以非常快速地進行這些計算。深度學習依賴於大量的矩陣乘法。 TensorFlow在計算矩陣乘法時非常快,因為它是用 ++編寫的。雖然它是用C ++實現的,但TensorFlow可以被其他語言(主要是Python)訪問和控制。
最後,TensorFlow的一個重要特徵是TensorBoard。 TensorBoard可以圖形化和直觀地監控TensorFlow正在做什麼。
TensorFlow元件簡介
- Tensor
所有計算都涉及張量。張量是n維的向量或矩陣,表示所有型別的資料。張量中的所有值都保持具有已知(或部分已知)形狀的相同資料型別。資料的形狀是矩陣或陣列的維數。
張量可以源自輸入資料或計算結果。在TensorFlow中,所有操作都在圖形內部進行。圖一組連續發生的計算。每個操作都稱為操作節點,並相互連線。
該圖概述了節點之間的操作和連線。但是,它不顯示值。節點的邊緣是張量,即計算資料操作的方法。
- Graph:圖
圖收集並描述了訓練期間完成的所有系列計算。
它可以在多個CPU或GPU甚至移動作業系統上執行。圖的可移植性允許保留計算以立即或稍後使用。圖中的所有計算都是通過將張量連線在一起來完成的
張量具有節點和邊緣。節點承載數學運算併產生端點輸出。邊緣到邊緣解釋了節點之間的輸入/輸出關係。
為什麼TensorFlow很受歡迎?
Tensorflow庫結合了不同的API來構建大規模的深度學習架構,如CNN或RNN。 TensorFlow基於圖形計算;它允許開發人員用Tensorboad視覺化神經網路的構造。Tensorflow易於除錯。最後,Tensorflow可以大規模部署。它執行在CPU和GPU上。
與其他深度學習框架相比,Tensorflow在GitHub上吸引了最大的人氣。
TensorFlow支援的演算法
目前,TensorFlow 1.10內建API支援:
- 線性迴歸:tf.estimator.LinearRegressor
- 分類:tf.estimator.LinearClassifier
- 深度學習分類:tf.estimator.DNNClassifier
- 深度學習擦除和深度:tf.estimator.DNNLinearCombinedClassifier
- Booster 樹迴歸:tf.estimator.BoostedTreesRegressor
- Boosted樹分類:tf.estimator.BoostedTreesClassifier
簡單的TensorFlow示例

圖片.png
在示例中,我們將X_1和X_2相乘。 Tensorflow將建立節點來連線操作。在我們的例子中,它被稱為multiply。確定圖形後,Tensorflow計算引擎將X_1和X_2相乘。
最後,我們將執行TensorFlow會話,該會話將執行具有X_1和X_2值的計算圖並列印乘法的結果。
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author:xurongzhong#126.com wechat:pythontesting qq:37391319 # 技術支援 釘釘群:21745728(可以加釘釘pythontesting邀請加入) # qq群:144081101 591302926567351477 # CreateDate: 2018-11-21 import numpy as np import tensorflow as tf X_1 = tf.placeholder(tf.float32, name = "X_1") X_2 = tf.placeholder(tf.float32, name = "X_2") multiply = tf.multiply(X_1, X_2, name = "multiply") with tf.Session() as session: result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]}) print(result)
執行結果
[ 4. 10. 18.]
參考資料
- 討論qq群144081101 591302926 567351477 釘釘群21745728
- 本文最新版本地址
- 本文涉及的python測試開發庫 謝謝點贊!
- 本文相關海量書籍下載
- 2018最佳人工智慧機器學習工具書及下載(持續更新)
將資料載入到TensorFlow
兩種公共方式可以載入資料:
1.將資料載入到記憶體中:這是最簡單的方法。您將所有資料作為單個數組載入到記憶體中。您可以編寫Python程式碼。程式碼與Tensorflow無關。
- Tensorflow資料管道。 Tensorflow具有內建API,可幫助您輕鬆載入資料,執行操作並提供機器學習演算法。此方法非常有效,尤其是當您擁有大型資料集時。
如果您的資料集不是太大,即小於10G,則可以使用第一種方法。用Pandas匯入CSV檔案。
如果您有一個大型資料集,第二種方法效果最好。例如,如果您有50G的資料集,並且您的計算機只有16G的記憶體,那麼計算機將crash。
在這種情況下,您需要構建Tensorflow管道。管道將以批量或小塊的形式載入資料。每批都將被推送到管道並準備好進行培訓。構建管道是一個很好的解決方案,因為它允許您使用平行計算。這意味著Tensorflow將在多個CPU上訓練模型。它加快計算並允許訓練強大的神經網路。
簡而言之,小資料集可以使用Pandas庫將資料載入到記憶體中。大型資料集並且想要使用多個CPU,那麼使用Tensorflow管道會更加舒適。
建立Tensorflow管道
在之前的示例中,我們手動為X_1和X_2新增三個值。現在我們將看到如何將資料載入到Tensorflow。
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author:xurongzhong#126.com wechat:pythontesting qq:37391319 # 技術支援 釘釘群:21745728(可以加釘釘pythontesting邀請加入) # qq群:144081101 591302926567351477 # CreateDate: 2018-11-21 import numpy as np import tensorflow as tf x_input = np.random.sample((1,2)) print(x_input) # using a placeholder x = tf.placeholder(tf.float32, shape=[1,2], name = 'X') dataset = tf.data.Dataset.from_tensor_slices(x) iterator = dataset.make_initializable_iterator() get_next = iterator.get_next() with tf.Session() as sess: # feed the placeholder with data sess.run(iterator.initializer, feed_dict={ x: x_input }) print(sess.run(get_next)) # output [ 0.523744580.71968478]
執行結果
[[0.05395269 0.716471]] [0.05395269 0.716471]