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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章