AI & GPU
راهنمایی برای درک آسان شبکه های عصبی تغییرمحور در TensorFlow

راهنمایی برای درک آسان شبکه های عصبی تغییرمحور در TensorFlow

ساخت شبکه های عصبی تغییرمحور با استفاده از TensorFlow

I. مقدمه ای بر شبکه های عصبی تغییرمحور (CNN)

A. تعریف و ویژگی های کلیدی شبکه های عصبی تغییرمحور

شبکه های عصبی تغییرمحور (CNN) نوعی معماری یادگیری عمیق هستند که اصلاً برای پردازش و تجزیه و تحلیل داده های بصری مانند تصاویر و ویدیوها طراحی شده اند. برخلاف شبکه های عصبی سنتی که داده ورودی را به عنوان یک آرایه صاف از پیکسل ها در نظر می گیرند ، CNN ها با اعمال یک سری لایه های فشرده ، استخراجی و کاملاً متصل ممکن است از توالیهای محلی و محلی داده ورودی بهره بگیرند.

ویژگی های کلیدی شبکه های عصبی تغییر محور شامل موارد زیر است: ۱. اتصال محلی: نورون ها در یک لایه تغییر محور فقط به منطقه کوچکی از لایه قبلی به عنوان زمینهٔ اشتیاقی وصل می شوند. این امکان را به شبکه می دهد تا ویژگی ها و الگوهای محلی را در داده ورودی کشف کند. ۲. وزن های مشترک: همین مجموعه وزن ها (فیلترها) در کل داده ورودی بکار می رود که تعداد پارامترها را کاهش داده و کارایی مدل را بهبود می بخشد. ۳. ازدیاد همینتی: CNN ها قادر به شناسایی همان ویژگی ها بدون توجه به مکان آنها در داده ورودی هستند که آنها را در مقابل تبدیلات فضایی مقاوم می سازد. ۴. * استخراج ویژگی سلسله مراتبی*: لایه های تغییرمحور یاد می گیرند که ویژگی های پیچیده تر و سلسله مراتبی را از ویژگی های پایین مانند لبه ها و شکل ها تا ویژگی های بالا مانند قسمت های شی و مفاهیم معنایی استخراج کنند.

B. مقایسه با شبکه های عصبی سنتی

شبکه های عصبی سنتی ، نیز به عنوان شبکه های کاملاً متصل یا نمونه های پراکنده شناخته می شوند ، داده ورودی را به عنوان یک آرایه صاف از پیکسل یا ویژگی ها می بینند. این رویکرد قادر به بهره برداری از روابط فضایی و محلی مرتبط در داده های بصری مانند تصاویر نمی شود. در مقابل ، شبکه های عصبی تغییرمحور به طور خاص برای بهره برداری از ساختار فضایی ورودی با استفاده از یک سری از لایه های تغییرمحور و استخراجی طراحی شده اند که به آنها امکان می دهد نمایشهای بیشتری برای وظایف بصری یاد بگیرند.

C. کاربردهای شبکه های عصبی تغییرمحور در حوزه های مختلف

شبکه های عصبی تغییرمحور به طور گسترده ای در مجموعه گوناگونی از حوزه ها استفاده شده اند ، از جمله:

  1. دسته بندی تصاویر: دسته بندی تصاویر به دسته های پیش تعیین شده (مانند شناسایی اشیا ، صحنه ها یا فعالیت ها) تقسیم بندی کردن تصاویر.
  2. شناسایی اشیا: شناسایی و محلی کردن چندین شیء در یک تصویر.
  3. برش نمای معنایی: اختصاص برچسب کلاسی به هر پیکسل در یک تصویر ، که امکان درک خطی ویدئویی را فراهم می کند.
  4. تولید تصاویر: تولید تصاویر جدید بر اساس داده ورودی یا نمایشهای یادگرفته شده.
  5. پردازش زبان طبیعی: استفاده از شبکه های عصبی تغییرمحور برای پردازش داده های متنی برای وظایفی مانند تجزیه احساسات ، طبقه بندی متن و ترجمه ماشین.
  6. تصویربرداری پزشکی: تجزیه و تحلیل تصاویر پزشکی مانند تصاویر ایکس ری ، اسکن CT و MRI برای وظایفی مانند تشخیص بیماری و شناسایی آفت.
  7. وسایل نقلیه خودکار: استفاده از شبکه های عصبی تغییرمحور برای وظایفی مانند شناسایی خط ، شناسایی تابلو های راهنما و جلوگیری از موانع در وسایل نقلیه خودکار.

II. TensorFlow: یک چارچوب قدرتمند یادگیری عمیق

A. بررسی کلی TensorFlow

TensorFlow یک چارچوب یادگیری عمیق منبع باز است که توسط تیم برن TensorFlow +Acumenدگیری Google توسعه یافته است. این چارچوب یک بستر جامع برای ساخت و استقرار مدل های یادگیری ماشینی و یادگیری عمیق فراهم می کند ، از جمله پشتیبانی از مجموعه گسترده ای از معماری شبکه های عصبی ، الگوریتم بهینه سازی و پلتفرم های استقرار.

ویژگی های کلیدی TensorFlow عبارتند از:

  • محاسبات انعطاف پذیر و کارآمد: TensorFlow از یک رویکرد مبتنی بر گراف نمایش و اجرای محاسبات استفاده می کند که امکان موازی سازی و بهینه سازی موثر را فراهم می کند.
  • اجرای سریع: TensorFlow 2.x اجرای سریع را معرفی کرده است که به شما اجازه می دهد عملیات را بلافاصله ارزیابی کنید و امکان اشکال زدایی و تکرار روی کد خود را ساده تر می کند.
  • کتابخانه و مدلهای پیش ساخته گسترده: TensorFlow مجموعه گسترده ای از لایه ها و معماری مدل های پیش ساخته ای مانند لایه های تغییرمحور ، عصبی و تمرکزی که می توان به راحتی سفارشی کرد و ترکیب کرد را ارائه می دهد.
  • آموزش توزیع شده و قابل توسعه: TensorFlow پشتیبانی از آموزش توزیع شده در رویکرد های چند منظوره از جمله پردازشهای مرکزی ، پردازشهای گرافیکی و TPUs را فراهم می کند و امکان آموزش موثر مدلهای مقیاس بزرگ را فراهم می کند.
  • انعطاف بالای استقرار: مدلهای TensorFlow می توانند در یک دامنه وسیع از پلتفرم ها عرضه شوند ، از جمله دستگاههای تلفن همراه ، مرورگرهای وب و محیط های ابری ، که مناسب برای مجموعه گسترده ای از برنامه های عملیاتی در دنیای واقعی است.

B. نصب و راه اندازی

برای شروع با TensorFlow ، باید کتابخانه را در سیستم خود نصب کنید. فرایند نصب بستگی به سیستم عامل شما و نسخه TensorFlowی که می خواهید استفاده کنید دارد. شما می توانید راهنمای نصب جزئیات بیشتر را در وب سایت رسمی TensorFlow (https://www.tensorflow.org/install (opens in a new tab)) پیدا کنید.

در ادامه مثالی از نحوه نصب TensorFlow با استفاده از پیشنهاد کننده بسته پایتون پیشنهاد می شود:

# نصب نسخه CPU TensorFlow
pip install tensorflow
 
# نصب نسخه GPU TensorFlow (اگر یک GPU مناسب NVIDIA دارید)
pip install tensorflow-gpu

پس از نصب TensorFlow ، می توانید نصب را با اجرای کده Python زیر تأیید کنید:

import tensorflow as tf
print(tf.__version__)

به این ترتیب نسخه TensorFlow نصب شده را به خروجی خواهید دید.

C. ویژگی ها و قابلیت های کلیدی TensorFlow

TensorFlow امکانات و قابلیت های گسترده ای را فراهم می کند که آن را یک چارچوب قدرتمند یادگیری عمیق می کند. برخی از ویژگی ها و قابلیت های کلیدی عبارتند از:

  1. اجرای سریع: TensorFlow 2.x اجرای سریع را معرفی کرده است که به شما امکان می دهد کد خود را به سبک یک دستور ، فوری و بی آزار بنویسید ، مشابه آنچه که در کد عادی پایتون می نویسید.
  2. API Keras: TensorFlow شامل API Keras است که یک واسط بالا برای شبکه های عصبی فراهم می کند که رابط کاربری بازی پذیر و مستندسازی برای ساخت ، آموزش و ارزیابی مدل های یادگیری عمیق است.
  3. شبکه سازی قابل انعطاف: TensorFlow به شما امکان می دهد مدل های سفارشی را با استفاده از کتابخانه های تغییر محور TensorFlow به سطح پایین تری و یا با استفاده از API Keras به سطح بالاتری بسازید که امکان کنترل و انعطاف را بر روی معماری مدل شما فراهم می کند.
  4. محاسبات کارآمد: TensorFlow از رویکرد مبتنی بر گراف پیداهی محاسبات بکار می برد ، اجازه می دهد مدل های شما را به صورت موازی کارآمد و بهینه اجرا کند.
  5. آموزش توزیع شده: TensorFlow پشتیبانی از آموزش توزیع شده روی چندین دستگاه را از جمله CPU ها ، GPU ها و TPUs فراهم می کند که آموزش کارآمد مدل های مقیاس بزرگ را فراهم می کند.
  6. انعطاف استقرار: مدل های TensorFlow می توانند در یک تنوع وسیعی از پلتفرم ها از جمله دستگاه های تلفن همراه ، مرورگرهای وب و محیط های ابری عرضه شوند ، که مناسب برای یک مجموعه گسترده از برنامه های واقعی است.
  7. کتابخانه ها و ابزارهای گسترده: TensorFlow اکوسیستمی از کتابخانه ها و ابزارهای غنی از جمله TensorFlow Lite برای استقرار در دستگاه های موبایل ، TensorFlow.js برای برنامه های مبتنی بر وب و TensorFlow Serving برای خدمت گزاری مدلها فراهم می کند.

III. ساخت یک شبکه عصبی تغییرمحور با TensorFlow

A. وارد کردن کتابخانه های لازم

برای ساخت یک شبکه عصبی تغییرمحور با استفاده از TensorFlow ، باید کتابخانه های زیر را وارد کنید:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.preprocessing.image import ImageDataGenerator

این کتابخانه ها قابلیت های لازم برای ساخت ، آموزش و ارزیابی مدل CNN شما را فراهم می کنند.

B. آماده سازی مجموعه داده

1. دانلود و بارگیری مجموعه داده

برای این مثال ، ما از مجموعه داده CIFAR-10 استفاده خواهیم کرد که یک الگوی پرکاربرد برای وظایف دسته بندی تصویر است. مجموعه داده CIFAR-10 شامل 60،000 تصویر به رزولوشن 32x32 در 10 کلاس است ، هر کلاس شامل 6،000 تصویر است.

شما می توانید مجموعه داده CIFAR-10 را با استفاده از کد زیر دریافت کنید:

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()

این کد، مجموعه داده را بارگیری کرده و آن را به مجموعه های آموزش و آزمایش تقسیم می کند.

2. پیش پردازش تصاویر

قبل از اینکه تصاویر را به مدل CNN وارد کنیم ، باید آنها را پیش پردازش کنیم. این عموماً شامل تغییر اندازه و نرمال کردن مقادیر پیکسل است و احتمالاً اعمال تغییرات دیگری است.

# آماده سازی مقادیر پیکسل در محدوده [0، 1]
x_train = x_train / 255.0
x_test = x_test / 255.0

3. تقسیم مجموعه داده به مجموعه های آموزش ، اعتبارسنجی و آزمایش

معمولاً به تقسیم مجدد مجموعه آموزش به مجموعه آموزش و اعتبارسنجی متناسب بازیابی عملکرد مدل در دوره های آموزش و تنظیم های هایپرپارامتر استفاده می شود. برای اینکار از روش train_test_split می توان استفاده کرد.

from sklearn.model_selection import train_test_split
 
# تقسیم مجموعه داده آموزش به مجموعه آموزش و اعتبارسنجی
x_train, x_val, y_train, y_val = train_test_split(x_train, y_train, test_size=0.2, random_state=42)

حالا شما مجموعه های زیر را دارید:

  • x_train، y_train: مجموعه آموزش
  • x_val، y_val: مجموعه اعتبارسنجی
  • x_test، y_test: مجموعه آزمایش

C. تعریف معماری شبکه عصبی تغییرمحور

1. لایه های تغییرمحور

قسمت اصلی یک شبکه عصبی تغییرمحور ، لایه تغییرمحور است که مجموعه یادگیرنده های همگن (یا filteها) قابل یادگیری را به تصویر ورودی اعمال می کند. عملکرد تغییر محور ، ویژگی های محلی مانند لبه ها ، شکل ها و بافت ها را از تصویر ورودی استخراج می کند.

این مثال نشان می دهد که چگونه لایه تغییرمحور را در TensorFlow تعریف نمایید:

model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', padding='same', input_shape=(32, 32, 3)))
model.add(MaxPooling2D((2, 2)))

در این مثال ، اولین لایه تغییرمحور دارای 32 فیلتر است ، هر کدام با اندازه 3x3 پیکسل است. تابع فعال سازی 'relu' استفاده می شود ، و وسعت 'same' مطمئن می شود که نقشه ویژگی خروجی ابعاد مکانی مشابه ورودی دارد. پارامتر input_shape اندازه تصاویر ورودی را مشخص می کند (32x32 پیکسل با 3 کانال رنگ).

پس از لایه کانولوشنی، یک لایه max pooling برای کاهش نمودارهای ویژگی و کاهش ابعاد فضایی و تعداد پارامترها افزوده می‌شود.

2. لایه‌های متصل کامل

پس از لایه‌های کانولوشنی و پولینگ، نمودارهای ویژگی به یک بردار 1 بعدی خطی تبدیل می‌شوند و به یک یا چند لایه متصل کامل (چگال) وارد می‌شوند. این لایه‌ها نمایندگی‌های سطح بالاتر را یاد می‌گیرند و دسته‌بندی نهایی را انجام می‌دهند.

model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))

در این مثال، نمودارهای ویژگی خطی شده از طریق لایه متصل به ۱۲۸ واحد با تابع فعال‌سازی ReLU عبور می‌کنند، سپس به لایه خروجی با ۱۰ واحد (یکی برای هر کلاس) و تابع فعال‌سازی softmax می‌رسند.

3. خلاصه مدل و نمایش پارامترها

شما می‌توانید خلاصه‌ای از معماری مدل را چاپ کنید و تعداد پارامترها در هر لایه را نمایش دهید:

model.summary()

این دستور جدولی را که شامل جزئیات هر لایه است، از جمله تعداد پارامترها و شکل خروجی، چاپ می‌کند.

D. کامپایل مدل کانولوشنی (CNN)

قبل از آموزش مدل، باید آن را با تعیین تابع هزینه، بهینه‌ساز و معیارهای ارزیابی کامپایل کنید.

model.compile(optimizer=Adam(lr=0.001),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

در این مثال، از بهینه‌ساز Adam با نرخ یادگیری ۰.۰۰۱، تابع هزینه categorical cross-entropy و معیار دقت برای ارزیابی عملکرد مدل استفاده می‌کنیم.

E. آموزش مدل کانولوشنی (CNN)

برای آموزش مدل کانولوشنی، می‌توان از متد fit() ارائه شده توسط API Keras استفاده کرد. این متد با دریافت داده‌های آموزش و اعتبارسنجی به عنوان ورودی، مدل را برای تعداد مشخصی از دوره‌ها آموزش می‌دهد.

history = model.fit(x_train, y_train,
                    epochs=20,
                    batch_size=32,
                    validation_data=(x_val, y_val))

در اینجا، مدل را به مدت ۲۰ دوره با اندازه دسته ۳۲ آموزش می‌دهیم. پارامتر validation_data به مدل اجازه می‌دهد در هنگام آموزش بر روی مجموعه اعتبارسنجی ارزیابی شود.

متد fit() یک شی History برمی‌گرداند که شامل اطلاعاتی درباره فرآیند آموزش است، مانند هزینه و دقت آموزش و اعتبارسنجی برای هر دوره.

همچنین می‌توانید مدل آموزش دیده را برای استفاده در آینده ذخیره کنید:

model.save('cifar10_cnn_model.h5')

این عمل باعث ذخیره کردن معماری و وزنهای مدل در فایل 'cifar10_cnn_model.h5' می‌شود.

F. ارزیابی مدل کانولوشنی (CNN)

بعد از آموزش مدل، می‌توانید عملکرد آن را بر روی مجموعه آزمون با استفاده از متد evaluate() ارزیابی کنید:

test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)

این کد، هزینه و دقت آزمون را که ایده‌ای از قدرت تعمیم مدل به داده‌های ناشناخته می‌دهد، چاپ می‌کند.

همچنین می‌توانید منحنی‌های آموزش و اعتبارسنجی را تصویرسازی کنید تا درک بهتری از عملکرد مدل در طول آموزش کسب کنید:

import matplotlib.pyplot as plt
 
plt.figure(figsizeدر این مثال، ابتدا مدل VGG16 پیش آموزش دیده را بارگیری می‌کنیم که روی مجموعه داده ImageNet آموزش داده شده است. سپس وزن‌های مدل پیش آموزش دیده را یخ می‌زنیم، به این معنی که در طول آموزش، وزن‌ها به روزرسانی نخواهند شد.
 
بعداً، لایه‌های جدیدی را بر روی مدل پیش آموزش دیده اضافه می‌کنیم، از جمله یک لایه flatten، یک لایه dense با ۲۵۶ واحد و فعال‌سازی ReLU و یک لایه dense نهایی با ۱۰ واحد و فعال‌سازی softmax (برای مسئله دسته‌بندی با ۱۰ کلاس).
 
در نهایت، مدل را با بهینه‌ساز Adam و تابع هزینه categorical cross-entropy کامپایل می‌کنیم و آن را بر روی مجموعه داده تصاویر جدید آموزش می‌دهیم.
 
## نتیجه‌گیری
 
در این آموزش، به چندین مفهوم و تکنیک کلیدی در یادگیری عمیق پرداختیم، از جمله شبکه‌های عصبی کانولوشنی (CNN)، شبکه‌های عصبی بازگشتی (RNN) و حافظه کوتاه مدت بلند (LSTM). همچنین از استفاده از یادگیری انتقالی نیز صحبت کردیم که می‌تواند یک ابزار قدرتمند برای بهره‌برداری از مدل‌های پیش آموزش دیده برای حل مسائل جدید باشد.
 
طی آموزش، مثال‌ها و قطعات کد خاص را برای توضیح مفاهیم تاکید شده ارائه کرده‌ایم. با کار بر روی این مثال‌ها، باید درک بهتری از نحوه اعمال تکنیک‌های یادگیری عمیق بر روی مسائل و داده‌های خود داشته باشید.
 
در حالی که به بررسی و آزمایش در یادگیری عمیق ادامه می‌دهید، به یاد داشته باشید که این یک زمینه فعال و به سرعت در حال تکامل است و روش‌ها و معماری‌های جدیدی که تمام مواقع در حال توسعه است، وجود دارد. حس کنجکاوی را داشته باشید، به یادگیری ادامه دهید و از امتحان کردن چیزهای جدید نترسید - این بهترین راه برای سرکوب کردن مرزهای حاشیه‌ای است که با یادگیری عمیق ممکن است مواجه شوید.