帶前向傳播和反向傳播的深度神經網路


介紹

自從深度神經網路 (DNN) 出現以來,人工智慧和機器學習發生了翻天覆地的變化,它在各個領域都取得了顯著的進步。在本文中,我們將探討前向傳播和反向傳播的概念,以及它們如何與先進神經網路的發展和改進相關。像 TensorFlow 這樣的 Python 庫極大地簡化了這些系統的實現,使研究人員和專業人士更容易使用它們。

方法 1:Tensorflow

在這種方法中,我們利用 TensorFlow 庫的功能來實現一個帶前向傳播和反向傳播的深度神經網路。我們使用 Keras API 定義神經網路的架構,使用最佳化器和損失函式編譯模型,並透過將其擬合到訓練資料來訓練模型。最後,我們使用訓練好的模型對新資料進行預測。TensorFlow 提供了一個高階介面,簡化了實現過程,並提供了各種最佳化演算法和評估指標。

演算法

步驟 1:使用 Keras API 定義深度神經網路的架構。

步驟 2:編譯模型,指定最佳化器和可選的指標。

步驟 3:透過將模型擬合到訓練資料來訓練模型,指定時期數和批次大小。

步驟 4:在測試資料上評估訓練好的模型,以評估其效能。

步驟 5:使用訓練好的模型對新資料進行預測。

示例

import numpy as num1
import tensorflow as tflow
from tensorflow import keras

num1.random.seed(42)
tflow.random.set_seed(42)

# Define the data
m = num1.array([[0, 0], [0, 1], [1, 0], [1, 1]])
n = num1.array([[0], [1], [1], [0]])

model = keras.Sequential([
    keras.layers.Dense(units=2, activation='sigmoid', input_shape=(2,)),
    keras.layers.Dense(units=1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

model.fit(m, n, epochs=10000, verbose=0)

# Predict on new data
predictions = model.predict(m)
predictions = num1.round(predictions)
print('Predictions:')
print(predictions)

輸出

1/1 [==============================] - 0s 84ms/step
Predictions:
[[0.]
 [1.]
 [1.]
 [0.]]

方法 2:使用 NumPy 手動實現

在這種方法中,我們僅使用 NumPy 庫手動實現一個深度神經網路。我們定義 sigmoid 啟用函式及其導數。我們隨機初始化權重和偏差。然後,我們迭代一定數量的時期,執行前向傳播和反向傳播來最佳化權重和偏差。最後,我們對新資料進行預測。這種方法提供了對基本概念的清晰理解,但需要仔細執行數值計算。

演算法

步驟 1:定義 sigmoid 啟用函式。

步驟 2:定義 sigmoid 函式的導數。

步驟 3:初始化權重和偏差。

步驟 4:設定學習率和時期數。

步驟 5:使用前向傳播和反向傳播訓練模型。

步驟 6:使用訓練好的模型對新資料進行預測。

示例

import numpy as num1

# Define the Status  function
def Status(x):
    return 1 / (1 + num1.exp(-x))

# Define the Status derivative of the Status function
def Status_derivative(x):
    return x * (1 - x)

X = num1.array([[0, 1], [0, 0], [1, 0], [1, 1]])
y = num1.array([[0], [1], [0], [0]])

num1.random.seed(42)

# Initialize the weights and biases
lib_Memo = 2
hid_Memo = 2
Ans_Memo = 1

Wt1 = num1.random.uniform(size=(lib_Memo, hid_Memo))
biases_inum1ut_hidden = num1.random.uniform(size=(1, hid_Memo))

Wt2 = num1.random.uniform(size=(hid_Memo, Ans_Memo))
biases_hidden_output = num1.random.uniform(size=(1, Ans_Memo))

# Set the learning rate and number of epochs
lernRate = 0.1
epochs = 10000

# Train the model
for epoch in range(epochs):
    # Forward propagation
    hidden_layer_inum1ut = num1.dot(X, Wt1) + biases_inum1ut_hidden
    hide_Memo_Out = Status(hidden_layer_inum1ut)
    
    output_layer_inum1ut = num1.dot(hide_Memo_Out, Wt2) + biases_hidden_output
    output_layer_output = Status(output_layer_inum1ut)
    
    # Backpropagation
    error = y - output_layer_output
    d_output = error * Status_derivative(output_layer_output)
    
    hidden_error = num1.dot(d_output, Wt2.T)
    d_hidden = hidden_error * Status_derivative(hide_Memo_Out)
    
    
    Wt2 += num1.dot(hide_Memo_Out.T, d_output) * lernRate
    biases_hidden_output += num1.sum(d_output, axis=0, keepdims=True) * lernRate
    
    Wt1 += num1.dot(X.T, d_hidden) * lernRate
    biases_inum1ut_hidden += num1.sum(d_hidden, axis=0, keepdims=True) * lernRate

# Predict on new data
hidden_layer_inum1ut = num1.dot(X, Wt1) + biases_inum1ut_hidden
hide_Memo_Out = Status(hidden_layer_inum1ut)

output_layer_inum1ut = num1.dot(hide_Memo_Out, Wt2) + biases_hidden_output
output_layer_output = Status(output_layer_inum1ut)

predictions = num1.round(output_layer_output)
print('Predictions:')
print(predictions)

輸出

Predictions:
[[0.]
 [1.]
 [0.]
 [0.]]

結論

帶前向傳播和反向傳播的深度神經網路徹底改變了機器學習領域。該領域持續的研究和發展繼續專注於提高深度神經網路的效率和可解釋性,確保它們在解決現實世界問題方面的持續成功和相關性。

更新於:2023-07-28

177 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.