Dataset MNIST terdiri daripada digit tulisan tangan dan termasuk 60,000 sampel latihan dan 10,000 sampel ujian. Setiap sampel ialah imej skala kelabu 28x28 piksel yang mewakili nombor dari 0 hingga 9.
Convolutional Neural Network (CNN) ialah model yang digunakan untuk pengelasan imej dalam pembelajaran mendalam. Ia mengekstrak ciri imej melalui lapisan konvolusi dan lapisan pengumpulan, dan menggunakan lapisan bersambung sepenuhnya untuk pengelasan.
Di bawah saya akan memperkenalkan cara menggunakan Python dan TensorFlow untuk melaksanakan model CNN mudah untuk mengklasifikasikan set data MNIST.
Pertama, kita perlu mengimport perpustakaan yang diperlukan dan dataset MNIST:
import tensorflow as tf from tensorflow.keras.datasets import mnist # 加载MNIST数据集 (x_train, y_train), (x_test, y_test) = mnist.load_data()
Seterusnya, kita perlu menormalkan data imej dan menukar data label ke dalam format pengekodan satu-panas:
# 归一化图像数据 x_train = x_train / 255.0 x_test = x_test / 255.0 # 将标签数据转换为独热编码格式 y_train = tf.keras.utils.to_categorical(y_train, num_classes=10) y_test = tf.keras.utils.to_categorical(y_test, num_classes=10)
Kemudian, kita mentakrifkan Model CNN. Model ini termasuk dua lapisan konvolusi dan dua lapisan gabungan, serta lapisan bersambung sepenuhnya. Kami menggunakan fungsi pengaktifan ReLU dan fungsi pengaktifan Softmax dalam lapisan terakhir untuk pengelasan. Kodnya adalah seperti berikut:
model = tf.keras.models.Sequential([ # 第一个卷积层 tf.keras.layers.Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), # 第二个卷积层 tf.keras.layers.Conv2D(filters=64, kernel_size=(3, 3), activation='relu'), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), # 将特征图展平 tf.keras.layers.Flatten(), # 全连接层 tf.keras.layers.Dense(units=128, activation='relu'), # 输出层 tf.keras.layers.Dense(units=10, activation='softmax') ])
Seterusnya, kita perlu menyusun model dan menentukan fungsi kehilangan, pengoptimum dan metrik penilaian:
# 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
Akhirnya, kami melatih model dan mengujinya:
# 训练模型 model.fit(x_train.reshape(-1, 28, 28, 1), y_train, epochs=5, batch_size=32) # 测试模型 score = model.evaluate(x_test.reshape(-1, 28, 28, 1), y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1])
Selepas menjalankan kod lengkap, kita boleh lihat model Ketepatan ujian adalah kira-kira 99%.
Untuk meringkaskan, langkah-langkah untuk menggunakan rangkaian neural konvolusi untuk mengklasifikasikan set data MNIST adalah seperti berikut:
1 Muatkan set data MNIST dan lakukan prapemprosesan, termasuk penormalan dan pengekodan satu-panas . Tentukan model CNN, termasuk lapisan konvolusi, lapisan penggabungan dan lapisan bersambung sepenuhnya, dan nyatakan fungsi pengaktifan
3. Tentukan fungsi kehilangan, pengoptimum dan indeks penilaian; model dan mengujinya pada set ujian. Di atas adalah contoh mudah yang boleh diubah suai dan dioptimumkan mengikut keadaan tertentu.Atas ialah kandungan terperinci Mengenal digit tulisan tangan menggunakan rangkaian saraf konvolusi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!