tensorflow入門(一)---從一個小程式說起
阿新 • • 發佈:2019-02-14
我們現在需要擬合一條直線,通常我們會選用最小二乘的方法,通過程式設計優化實現,現在我們先用tensorflow提供的API來實現這個程式。麻雀雖小五臟俱全,裡面會涉及到很多tensorflow的核心API和思想:
我們隨機生成100個點,然後對這個點進行擬合,通過梯度下降演算法來優化得到引數:
# 得到最佳擬合結果 W: [[0.100 0.200]], b: [0.300]
tensorflow可以拆解成兩個詞:tensor(張量)和flow(流)其中tensor是這個深度學習框架的基本資料結構,所有的資料都由tensor承載,tensor是一個多為陣列類似於caffe中的blob。tensorflow通過圖來表示計算任務,圖中的節點被稱為op(operation),一個op獲得0個或者多個的tensor,產生0或者多個tensor。
一個tensorflow圖描述了計算的過程,圖必須在會話中被啟動,在python中圖執行完畢返回的是一個numpy ndarray物件。在使用之前我們還需明確幾個tensorflow的特性:
1. 使用圖(graph)來表示計算任務
2. 在會話(Session)中執行圖
3. 使用tensor表示資料
4. 通過變數維護當前優化狀態
5. 使用feed和fetch為任意操作賦值或者從中獲取資料
使用tensor進行深度學習甚至是機器學習演算法的實現變得更加的簡單:我們只需要構建出關係圖,然後tensorflow提供的優化器會幫我們自動的完成優化工作。即:執行sess.run(loss),和loss相關的整個圖會被執行,其中的Variable會被自動的優化。
我們隨機生成100個點,然後對這個點進行擬合,通過梯度下降演算法來優化得到引數:
import tensorflow as tf import numpy as np import os # 只使用第一塊GPU來計算,如果不指定的話會呼叫所有可能資源,這樣對伺服器壓力太大 os.environ["CUDA_VISIBLE_DEVICES"] = '0' # 使用 NumPy 生成假資料總共 100 個點. x_data = np.float32(np.random.rand(2, 100)) # 隨機產生100個值為0-1的點 y_data = np.dot([0.100, 0.200], x_data) + 0.300 # 產生標籤,點乘 # 構造一個線性模型 # b = tf.Variable(tf.zeros([1])) W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0)) y = tf.matmul(W, x_data) + b # 建立模型與資料之間的關係,最小化方差 loss = tf.reduce_mean(tf.square(y - y_data)) # 設定優化器,傳入的引數是lr optimizer = tf.train.GradientDescentOptimizer(0.5) # 確定最小化loss train = optimizer.minimize(loss) # 初始化所有變數 init = tf.initialize_all_variables() # 啟動圖 (graph) sess = tf.Session() #初始化變數 sess.run(init) # 擬合平面 with tf.Session() as sess: #這種指定GPU的方法會報錯,因為不是所有的計算GPU都可以完成的,如果非要使用這種方法 #需要分開返回指令,即進行矩陣乘法運算(MatMul)的時候使用GPU否則使用CPU #with tf.device("/gpu:0"): for step in xrange(0, 201): sess.run(train) if step % 20 == 0: print step, sess.run(W), sess.run(b)
# 得到最佳擬合結果 W: [[0.100 0.200]], b: [0.300]
tensorflow可以拆解成兩個詞:tensor(張量)和flow(流)其中tensor是這個深度學習框架的基本資料結構,所有的資料都由tensor承載,tensor是一個多為陣列類似於caffe中的blob。tensorflow通過圖來表示計算任務,圖中的節點被稱為op(operation),一個op獲得0個或者多個的tensor,產生0或者多個tensor。
一個tensorflow圖描述了計算的過程,圖必須在會話中被啟動,在python中圖執行完畢返回的是一個numpy ndarray物件。在使用之前我們還需明確幾個tensorflow的特性:
1. 使用圖(graph)來表示計算任務
2. 在會話(Session)中執行圖
3. 使用tensor表示資料
4. 通過變數維護當前優化狀態
5. 使用feed和fetch為任意操作賦值或者從中獲取資料
使用tensor進行深度學習甚至是機器學習演算法的實現變得更加的簡單:我們只需要構建出關係圖,然後tensorflow提供的優化器會幫我們自動的完成優化工作。即:執行sess.run(loss),和loss相關的整個圖會被執行,其中的Variable會被自動的優化。