近年來,神經網絡越來越受歡迎,因為它們在廣泛的任務中表現得非常出色。
它們已被證明是圖像和音頻識別、自然語言處理甚至玩圍棋和國際象棋等複雜遊戲的絕佳選擇。
在這篇文章中,我將帶您完成訓練神經網絡的整個過程。 我將提及並解釋訓練神經網絡的所有步驟。
雖然我將復習這些步驟,但我想添加一個簡單示例以確保還有一個實際示例。
那麼,來吧,讓我們學習如何處理神經網絡
讓我們從簡單的開始,問什麼是 神經網絡 首先。
神經網絡到底是什麼?
神經網絡是模擬人腦運作的計算機軟件。 他們可以從海量數據中學習,並發現人們可能難以察覺的模式。
近年來,神經網絡因其在圖片和音頻識別、自然語言處理和預測建模等任務中的多功能性而越來越受歡迎。
總的來說,神經網絡是適用於廣泛應用的強大工具,並且有機會改變我們處理各種工作的方式。
為什麼我們應該了解他們?
理解神經網絡至關重要,因為它們已經在計算機視覺、語音識別和自然語言處理等多個領域帶來了發現。
例如,神經網絡是自動駕駛汽車、自動翻譯服務甚至醫療診斷的最新發展的核心。
了解神經網絡如何運作以及如何設計它們有助於我們構建新的和創造性的應用程序。 而且,也許,它可能會在未來帶來更大的發現。
關於本教程的註釋
正如我上面所說,我想通過一個例子來解釋訓練神經網絡的步驟。 為此,我們應該談談 MNIST 數據集。 對於想要開始使用神經網絡的初學者來說,這是一個受歡迎的選擇。
MNIST 是一個首字母縮寫詞,代表修改後的國家標準與技術研究院。 它是一種手寫數字數據集,通常用於訓練和測試機器學習模型,尤其是神經網絡。
該集合包含 70,000 張從 0 到 9 的手寫數字灰度照片。
MNIST 數據集是一個流行的基準 圖像分類 任務。 它經常用於教學和學習,因為它緊湊且易於處理,同時對機器學習算法提出了難以回答的挑戰。
MNIST 數據集得到多個機器學習框架和庫的支持,包括 TensorFlow、Keras 和 PyTorch。
現在我們了解了 MNIST 數據集,讓我們開始訓練神經網絡的步驟。
訓練神經網絡的基本步驟
導入必要的庫
首次開始訓練神經網絡時,擁有必要的工具來設計和訓練模型至關重要。 創建神經網絡的第一步是導入所需的庫,例如 TensorFlow、Keras 和 NumPy。
這些庫充當神經網絡開發的構建塊並提供關鍵功能。 這些庫的組合允許創建複雜的神經網絡設計和快速訓練。
開始我們的例子; 我們將導入所需的庫,包括 TensorFlow、Keras 和 NumPy。 TensorFlow 是一個開源機器學習框架,Keras 是一個高級神經網絡 API,NumPy 是一個數值計算 Python 庫。
import tensorflow as tf
from tensorflow import keras
import numpy as np
加載數據集
現在必須加載數據集。 數據集是訓練神經網絡的數據集。 這可以是任何類型的數據,包括照片、音頻和文本。
將數據集分為兩部分至關重要:一部分用於訓練神經網絡,另一部分用於評估訓練模型的正確性。 可以使用多個庫(包括 TensorFlow、Keras 和 PyTorch)來導入數據集。
對於我們的示例,我們還使用 Keras 來加載 MNIST 數據集。 數據集中有 60,000 張訓練照片和 10,000 張測試圖像。
mnist = keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
預處理數據
數據預處理是訓練神經網絡的重要階段。 它需要在將數據輸入神經網絡之前準備和清理數據。
縮放像素值、歸一化數據和將標籤轉換為單熱編碼是預處理過程的示例。 這些過程有助於神經網絡更有效、更準確地學習。
預處理數據還有助於最大限度地減少過度擬合併提高神經網絡的性能。
您必須在訓練神經網絡之前對數據進行預處理。 這包括將標籤更改為單熱編碼並將像素值縮放到 0 到 1 之間。
train_images = train_images / 255.0
test_images = test_images / 255.0
train_labels = keras.utils.to_categorical(train_labels, 10)
test_labels = keras.utils.to_categorical(test_labels, 10)
定義模型
定義神經網絡模型的過程涉及建立其架構,例如層數、每層神經元數、激活函數和網絡類型(前饋、循環或卷積)。
您使用的神經網絡設計取決於您試圖解決的問題類型。 定義明確的神經網絡設計可以通過提高神經網絡的效率和準確性來幫助神經網絡學習。
現在是描述神經網絡模型的時候了。 對於這個例子,使用一個簡單的模型,它有兩個隱藏層,每個隱藏層有 128 個神經元,以及一個 softmax 輸出層,有 10 個神經元。
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
編譯模型
損失函數、優化器和指標必須在神經網絡模型的編譯過程中指定。 神經網絡正確預測輸出的能力由損失函數衡量。
為了提高神經網絡在訓練期間的準確性,優化器會修改其權重。 神經網絡在訓練期間的有效性是使用指標來衡量的。 必須先創建模型,然後才能訓練神經網絡。
在我們的示例中,我們現在必須立即構建模型。
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
訓練模型
通過神經網絡傳遞準備好的數據集,同時修改網絡的權重以最小化損失函數稱為訓練神經網絡。
驗證數據集用於在訓練期間測試神經網絡,以跟踪其有效性並防止過度擬合。 訓練過程可能需要一些時間,因此確保神經網絡得到適當訓練以防止欠擬合非常重要。
使用訓練數據,我們現在可以訓練模型。 為此,我們必須定義批量大小(在更新模型之前處理的樣本數)和時期數(整個數據集的重複次數)。
model.fit(train_images, train_labels, epochs=10, batch_size=32)
評估模型
測試神經網絡在測試數據集上的性能是對其進行評估的過程。 在這個階段,訓練好的神經網絡被用來處理測試數據集,並評估準確率。
神經網絡如何有效地從全新的、未經試驗的數據中預測出正確的結果是衡量其準確性的標準。 分析模型可能有助於確定神經網絡的工作情況,並提出改進方法。
我們最終可以使用訓練後的測試數據來評估模型的性能。
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)
就這樣! 我們訓練了一個神經網絡來檢測 MNIST 數據集中的數字。
從準備數據到評估訓練模型的有效性,訓練神經網絡涉及多個過程。 這些說明可幫助新手有效地構建和訓練神經網絡。
想要使用神經網絡解決各種問題的初學者可以按照這些說明進行操作。
可視化示例
讓我們試著想像一下我們對這個例子做了什麼,以便更好地理解。
此代碼片段中使用 Matplotlib 包繪製訓練數據集中隨機選擇的照片。 首先,我們導入 Matplotlib 的“pyplot”模塊並將其別名為“plt”。 然後,在總尺寸為 10 x 10 英寸的情況下,我們製作了一個包含 5 行和 5 列子圖的圖形。
然後,我們使用 for 循環遍歷子圖,在每個子圖上顯示一張來自訓練數據集的圖片。 要顯示圖片,使用“imshow”函數,將“cmap”選項設置為“gray”以灰度顯示照片。 每個子圖的標題也設置為集合中相關圖像的標籤。
最後,我們使用“show”函數將繪製好的圖片顯示在圖中。 此功能使我們能夠直觀地評估數據集中的照片樣本,這有助於我們理解數據和識別任何可能的問題。
import matplotlib.pyplot as plt
# Plot a random sample of images
fig, axes = plt.subplots(nrows=5, ncols=5, figsize=(10,10))
for i, ax in enumerate(axes.flat):
ax.imshow(train_images[i], cmap='gray')
ax.set_title(f"Label: {train_labels[i].argmax()}")
ax.axis('off')
plt.show()
重要的神經網絡模型
- 前饋神經網絡 (FFNN): 一種簡單類型的神經網絡,其中信息僅以一種方式傳播,即通過一個或多個隱藏層從輸入層到輸出層。
- 卷積神經網絡 (CNN): 一種常用於圖像檢測和處理的神經網絡。 CNN 旨在自動識別和提取圖片中的特徵。
- 循環神經網絡 (RNN): 一種常用於圖像檢測和處理的神經網絡。 CNN 旨在自動識別和提取圖片中的特徵。
- 長短期記憶 (LSTM) 網絡: 為克服標準 RNN 中梯度消失的問題而創建的一種 RNN 形式。 使用 LSTM 可以更好地捕獲順序數據中的長期依賴性。
- 自動編碼器: 無監督學習神經網絡,其中教導網絡在其輸出層重現其輸入數據。 數據壓縮、異常檢測和圖片去噪都可以使用自動編碼器來完成。
- 生成對抗網絡 (GAN): 生成神經網絡是神經網絡的一種形式,它被教導產生與訓練數據集相當的新數據。 GAN 由兩個網絡組成:一個生成新數據的生成器網絡和一個評估所創建數據質量的鑑別器網絡。
總結,您的下一步應該是什麼?
瀏覽多個在線資源和課程,以了解有關訓練神經網絡的更多信息。 研究項目或示例是更好地掌握神經網絡的一種方法。
從簡單的示例開始,如二元分類問題或圖片分類任務,然後轉到更困難的任務,如自然語言處理或 強化學習.
在項目上工作可以幫助您獲得真實的經驗並提高您的神經網絡訓練技能。
您還可以加入在線機器學習和神經網絡群組和論壇,與其他學習者和專業人士互動、分享您的工作並獲得評論和幫助。
LSRS蒙拉德-克羅恩
⁶ĵ希望看到誤差最小化的 python 程式。用於權重變更到下一層的特殊選擇節點