Tensorflow 是谷歌開發(fā)的深度學習系統(tǒng),用它可以很快速地入門神經網絡。
它可以做分類,也可以做擬合問題,就是要把這個模式給模擬出來。
這是一個基本的神經網絡的結構,有輸入層,隱藏層,和輸出層。
每一層點開都有它相應的內容,函數和功能。
那我們要做的就是要建立一個這樣的結構,然后把數據喂進去。
把數據放進去后它就可以自己運行,TensorFlow 翻譯過來就是向量在里面飛。
這個動圖的解釋就是,在輸入層輸入數據,然后數據飛到隱藏層飛到輸出層,用梯度下降處理,梯度下降會對幾個參數進行更新和完善,更新后的參數再次跑到隱藏層去學習,這樣一直循環(huán)直到結果收斂。
因為TensorFlow是采用數據流圖(data flow graphs)來計算, 所以首先我們得創(chuàng)建一個數據流流圖, 然后再將我們的數據(數據以張量(tensor)的形式存在)放在數據流圖中計算. 節(jié)點(Nodes)在圖中表示數學操作,圖中的線(edges)則表示在節(jié)點間相互聯(lián)系的多維數據數組, 即張量(tensor). 訓練模型時tensor會不斷的從數據流圖中的一個節(jié)點flow到另一節(jié)點, 這就是TensorFlow名字的由來.
張量(tensor):
張量有多種. 零階張量為 純量或標量 (scalar) 也就是一個數值. 比如 [1]
一階張量為 向量 (vector), 比如 一維的 [1, 2, 3]
二階張量為 矩陣 (matrix), 比如 二維的 [[1, 2, 3],[4, 5, 6],[7, 8, 9]]
以此類推, 還有 三階 三維的 …
簡單線性預測例子
import sys
print(sys.version)
'''
3.5.3 |Continuum Analytics, Inc.| (default, May 15 2017, 10:43:23) [MSC v.1900 64 bit (AMD64)]
'''
import tensorflow as tf
import numpy as np
# shape=tuple ,size=100
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data*0.1 + 0.3 #實際值
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))#[1],一個數,范圍從-1.0到1.0
biases = tf.Variable(tf.zeros([1]))#初始值0
y = Weights*x_data + biases#框架
loss = tf.reduce_mean(tf.square(y-y_data))#定義誤差(square平方)
#梯度下降法
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
# init = tf.initialize_all_variables() # tf 馬上就要廢棄這種寫法
init = tf.global_variables_initializer() # 替換成這樣就好
sess = tf.Session()
sess.run(init) # Very important
for step in range(201):#訓練200次
sess.run(train)
if step % 20 == 0:
print(step, sess.run(Weights), sess.run(biases))#越來越接近真實w和b
輸出
0 [-0.01233229] [ 0.479366]
20 [ 0.04969411] [ 0.32581243]
40 [ 0.08435673] [ 0.30802673]
60 [ 0.09513554] [ 0.30249602]
80 [ 0.09848735] [ 0.30077615]
100 [ 0.09952962] [ 0.30024135]
120 [ 0.09985375] [ 0.30007505]
140 [ 0.09995452] [ 0.30002335]
160 [ 0.09998586] [ 0.30000728]
180 [ 0.09999558] [ 0.30000228]
200 [ 0.09999862] [ 0.30000073]