Rumah > Peranti teknologi > AI > teks badan

Mengenal digit tulisan tangan menggunakan rangkaian saraf konvolusi

PHPz
Lepaskan: 2024-01-23 21:03:22
ke hadapan
1084 orang telah melayarinya

Mengenal digit tulisan tangan menggunakan rangkaian saraf konvolusi

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()
Salin selepas log masuk

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)
Salin selepas log masuk

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')
])
Salin selepas log masuk

Seterusnya, kita perlu menyusun model dan menentukan fungsi kehilangan, pengoptimum dan metrik penilaian:

# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
Salin selepas log masuk

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])
Salin selepas log masuk

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!

Label berkaitan:
sumber:163.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan