simple MNIST convent

یک مدل Convolutional Neural Network (CNN) برای دسته‌بندی تصاویر MNIST استفاده می‌شود. MNIST یک مجموعه داده است که شامل تصاویر ارقام دست‌نویس می‌شود، هر تصویر به اندازه 28x28 پیکسل است.

در این مدل، از لایه‌های Convolutional برای استخراج ویژگی‌ها از تصاویر استفاده می‌شود. همچنین از لایه‌های MaxPooling برای کاهش ابعاد تصاویر و افزایش سرعت آموزش مدل استفاده شده است. سپس با استفاده از لایه‌های Fully Connected، ویژگی‌های استخراج شده به یک یا چند کلاس از اعداد 0 تا 9 نگاشت می‌شوند.

در نهایت، مدل با استفاده از تابع هزینه sparse_categorical_crossentropy و بهینه‌ساز Adam کامپایل شده و آموزش آن با داده‌های MNIST انجام می‌شود. این مدل می‌تواند برای تشخیص ارقام دست‌نویس در تصاویر MNIST مورد استفاده قرار گیرد.

آموزش یک شبکه عصبی کانوولوشنال برای دسته‌بندی ارقام MNIST:

در این پست، به طور گام به گام روش ساده MNIST با استفاده از شبکه عصبی کانولوشن (CNN) می‌پردازیم. MNIST یک مجموعه داده استاندارد شامل تصاویر دست‌نویس ارقام 0 تا 9 است که برای آموزش و آزمایش مدل‌های تشخیص تصویر به کار می‌رود.

نکته: برای درک بهتر، پیشنهاد می شود کد هایی که در ادامه می آید را به IDE دلخواه خود برده و اجرا کنید تا بهتر ساختار و عملکرد آن را متوجه شوید.

گام 1: بارگیری و پیش‌پردازش داده

ابتدا، داده‌های MNIST را بارگیری کرده و آنها را به داده‌های آموزش و آزمون تقسیم می‌کنیم:

  1. مجموعه داده MNIST را از اینجا دانلود کنید.
  2. داده ها را به دو دسته train و test تقسیم کنید.
  3. تصاویر را به اندازه 28x28 پیکسل تغییر اندازه دهید.
  4. تصاویر را به مقادیر بین 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 است:

  1. از کتابخانه TensorFlow یا PyTorch برای ساخت مدل CNN استفاده کنید.
  2. مدل CNN شما باید شامل لایه های کانولوشن، استخر و کاملاً متصل باشد.
  3. از تابع ReLU به عنوان تابع فعال سازی لایه های کانولوشن و استخر استفاده کنید.
  4. از تابع 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: کامپایل و آموزش مدل

حالا مدل را کامپایل کرده و با داده‌های آموزشی آن را آموزش دهیم:

  1. از الگوریتم Adam برای آموزش مدل CNN خود استفاده کنید.
  2. از تابع cross-entropy به عنوان تابع از دست دادن استفاده کنید.
  3. مدل خود را برای تعداد دوره مورد نظر خود (در اینجا 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: ارزیابی مدل

سرانجام، مدل را با داده‌های آزمون ارزیابی کرده و دقت آن را محاسبه می‌کنیم:

  1. دقت مدل خود را بر روی مجموعه داده test ارزیابی کنید.
  2. در صورت نیاز، مدل خود را دوباره آموزش دهید و 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 استفاده کنید.
در این بلاگ پست، یک مدل ساده CNN برای دسته‌بندی ارقام MNIST آموزش دادیم. شما می‌توانید با تغییر پارامترها و افزودن لایه‌ها، بهبودهای بیشتری در دقت مدل حاصل کنید. این یک شروع خوب برای افرادی است که به یادگیری شبکه‌های عصبی عمیق برای دسته‌بندی تصاویر علاقه دارند.   منابع این پست که همچنین می تواند برای شما مفید باشد: