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方法.