假設有一組資料集,其中x與y的對應關係為:y = 3x + 0.5。我們想讓神經網路學習這些樣本,並從中找到這個規律,通俗來說就是讓神經網路學習到方程中的引數3和0.5 。
首先用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
這裡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)
這裡先初始化所需要的變數然後進行迭代,迭代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=)
if i % 5 == 0:
print(sess.run(weights),sess.run(biases))
執行結果如下
我們可以看到,隨著訓練次數的增加,weights和bias的值越來越接近真實值。
訓練好模型之後,用起來就比較容易了,往裡面傳入乙個0.5,然後執行列印出結果來測試一下。
print(sess.run(pre,feed_dict=))
至此我們就完成了神經網路的訓練以及使用。
才疏學淺,若有不足,還望指正,萬分感謝。
TensorFlow擬合曲線
本文是官方例子做了一點小小的改動,基於tensorflow實現擬合曲線,對初學tensorflow者有一定幫助。訓練500步,每50步輸出一次,並顯示在plt中。開始訓練 訓練200步後 訓練完成 以下是完整 coding utf 8 author 吳晶 wechat 18007148050 imp...
螺旋線擬合
實驗座標是這樣的 基本是乙個阿基公尺德螺旋線,原資料是笛卡爾座標系的,通過擬合半徑與方位角之間的關係得到多項式 以下是多項式擬合 將資料回代,clear all clcformat long shuju xlsread jingpan12 p 5.00630375898308e 06,0.00046...
tensorflow實現非線性擬合
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt x data np.linspace 0.5,0.5,200 np.newaxis 使得維度為 200,1 noise np.random.norma...