tensorflow學習(1)
TensorFlow是Google開發的一款神經網路的Python外部的結構包, 也是一個採用資料流圖來進行數值計算的開源軟體庫.TensorFlow 讓我們可以先繪製計算結構圖, 也可以稱是一系列可人機互動的計算操作, 然後把編輯好的Python檔案 轉換成 更高效的C++, 並在後端進行計算.
機器學習:其實就是讓電腦不斷地嘗試模擬已知的資料,他能知道自己擬合的資料離真實資料差距還有多遠,通過不斷的改進自己擬合的引數,提高擬合的相似度.
轉換成
tensorflow處理結構:
首先需要定義神經網路的結構,然後再把資料放入結構中去運算和training
tensorflow是採用資料流圖(data flow graphs)來計算,所以首先我們建立一個數據流圖,然後再將我們的資料(資料以張量(標量,一維向量或者二維矩陣)進行表示,放在資料流中進行計算,節點(nodes)表示數學操作,圖中的線(edge)則表示在節點間相互聯絡的多維向量,訓練模型時,tensor會不斷的從資料流圖中的一個node 流到(flow)到另外一個節點中,這就是tensorflow
張量的定義:
1. 零階張量為 純量或標量 (scalar) 也就是一個數值. 比如 [1]
2.一階張量向量(vector) 比如一維的[1,2,3]
3.二階張量為居中(matrix),比如二維的[[1,2,3]]
tensorflow簡單應用:
匯入資料,建立資料,即原始資料x和標籤y
import tensorflow as tf import numpy as np # create data x_data = np.random.rand(100).astype(np.float32) y_data = x_data*0.1 + 0.3
神經網路會學著把weights變成0.1,把bias變成0.3
進行搭建模型 搭建需要預測的w和b
#隨機初始化weight和bias
Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0)); #表示一維向量 為-1.0到1.0
bias = tf.Variable(tf.zeros([1])); #初始化
#計算預測的輸出值
y = Weights * x_data + bias;
計算誤差和的平均值和平均值的均方誤差.反向傳播採用梯度下降法進行優化.
#計算誤差 和的平均值 均方誤差 loss = tf.reduce_mean(tf.square(y - y_data)); #反向傳播誤差進行優化 使用梯度下降法 Gradient Descent 讓後我們使用 optimizer 來進行引數的更新. optimizer = tf.train.GradientDescentOptimizer(0.5); train = optimizer.minimize(loss);
以上便是建立好的模型.
以下使用session將資料流圖跑起來,注意,要將所有變數進行初始化!!!
#這一步很重要
init = tf.global_variables_initializer();
#建立session 進行初始化
sess = tf.Session();
sess.run(init);
for step in range(201):
#訓練train
sess.run(train);
#如果步長為20 進行列印輸出w和b
if(step % 20 == 0):
print(step,sess.run(Weights),sess.run(bias));
要注意,要列印資料流圖中計算的值,也需要使用sess.run方法.