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時(shí)的訓(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ù)測(cè)(給定橫坐標(biāo),預(yù)測(cè)縱坐標(biāo))
# 創(chuàng)建神經(jīng)網(wǎng)絡(luò)(訓(xùn)練及預(yù)測(cè)) 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)元個(gè)數(shù) 輸入神經(jīng)元個(gè)數(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ù)測(cè) y_pred = model.predict(x_data) # 5 顯示預(yù)測(cè)結(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ù)測(cè)) 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)元個(gè)數(shù) 輸入神經(jīng)元個(gè)數(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ù)測(cè) y_pred = model.predict(x_data) # 5 顯示預(yù)測(cè)結(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ù)測(cè) Neural_Network() plt.show()
二、擬合非線性函數(shù)
第一層10個(gè)神經(jīng)元:

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

我感覺第一層5個(gè)神經(jīng)元反而訓(xùn)練效果比10個(gè)的好。。。
生成二次隨機(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] # 增加一個(gè)維度 # 生成噪聲 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ù)測(cè)(給定橫坐標(biāo),預(yù)測(cè)縱坐標(biāo))
5、畫圖
# 神經(jīng)網(wǎng)絡(luò)擬合(訓(xùn)練及預(yù)測(cè)) def Neural_Network(): # 1 創(chuàng)建神經(jīng)網(wǎng)絡(luò) model = tf.keras.Sequential() # 添加層 # 注:input_dim(輸入神經(jīng)元個(gè)數(shù))只需要在輸入層重視設(shè)置,后面的網(wǎng)絡(luò)可以自動(dòng)推斷出該層的對(duì)應(yīng)輸入 model.add(tf.keras.layers.Dense(units=5, input_dim=1, activation='tanh')) # 神經(jīng)元個(gè)數(shù) 輸入神經(jīng)元個(gè)數(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ù)測(cè) 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] # 增加一個(gè)維度 # 生成噪聲 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ù)測(cè)) def Neural_Network(): # 1 創(chuàng)建神經(jīng)網(wǎng)絡(luò) model = tf.keras.Sequential() # 添加層 # 注:input_dim(輸入神經(jīng)元個(gè)數(shù))只需要在輸入層重視設(shè)置,后面的網(wǎng)絡(luò)可以自動(dòng)推斷出該層的對(duì)應(yīng)輸入 model.add(tf.keras.layers.Dense(units=5, input_dim=1, activation='tanh')) # 神經(jīng)元個(gè)數(shù) 輸入神經(jīng)元個(gè)數(shù) 激活函數(shù) model.add(tf.keras.layers.Dense(units=1, activation='tanh')) #輸出神經(jīng)元個(gè)數(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ù)測(cè) 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ù)測(cè) 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ù)的資料請(qǐng)關(guān)注本站其它相關(guān)文章!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信