您好,登錄后才能下訂單哦!
本篇內容主要講解“如何理解python進階TensorFlow神經網絡擬合線性及非線性函數”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何理解python進階TensorFlow神經網絡擬合線性及非線性函數”吧!
一、擬合線性函數
生成隨機坐標
神經網絡擬合
代碼
二、擬合非線性函數
生成二次隨機點
神經網絡擬合
代碼
學習率0.03,訓練1000次:
學習率0.05,訓練1000次:
學習率0.1,訓練1000次:
可以發現,學習率為0.05時的訓練效果是最好的。
1、生成x坐標
2、生成隨機干擾
3、計算得到y坐標
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)
1、創建神經網絡
2、設置優化器與損失函數
3、訓練(根據已有數據)
4、預測(給定橫坐標,預測縱坐標)
# 創建神經網絡(訓練及預測) def Neural_Network(): # 1 創建神經網絡 model = tf.keras.Sequential() # 為神經網絡添加層 model.add(tf.keras.layers.Dense(units=1, input_dim=1)) # 隱藏層 神經元個數 輸入神經元個數 # 2 設置優化器與損失函數 model.compile(optimizer=SGD(0.05), loss='mse') # 優化器 學習率0.05 損失函數 # SGD:隨機梯度下降法 # mse:均方誤差 # 3 訓練 for i in range(1000): # 訓練數據并返回損失 loss = model.train_on_batch(x_data, y_data) # print(loss) # 4 預測 y_pred = model.predict(x_data) # 5 顯示預測結果(擬合線) plt.plot(x_data, y_pred, 'r-', lw=3) #lw:線條粗細
# 擬合線性函數 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) # 創建神經網絡(訓練及預測) def Neural_Network(): # 1 創建神經網絡 model = tf.keras.Sequential() # 為神經網絡添加層 model.add(tf.keras.layers.Dense(units=1, input_dim=1)) # 隱藏層 神經元個數 輸入神經元個數 # 2 設置優化器與損失函數 model.compile(optimizer=SGD(0.05), loss='mse') # 優化器 學習率0.05 損失函數 # SGD:隨機梯度下降法 # mse:均方誤差 # 3 訓練 for i in range(1000): # 訓練數據并返回損失 loss = model.train_on_batch(x_data, y_data) # print(loss) # 4 預測 y_pred = model.predict(x_data) # 5 顯示預測結果(擬合線) plt.plot(x_data, y_pred, 'r-', lw=3) #lw:線條粗細 # 1、生成隨機點 Produce_Random_Data() # 2、神經網絡訓練與預測 Neural_Network() plt.show()
第一層10個神經元:
第一層5個神經元:
我感覺第一層5個神經元反而訓練效果比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)
步驟:
1、創建神經網絡
2、設置優化器及損失函數
3、訓練(根據已有數據)
4、預測(給定橫坐標,預測縱坐標)
5、畫圖
# 神經網絡擬合(訓練及預測) def Neural_Network(): # 1 創建神經網絡 model = tf.keras.Sequential() # 添加層 # 注:input_dim(輸入神經元個數)只需要在輸入層重視設置,后面的網絡可以自動推斷出該層的對應輸入 model.add(tf.keras.layers.Dense(units=5, input_dim=1, activation='tanh')) # 神經元個數 輸入神經元個數 激活函數 model.add(tf.keras.layers.Dense(units=1, activation='tanh')) # 2 設置優化器和損失函數 model.compile(optimizer=SGD(0.3), loss='mse') # 優化器 學習率 損失函數(均方誤差) # 3 訓練 for i in range(3000): # 訓練一次數據,返回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)
# 擬合非線性函數 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) # 神經網絡擬合(訓練及預測) def Neural_Network(): # 1 創建神經網絡 model = tf.keras.Sequential() # 添加層 # 注:input_dim(輸入神經元個數)只需要在輸入層重視設置,后面的網絡可以自動推斷出該層的對應輸入 model.add(tf.keras.layers.Dense(units=5, input_dim=1, activation='tanh')) # 神經元個數 輸入神經元個數 激活函數 model.add(tf.keras.layers.Dense(units=1, activation='tanh')) # 輸出神經元個數 # 2 設置優化器和損失函數 model.compile(optimizer=SGD(0.3), loss='mse') # 優化器 學習率 損失函數(均方誤差) # 3 訓練 for i in range(3000): # 訓練一次數據,返回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、神經網絡訓練與預測 Neural_Network() plt.show()
到此,相信大家對“如何理解python進階TensorFlow神經網絡擬合線性及非線性函數”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。