python進(jìn)階TensorFlow神經(jīng)網(wǎng)絡(luò)擬合線性及非線性函數(shù)
一、擬合線性函數(shù)
學(xué)習(xí)率0.03,訓(xùn)練1000次:

學(xué)習(xí)率0.05,訓(xùn)練1000次:

學(xué)習(xí)率0.1,訓(xùn)練1000次:

可以發(fā)現(xiàn),學(xué)習(xí)率為0.05時的訓(xùn)練效果是最好的。
生成隨機(jī)坐標(biāo)
1、生成x坐標(biāo)
2、生成隨機(jī)干擾
3、計(jì)算得到y(tǒng)坐標(biāo)
4、畫點(diǎn)
# 生成隨機(jī)點(diǎn)
def Produce_Random_Data():
global x_data, y_data
# 生成x坐標(biāo)
x_data = np.random.rand(100)
# 生成隨機(jī)干擾
noise = np.random.normal(0, 0.01, x_data.shape)
# 均值 標(biāo)準(zhǔn)差 輸出的形狀
# 計(jì)算y坐標(biāo)
y_data = 0.2 * x_data + 0.3 + noise
# 畫點(diǎn)
plt.scatter(x_data, y_data)
神經(jīng)網(wǎng)絡(luò)擬合
1、創(chuàng)建神經(jīng)網(wǎng)絡(luò)
2、設(shè)置優(yōu)化器與損失函數(shù)
3、訓(xùn)練(根據(jù)已有數(shù)據(jù))
4、預(yù)測(給定橫坐標(biāo),預(yù)測縱坐標(biāo))
# 創(chuàng)建神經(jīng)網(wǎng)絡(luò)(訓(xùn)練及預(yù)測)
def Neural_Network():
# 1 創(chuàng)建神經(jīng)網(wǎng)絡(luò)
model = tf.keras.Sequential()
# 為神經(jīng)網(wǎng)絡(luò)添加層
model.add(tf.keras.layers.Dense(units=1, input_dim=1))
# 隱藏層 神經(jīng)元個數(shù) 輸入神經(jīng)元個數(shù)
# 2 設(shè)置優(yōu)化器與損失函數(shù)
model.compile(optimizer=SGD(0.05), loss='mse')
# 優(yōu)化器 學(xué)習(xí)率0.05 損失函數(shù)
# SGD:隨機(jī)梯度下降法
# mse:均方誤差
# 3 訓(xùn)練
for i in range(1000):
# 訓(xùn)練數(shù)據(jù)并返回?fù)p失
loss = model.train_on_batch(x_data, y_data)
# print(loss)
# 4 預(yù)測
y_pred = model.predict(x_data)
# 5 顯示預(yù)測結(jié)果(擬合線)
plt.plot(x_data, y_pred, 'r-', lw=3) #lw:線條粗細(xì)
代碼
# 擬合線性函數(shù)
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.optimizers import SGD
# 生成隨機(jī)點(diǎn)
def Produce_Random_Data():
global x_data, y_data
# 生成x坐標(biāo)
x_data = np.random.rand(100)
# 生成隨機(jī)干擾
noise = np.random.normal(0, 0.01, x_data.shape)
# 均值 標(biāo)準(zhǔn)差 輸出的形狀
# 計(jì)算y坐標(biāo)
y_data = 0.2 * x_data + 0.3 + noise
# 畫點(diǎn)
plt.scatter(x_data, y_data)
# 創(chuàng)建神經(jīng)網(wǎng)絡(luò)(訓(xùn)練及預(yù)測)
def Neural_Network():
# 1 創(chuàng)建神經(jīng)網(wǎng)絡(luò)
model = tf.keras.Sequential()
# 為神經(jīng)網(wǎng)絡(luò)添加層
model.add(tf.keras.layers.Dense(units=1, input_dim=1))
# 隱藏層 神經(jīng)元個數(shù) 輸入神經(jīng)元個數(shù)
# 2 設(shè)置優(yōu)化器與損失函數(shù)
model.compile(optimizer=SGD(0.05), loss='mse')
# 優(yōu)化器 學(xué)習(xí)率0.05 損失函數(shù)
# SGD:隨機(jī)梯度下降法
# mse:均方誤差
# 3 訓(xùn)練
for i in range(1000):
# 訓(xùn)練數(shù)據(jù)并返回?fù)p失
loss = model.train_on_batch(x_data, y_data)
# print(loss)
# 4 預(yù)測
y_pred = model.predict(x_data)
# 5 顯示預(yù)測結(jié)果(擬合線)
plt.plot(x_data, y_pred, 'r-', lw=3) #lw:線條粗細(xì)
# 1、生成隨機(jī)點(diǎn)
Produce_Random_Data()
# 2、神經(jīng)網(wǎng)絡(luò)訓(xùn)練與預(yù)測
Neural_Network()
plt.show()
二、擬合非線性函數(shù)
第一層10個神經(jīng)元:

第一層5個神經(jīng)元:

我感覺第一層5個神經(jīng)元反而訓(xùn)練效果比10個的好。。。
生成二次隨機(jī)點(diǎn)
步驟:
1、生成x坐標(biāo)
2、生成隨機(jī)干擾
3、計(jì)算y坐標(biāo)
4、畫散點(diǎn)圖
# 生成隨機(jī)點(diǎn)
def Produce_Random_Data():
global x_data, y_data
# 生成x坐標(biāo)
x_data = np.linspace(-0.5, 0.5, 200)[:, np.newaxis]
# 增加一個維度
# 生成噪聲
noise = np.random.normal(0, 0.02, x_data.shape)
# 均值 方差
# 計(jì)算y坐標(biāo)
y_data = np.square(x_data) + noise
# 畫散點(diǎn)圖
plt.scatter(x_data, y_data)
神經(jīng)網(wǎng)絡(luò)擬合
步驟:
1、創(chuàng)建神經(jīng)網(wǎng)絡(luò)
2、設(shè)置優(yōu)化器及損失函數(shù)
3、訓(xùn)練(根據(jù)已有數(shù)據(jù))
4、預(yù)測(給定橫坐標(biāo),預(yù)測縱坐標(biāo))
5、畫圖
# 神經(jīng)網(wǎng)絡(luò)擬合(訓(xùn)練及預(yù)測)
def Neural_Network():
# 1 創(chuàng)建神經(jīng)網(wǎng)絡(luò)
model = tf.keras.Sequential()
# 添加層
# 注:input_dim(輸入神經(jīng)元個數(shù))只需要在輸入層重視設(shè)置,后面的網(wǎng)絡(luò)可以自動推斷出該層的對應(yīng)輸入
model.add(tf.keras.layers.Dense(units=5, input_dim=1, activation='tanh'))
# 神經(jīng)元個數(shù) 輸入神經(jīng)元個數(shù) 激活函數(shù)
model.add(tf.keras.layers.Dense(units=1, activation='tanh'))
# 2 設(shè)置優(yōu)化器和損失函數(shù)
model.compile(optimizer=SGD(0.3), loss='mse')
# 優(yōu)化器 學(xué)習(xí)率 損失函數(shù)(均方誤差)
# 3 訓(xùn)練
for i in range(3000):
# 訓(xùn)練一次數(shù)據(jù),返回loss
loss = model.train_on_batch(x_data, y_data)
# 4 預(yù)測
y_pred = model.predict(x_data)
# 5 畫圖
plt.plot(x_data, y_pred, 'r-', lw=5)
代碼
# 擬合非線性函數(shù)
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.optimizers import SGD
# 生成隨機(jī)點(diǎn)
def Produce_Random_Data():
global x_data, y_data
# 生成x坐標(biāo)
x_data = np.linspace(-0.5, 0.5, 200)[:, np.newaxis]
# 增加一個維度
# 生成噪聲
noise = np.random.normal(0, 0.02, x_data.shape)
# 均值 方差
# 計(jì)算y坐標(biāo)
y_data = np.square(x_data) + noise
# 畫散點(diǎn)圖
plt.scatter(x_data, y_data)
# 神經(jīng)網(wǎng)絡(luò)擬合(訓(xùn)練及預(yù)測)
def Neural_Network():
# 1 創(chuàng)建神經(jīng)網(wǎng)絡(luò)
model = tf.keras.Sequential()
# 添加層
# 注:input_dim(輸入神經(jīng)元個數(shù))只需要在輸入層重視設(shè)置,后面的網(wǎng)絡(luò)可以自動推斷出該層的對應(yīng)輸入
model.add(tf.keras.layers.Dense(units=5, input_dim=1, activation='tanh'))
# 神經(jīng)元個數(shù) 輸入神經(jīng)元個數(shù) 激活函數(shù)
model.add(tf.keras.layers.Dense(units=1, activation='tanh'))
# 輸出神經(jīng)元個數(shù)
# 2 設(shè)置優(yōu)化器和損失函數(shù)
model.compile(optimizer=SGD(0.3), loss='mse')
# 優(yōu)化器 學(xué)習(xí)率 損失函數(shù)(均方誤差)
# 3 訓(xùn)練
for i in range(3000):
# 訓(xùn)練一次數(shù)據(jù),返回loss
loss = model.train_on_batch(x_data, y_data)
# 4 預(yù)測
y_pred = model.predict(x_data)
# 5 畫圖
plt.plot(x_data, y_pred, 'r-', lw=5)
# 1、生成隨機(jī)點(diǎn)
Produce_Random_Data()
# 2、神經(jīng)網(wǎng)絡(luò)訓(xùn)練與預(yù)測
Neural_Network()
plt.show()
以上就是python進(jìn)階TensorFlow神經(jīng)網(wǎng)絡(luò)擬合線性及非線性函數(shù)的詳細(xì)內(nèi)容,更多關(guān)于TensorFlow神經(jīng)網(wǎng)絡(luò)擬合線性及非線性函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python系統(tǒng)公網(wǎng)私網(wǎng)流量監(jiān)控實(shí)現(xiàn)流程
這篇文章主要介紹了Python系統(tǒng)公網(wǎng)私網(wǎng)流量監(jiān)控實(shí)現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11
Python實(shí)現(xiàn)調(diào)用另一個路徑下py文件中的函數(shù)方法總結(jié)
這篇文章主要介紹了Python實(shí)現(xiàn)調(diào)用另一個路徑下py文件中的函數(shù)方法,結(jié)合實(shí)例形式總結(jié)分析了Python針對不同文件夾中py文件調(diào)用操作的處理技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-06-06
matplotlib階梯圖的實(shí)現(xiàn)(step())
這篇文章主要介紹了matplotlib階梯圖的實(shí)現(xiàn)(step()),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Python算法應(yīng)用實(shí)戰(zhàn)之隊(duì)列詳解
隊(duì)列是一種先進(jìn)先出(First-In-First-Out,F(xiàn)IFO)的數(shù)據(jù)結(jié)構(gòu)。隊(duì)列被用在很多地方,比如提交操作系統(tǒng)執(zhí)行的一系列進(jìn)程、打印任務(wù)池等,一些仿真系統(tǒng)用隊(duì)列來模擬銀行或雜貨店里排隊(duì)的顧客。下面就介紹了Python中隊(duì)列的應(yīng)用實(shí)戰(zhàn),需要的可以參考。2017-02-02

