simple MNIST convent

آموزش یک شبکه عصبی کانوولوشنال برای دستهبندی ارقام MNIST:
در این پست، به طور گام به گام روش ساده MNIST با استفاده از شبکه عصبی کانولوشن (CNN) میپردازیم. MNIST یک مجموعه داده استاندارد شامل تصاویر دستنویس ارقام 0 تا 9 است که برای آموزش و آزمایش مدلهای تشخیص تصویر به کار میرود.
نکته: برای درک بهتر، پیشنهاد می شود کد هایی که در ادامه می آید را به IDE دلخواه خود برده و اجرا کنید تا بهتر ساختار و عملکرد آن را متوجه شوید.گام 1: بارگیری و پیشپردازش داده
ابتدا، دادههای MNIST را بارگیری کرده و آنها را به دادههای آموزش و آزمون تقسیم میکنیم:
- مجموعه داده MNIST را از اینجا دانلود کنید.
- داده ها را به دو دسته train و test تقسیم کنید.
- تصاویر را به اندازه 28x28 پیکسل تغییر اندازه دهید.
- تصاویر را به مقادیر بین 0 و 1 مقیاس بندی کنید.
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
# بارگیری دادهها
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# پیشپردازش دادهها
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)
گام 2: ساخت مدل CNN
حالا، یک مدل CNN ساده با استفاده از TensorFlow و Keras بسازیم. این مدل شامل لایههای کانوولوشنال، لایههای MaxPooling و لایههای Fully Connected است:
- از کتابخانه TensorFlow یا PyTorch برای ساخت مدل CNN استفاده کنید.
- مدل CNN شما باید شامل لایه های کانولوشن، استخر و کاملاً متصل باشد.
- از تابع ReLU به عنوان تابع فعال سازی لایه های کانولوشن و استخر استفاده کنید.
- از تابع softmax به عنوان تابع فعال سازی لایه کاملاً متصل استفاده کنید.
from tensorflow.keras import layers, models
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
tf.keras.layers.MaxPooling2D((2, 2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
گام 3: کامپایل و آموزش مدل
حالا مدل را کامپایل کرده و با دادههای آموزشی آن را آموزش دهیم:
- از الگوریتم Adam برای آموزش مدل CNN خود استفاده کنید.
- از تابع cross-entropy به عنوان تابع از دست دادن استفاده کنید.
- مدل خود را برای تعداد دوره مورد نظر خود (در اینجا 10) آموزش دهید.
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=10, batch_size=64, validation_split=0.2)
گام 4: ارزیابی مدل
سرانجام، مدل را با دادههای آزمون ارزیابی کرده و دقت آن را محاسبه میکنیم:
- دقت مدل خود را بر روی مجموعه داده test ارزیابی کنید.
- در صورت نیاز، مدل خود را دوباره آموزش دهید و hyperparameters را تنظیم کنید.
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f'Test Accuracy: {test_acc}')
- برای بهبود دقت مدل خود می توانید از تکنیک های مختلفی مانند data augmentation و dropout یا سایر روش هایی که آموزش داده شده استفاده کنید.
- می توانید از مدل های CNN پیش آموزش دیده مانند VGG16 و ResNet50 برای fine-tuning بر روی مجموعه داده MNIST استفاده کنید.
- MNIST Dataset: http://yann.lecun.com/exdb/mnist/
- Convolutional Neural Networks: https://www.tensorflow.org/tutorials/images/cnn
- TensorFlow: https://www.tensorflow.org/
- PyTorch: https://pytorch.org/