TensorFlow實踐 擬合線性方程

2021-08-30 21:47:44 字數 1659 閱讀 8863

假設有一組資料集,其中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...