1. 程式人生 > >TensorFlow學習之路(1)擬合線性方程

TensorFlow學習之路(1)擬合線性方程

TensorFlow是Google開源的一個深度學習框架,之前接觸過一些但是沒有好好的深入瞭解,從這篇文章開始記錄自己所學到的知識。本次主要記錄一個簡單的例子,以後會慢慢深入,包括多層神經網路,卷積神經網路,迴圈神經網路,自編碼網路,深度神經網路和對抗神經網路。

例項描述

假設有一組資料集,其中x與y的對應關係為:y = 3x + 0.5。我們想讓神經網路學習這些樣本,並從中找到這個規律,通俗來說就是讓神經網路學習到方程中的引數3和0.5 。

實現過程

(1)準備資料

首先用numpy生成1個含有100個數據的隨機序列x,然後寫出y與x的對應關係。

import tensorflow as tf
import numpy as np

x = np.linspace(-1,1,100)  
b = 0.5
y = 3 * x + b

(2)建立模型

這裡xs,ys是佔位符,代表了x和y的輸入。Weights和bias代表了權值和偏置,pre代表了Weights * xs + bias的結果,也就是預測的結果。

xs = tf.placeholder(tf.float32)
ys = tf.placeholder(tf.float32)

Weights = tf.Variable(tf.random_normal([1]))
biases = tf.Variable(tf.zeros([1]) + 0.1)

pre = tf.multiply(Weights,xs) + biases

接下來是反向搭建模型,神經網路在訓練過程中資料的流向有兩個方向。簡單來說首先通過正向生成一個值,然後在與實際值進行比較,觀察其中的差距,再通過反向過程調整引數,也就是這裡的Weights和bias。

這裡的損失函式採用平方損失,學習率設定為0.1,優化器選擇GradientDescentOptimizer也就是一個梯度下降的演算法。這裡學習率可以隨意設定,一般來說這個值是小於1的,它代表了引數調整的速度。這個值越大,代表調整速度越快,但是不精確;值越小,表明調整的精度越高,但是速度慢。我們這裡選擇0.1就可以。

loss = tf.reduce_mean(tf.square(pre - ys))

optimizer = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

(3)訓練模型

這裡先初始化所需要的變數然後進行迭代,迭代50次,每5次列印一下Weights和bias的值。

init = tf.global_variables_initializer()

sess = tf.Session()
sess.run(init)

for i in range(50):
    sess.run(optimizer,feed_dict={xs:x,ys:y})
    if i % 5 == 0:
        print(sess.run(Weights),sess.run(biases))

執行結果如下

我們可以看到,隨著訓練次數的增加,Weights和bias的值越來越接近真實值。

(4)使用模型

訓練好模型之後,用起來就比較容易了,往裡面傳入一個0.5,然後執行打印出結果來測試一下。

print(sess.run(pre,feed_dict={xs:0.5}))

至此我們就完成了神經網路的訓練以及使用。

才疏學淺,若有不足,還望指正,萬分感謝。