什么是神經網絡:實戰-使用CNN進行minst手寫數據集分類
就像無數人從敲下“Hello World”開始代碼之旅一樣,許多研究員從“MNIST數據集”開啟了人工智能的探索之路。MNIST數據集(Mixed National Institute of Standards and Technology database)是一個用來訓練各種圖像處理系統的二進制圖像數據集,廣泛應用于機器學習中的訓練和測試。MNIST數據集共有70000張圖像,其中訓練集60000張,測試集10000張。所有圖像都是28×28的灰度圖像,每張圖像包含一個手寫數字。每張圖像都有標注。共10個類別,每個類別代表0~9之間的一個數字,每張圖像只有一個類別。

今天就讓我們用卷積神經網絡CNN來進行minst手寫數據集分類吧~
下面是用卷積神經網絡(CNN)來對MNIST數據集進行分類的完整示例。每一段代碼之后我都會詳細解釋其功能。
一. 導入必要的庫
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
代碼解釋:?????
1. tensorflow:導入TensorFlow庫,提供機器學習和深度學習的功能。
2. layers, models:從Keras中導入層和模型的構建模塊。
3. mnist:從Keras中導入MNIST數據集。
4. to_categorical:用于將標簽轉換為one-hot編碼。
二. 加載MNIST數據集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
代碼解釋:
1. mnist.load_data():加載MNIST數據集,返回訓練和測試數據的元組。MNIST數據集由28x28像素的灰度手寫數字圖像組成。
2. train_images, train_labels:訓練數據和對應的標簽。
3. test_images, test_labels:測試數據和對應的標簽。
三. 數據預處理
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
代碼解釋:
1. reshape((60000, 28, 28, 1)):將訓練和測試圖像調整為4D張量,以便適用于CNN輸入。`(樣本數, 高度, 寬度, 通道數)`。
2. astype('float32') / 255:將像素值歸一化到0到1之間,以提高模型訓練效率。
3. to_categorical():將整數標簽轉換為one-hot編碼,以便于多類分類任務。
四. 構建卷積神經網絡模型
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activatinotallow='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activatinotallow='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activatinotallow='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activatinotallow='relu'))
model.add(layers.Dense(10, activatinotallow='softmax'))代碼解釋:
1. models.Sequential():創建一個順序模型,這意味著模型的層按順序堆疊。
2. Conv2D(32, (3, 3), activatinotallow='relu', input_shape=(28, 28, 1)):
- 32:卷積核的數量。
- (3, 3):卷積核的大小。
- activatinotallow='relu':使用ReLU激活函數。
- input_shape=(28, 28, 1):輸入的形狀。
3. MaxPooling2D((2, 2)):最大池化層,使用2x2的窗口來減少空間維度。
4. Flatten():將多維輸入展平成一維,以便于全連接層處理。
5. Dense(64, activatinotallow='relu'):全連接層,具有64個神經元和ReLU激活函數。
6. Dense(10, activatinotallow='softmax'):輸出層,具有10個神經元(對應10個類別)和softmax激活函數,用于多類分類。
五. 編譯模型
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
代碼解釋:
1. optimizer='adam':使用Adam優化器進行訓練。
2. loss='categorical_crossentropy':使用分類交叉熵作為損失函數。
3. metrics=['accuracy']:評估模型時關注的指標是準確率。
六. 訓練模型
model.fit(train_images, train_labels, epochs=5, batch_size=64)
代碼解釋:
1. fit(train_images, train_labels, epochs=5, batch_size=64):
2. epochs=5:訓練整個數據集5次。
3. batch_size=64:每次使用64個樣本進行梯度更新。
七. 評估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f"Test accuracy: {test_acc}")
代碼解釋:
1. evaluate(test_images, test_labels):在測試數據上評估模型性能。
2. test_acc:測試集的準確率。
本文轉載自???人工智能訓練營???,作者:人工智能訓練營

















