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ù)測(給定橫坐標(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)元個(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ù)測 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)元個(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ù)測 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個(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ù)測(給定橫坐標(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)元個(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ù)測 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ù)測) 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ù)測 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實(shí)現(xiàn)simhash算法實(shí)例
這篇文章主要介紹了python實(shí)現(xiàn)simhash算法實(shí)例,需要的朋友可以參考下2014-04-04詳解用python寫網(wǎng)絡(luò)爬蟲-爬取新浪微博評(píng)論
這篇文章主要介紹了python爬取新浪微博評(píng)論,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Python如何實(shí)現(xiàn)守護(hù)進(jìn)程的方法示例
護(hù)進(jìn)程:通常被定義為一個(gè)后臺(tái)進(jìn)程,而且它不屬于任何一個(gè)終端會(huì)話(terminal session)。許多系統(tǒng)服務(wù)由守護(hù)程序?qū)嵤?;如網(wǎng)絡(luò)服務(wù),打印等。 下面這篇文章給大家分享了Python是如何實(shí)現(xiàn)守護(hù)進(jìn)程的方法示例,需要的朋友可以參考借鑒。2017-02-02pandas or sql計(jì)算前后兩行數(shù)據(jù)間的增值方法
下面小編就為大家分享一篇pandas or sql計(jì)算前后兩行數(shù)據(jù)間的增值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04