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

學習率0.05,訓練1000次:

學習率0.1,訓練1000次:

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

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

我感覺第一層5個神經(jīng)元反而訓練效果比10個的好。。。
生成二次隨機點
步驟:
1、生成x坐標
2、生成隨機干擾
3、計算y坐標
4、畫散點圖
# 生成隨機點
def Produce_Random_Data():
global x_data, y_data
# 生成x坐標
x_data = np.linspace(-0.5, 0.5, 200)[:, np.newaxis]
# 增加一個維度
# 生成噪聲
noise = np.random.normal(0, 0.02, x_data.shape)
# 均值 方差
# 計算y坐標
y_data = np.square(x_data) + noise
# 畫散點圖
plt.scatter(x_data, y_data)
神經(jīng)網(wǎng)絡擬合
步驟:
1、創(chuàng)建神經(jīng)網(wǎng)絡
2、設置優(yōu)化器及損失函數(shù)
3、訓練(根據(jù)已有數(shù)據(jù))
4、預測(給定橫坐標,預測縱坐標)
5、畫圖
# 神經(jīng)網(wǎng)絡擬合(訓練及預測)
def Neural_Network():
# 1 創(chuàng)建神經(jīng)網(wǎng)絡
model = tf.keras.Sequential()
# 添加層
# 注:input_dim(輸入神經(jīng)元個數(shù))只需要在輸入層重視設置,后面的網(wǎ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 設置優(yōu)化器和損失函數(shù)
model.compile(optimizer=SGD(0.3), loss='mse')
# 優(yōu)化器 學習率 損失函數(shù)(均方誤差)
# 3 訓練
for i in range(3000):
# 訓練一次數(shù)據(jù),返回loss
loss = model.train_on_batch(x_data, y_data)
# 4 預測
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
# 生成隨機點
def Produce_Random_Data():
global x_data, y_data
# 生成x坐標
x_data = np.linspace(-0.5, 0.5, 200)[:, np.newaxis]
# 增加一個維度
# 生成噪聲
noise = np.random.normal(0, 0.02, x_data.shape)
# 均值 方差
# 計算y坐標
y_data = np.square(x_data) + noise
# 畫散點圖
plt.scatter(x_data, y_data)
# 神經(jīng)網(wǎng)絡擬合(訓練及預測)
def Neural_Network():
# 1 創(chuàng)建神經(jīng)網(wǎng)絡
model = tf.keras.Sequential()
# 添加層
# 注:input_dim(輸入神經(jīng)元個數(shù))只需要在輸入層重視設置,后面的網(wǎ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 設置優(yōu)化器和損失函數(shù)
model.compile(optimizer=SGD(0.3), loss='mse')
# 優(yōu)化器 學習率 損失函數(shù)(均方誤差)
# 3 訓練
for i in range(3000):
# 訓練一次數(shù)據(jù),返回loss
loss = model.train_on_batch(x_data, y_data)
# 4 預測
y_pred = model.predict(x_data)
# 5 畫圖
plt.plot(x_data, y_pred, 'r-', lw=5)
# 1、生成隨機點
Produce_Random_Data()
# 2、神經(jīng)網(wǎng)絡訓練與預測
Neural_Network()
plt.show()
以上就是python進階TensorFlow神經(jīng)網(wǎng)絡擬合線性及非線性函數(shù)的詳細內(nèi)容,更多關于TensorFlow神經(jīng)網(wǎng)絡擬合線性及非線性函數(shù)的資料請關注腳本之家其它相關文章!
相關文章
pandas or sql計算前后兩行數(shù)據(jù)間的增值方法
下面小編就為大家分享一篇pandas or sql計算前后兩行數(shù)據(jù)間的增值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04

