1. 程式人生 > >tensorflow學習(1)

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