تا حالا به این فکر کردی که هوش مصنوعی چطور میتونه کارهایی رو انجام بده که قبلاً غیرممکن به نظر میرسید؟ تشخیص چهره، ترجمه زبان، رانندگی خودکار، و هزاران کار شگفت انگیز دیگه که همه با الهام از مغز انسان و به کمک یادگیری عمیق انجام میشن.
یادگیری عمیق یه شاخه از هوش مصنوعیه که با تقلید از عملکرد مغز انسان، مسائل پیچیده رو حل میکنه. تو این روش، از شبکههای عصبی مصنوعی استفاده میشه که با به کارگیری مجموعه ای از الگوریتمها تو لایههای مختلف، مغز انسان رو شبیه سازی میکنن. اما پیاده سازی این شبکههای عصبی کار راحتی نیست و نیاز به دانش عمیق برنامه نویسی داره.
اینجاست که Keras به عنوان یه ناجی وارد میشه! Keras یه کتابخونه قدرتمند برای یادگیری عمیقه که بهت این امکان رو میده بدون نیاز به دانش تخصصی، مدلهای پیچیده یادگیری عمیق رو طراحی و پیاده سازی کنی.
تو این مقاله، میخوایم با هم به دنیای شگفت انگیز Keras سفر کنیم و بگیم چرا این کتابخونه اینقدر بین برنامه نویسا و متخصصای هوش مصنوعی محبوب شده.
همراه ما باش تا با Keras، قدرت هوش مصنوعی رو تو دستات بگیری و به حل مسائل پیچیده با روشی نوین و کارآمد بپردازی!
Keras یه API سطح بالای یادگیری عمیقه که توسط گوگل توسعه داده شده و هدفش اینه که پیاده سازی شبکههای عصبی رو به آسونترین شکل ممکن انجام بدی. این ابزار به زبان پایتون نوشته شده و استفاده ازش، ساختن مدلهای یادگیری عمیق رو خیلی راحت میکنه. Keras از چندین بک اند مختلف برای محاسبات شبکه عصبی پشتیبانی میکنه.
تصور کن میخوای یه مدل هوش مصنوعی بسازی که بتونه بین گربه و سگ توی تصاویر تفاوت قائل بشه. با Keras، نیازی به نوشتن کدهای گیج کننده و دست و پا گیر نداری. فقط کافیه با دستورات ساده و روان، مثل دستور پخت غذا، به Keras بگی که مدلت باید چیکار کنه و هر بخش چه وظیفه ای داره. Keras مثل یه مترجم عمل میکنه و دستوراتت رو به زبان قابل فهم برای کامپیوترها تبدیل میکنه. به این ترتیب، میتونی بدون غرق شدن توی جزئیات فنی، روی هدف اصلیت یعنی حل مسئله با کمک هوش مصنوعی تمرکز کنی.
در این بخش میخوایم مزایا و معایب این کتابخونه رو بررسی کنیم تا بتونی تصمیم بگیری که آیا این ابزار برای پروژه هات مناسب هست یا نه.
"سادگی، نهایت کمال است." – لئوناردو داوینچی
در این بخش میخوایم Keras رو با معروفترین رقباش مقایسه کنیم.

TensorFlow محصول گوگله و یکی از معروفترین ابزارهای یادگیری عمیق به حساب میاد. این فریم ورک خیلی قدرتمنده و ازش برای پروژههای بزرگ و پیچیده استفاده میشه. البته، کار کردن با TensorFlow میتونه برای تازه کارها یه مقدار گیج کننده باشه، چون پیچیدگیهای زیادی داره. Keras به عنوان یه رابط کاربری سطح بالا روی TensorFlow سوار میشه و کار باهاش رو خیلی آسونتر میکنه. با Keras میتونی بدون درگیر شدن با جزئیات پیچیده، از قدرت TensorFlow استفاده کنی.
PyTorch یه فریم ورک دیگه ست که خیلی بین محققان و دانشگاهیها محبوبه. این فریم ورک انعطاف پذیری زیادی داره و اجازه میده تا مدلها رو به صورت داینامیک تعریف کنی. یعنی میتونی هر لحظه شبکه عصبیت رو تغییر بدی و این خیلی برای پروژههای تحقیقاتی مفیده. PyTorch هم مثل Keras رابط کاربری خوبی داره ولی به نسبت Keras یه کم پیچیده تره. اگه تازه کاری، Keras گزینه بهتریه، اما اگه دنبال انعطاف پذیری بیشتری هستی، PyTorch رو امتحان کن.
اگه دوست داری بیشتر در مورد TensorFlow و PyTorch بدونی یه سری به مقالههای "آموزش TENSORFLOW" و "PyTorch چیست؟" بزن.
Scikit-Learn بیشتر برای یادگیری ماشین کلاسیک استفاده میشه. یعنی اگه بخوای مدلهای سادهتری مثل رگرسیون، دسته بندی و کلاسترینگ بسازی، Scikit-Learn عالیه. این ابزار خیلی ساده و کاربرپسنده، ولی برای یادگیری عمیق به قدرت Keras یا PyTorch نمیرسه. میتونی از Scikit-Learn برای پیش پردازش دادهها استفاده کنی و بعد از Keras برای ساخت مدلهای عمیقتر بهره ببری.
در مقاله جامع "آموزش Scikit-Learn در پایتون" به صورت کاربردی و عملی این کتابخونه رو بهت آموزش دادیم. پیشنهاد میکنم از دستش ندی!😉
Theano یه کتابخونه قدیمی تره که توی دانشگاه مونترال ساخته شده. این ابزار برای محاسبات عددی خیلی خوبه و از GPU برای سرعت بخشیدن به محاسبات استفاده میکنه. با این حال، Theano دیگه آپدیت نمیشه و توسعه دهندهها به ابزارهای جدیدتری مثل TensorFlow و PyTorch روی آوردن. Keras از Theano هم پشتیبانی میکنه، ولی بهتره از TensorFlow به عنوان بک اند استفاده کنی.
Microsoft Cognitive Toolkit (CNTK) یه فریم ورک دیگه ست که توسط مایکروسافت توسعه داده شده. این فریم ورک هم قدرت زیادی داره و میتونه مدلهای پیچیده رو آموزش بده. CNTK بیشتر توی پروژههای مایکروسافت استفاده میشه ولی به اندازه TensorFlow یا PyTorch محبوبیت نداره. Keras با CNTK هم سازگاره و میتونی از این بک اند هم استفاده کنی.
حالا که تفاوتهای Keras با بقیه فریم ورکها رو فهمیدی، آماده ای که بیشتر باهاش کار کنی؟ Keras به خاطر سادگی و قدرتش یه انتخاب عالیه، ولی اگه پروژت پیچیدهتر بشه یا نیاز به انعطاف بیشتری داشته باشی، میتونی سراغ فریم ورکهای دیگه هم بری. پس ادامه مقاله رو بخون تا بیشتر با قابلیتهای Keras آشنا بشی و ببینی چطور میتونی از این ابزار فوق العاده برای پروژههای یادگیری عمیقت استفاده کنی!
فرض میکنم که TensorFlow، Theano یا CNTK رو نصب کردید.
Keras رو میتونی با pip یا conda نصب کنی:
pip install kerasیا
conda install kerasKeras هفت دیتاست مختلف ارائه میده که میتونی مستقیم از خود Keras بارگذاری کنی. این دیتاها شامل دیتاستهای تصویری، قیمت خونه و نقد فیلم هستن.
توی این مقاله، ما از دیتاست MNIST استفاده میکنیم که شامل 70000 تصویر 28x28 خاکستری با 10 کلاس مختلفه. Keras این دیتا رو به یک مجموعه آموزشی با 60000 نمونه و یک مجموعه تست با 10000 نمونه تقسیم میکنه.
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()برای این که تصاویر رو به یه شبکه عصبی کانولوشنی بدیم، باید دادهها رو به چهار بعد تبدیل کنیم. این کار رو میتونیم با روش reshape توی numpy انجام بدیم. همچنین دادهها رو به float تبدیل و نرمال سازی میکنیم.
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)برچسبها رو هم با استفاده از متد to_categorical از Keras به one-hot encoding تبدیل میکنیم.
from keras.utils import to_categorical
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)سادهترین راه برای ساخت مدل توی Keras استفاده از API ترتیبیه که بهت اجازه میده لایهها رو یکی پس از دیگری بچینی. مشکل API ترتیبی اینه که اجازه نمیده مدل هایی با ورودی یا خروجیهای متعدد بسازی، که برای بعضی مسائل نیازه.
با این حال، API ترتیبی برای بیشتر مسائل انتخابی عالیه.
برای ساخت یه شبکه عصبی کانولوشنی، فقط کافیه یه شیء Sequential بسازی و از تابع add برای اضافه کردن لایهها استفاده کنی.
from keras.models import Sequential
from keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(5,5), activation='relu', input_shape=x_train.shape[1:]))
model.add(Conv2D(filters=32, kernel_size=(5,5), activation='relu'))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Dropout(rate=0.25))
model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Dropout(rate=0.25))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(rate=0.5))
model.add(Dense(10, activation='softmax'))کد بالا اول یه شیء Sequential میسازه و چند تا لایه کانولوشنی، مکس پولینگ و دراپ آوت اضافه میکنه. سپس خروجی رو تخت میکنه و اونو به یه لایه چگال و دراپ آوت میفرسته قبل از این که به لایه خروجی برسه.
اگر میخوای مدلی بسازی که انعطاف پذیری بیشتری داشته باشه، API تابعی Keras بهترین انتخابه. این API بهت اجازه میده مدلهای پیچیدهتری با چندین ورودی و خروجی و لایههای مشترک بسازی. با این حال، استفاده از API تابعی ممکنه کمی پیچیدهتر و کمتر قابل خواندن باشه.
وقتی از API تابعی استفاده میکنی، باید هر لایه رو به لایه قبلی متصل کنی. این یعنی باید خروجی هر لایه رو به عنوان ورودی به لایه بعدی پاس بدی. همچنین، حتماً باید با یه لایه ورودی (Input layer) شروع کنی.
from keras.models import Model
from keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout, Input
inputs = Input(shape=x_train.shape[1:])
x = Conv2D(filters=32, kernel_size=(5,5), activation='relu')(inputs)
x = Conv2D(filters=32, kernel_size=(5,5), activation='relu')(x)
x = MaxPool2D(pool_size=(2, 2))(x)
x = Dropout(rate=0.25)(x)
x = Conv2D(filters=64, kernel_size=(3,3), activation='relu')(x)
x = Conv2D(filters=64, kernel_size=(3,3), activation='relu')(x)
x = MaxPool2D(pool_size=(2, 2))(x)
x = Dropout(rate=0.25)(x)
x = Flatten()(x)
x = Dense(256, activation='relu')(x)
x = Dropout(rate=0.5)(x)
predictions = Dense(10, activation='softmax')(x)
model = Model(inputs=inputs, outputs=predictions)قبل از این که بتونیم مدل رو آموزش بدیم، باید فرآیند یادگیری رو تنظیم کنیم. برای این کار باید یه بهینه ساز (optimizer)، یه تابع خطا (loss function) و به صورت اختیاری چند معیار (metrics) مثل دقت رو مشخص کنیم.
تابع خطا معیاریه برای اندازه گیری این که مدل چقدر در رسیدن به هدف مشخص شده موفق بوده.
بهینه ساز برای کمینه سازی تابع خطا با به روزرسانی وزنها با استفاده از گرادیانها استفاده میشه.
model.compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy']
)افزایش دادهها یه فرایند برای ایجاد دادههای بیشتر از دادههای موجوده. برای تصاویر میتونی تغییرات کوچیکی مثل چرخوندن تصویر، زوم کردن، افزودن نویز و خیلی چیزای دیگه انجام بدی.
این کار کمک میکنه مدل مقاومتر بشه و مشکل کمبود دادهها رو حل میکنه. Keras یه متد به اسم ImageDataGenerator داره که میتونی ازش برای افزایش تصاویر استفاده کنی.
from keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(
rotation_range=10,
zoom_range=0.1,
width_shift_range=0.1,
height_shift_range=0.1
)این ImageDataGenerator تصاویر جدیدی ایجاد میکنه که چرخونده شدن، زوم شدن یا در عرض و ارتفاع تغییر مکان دادن.
حالا که مدل رو تعریف و کامپایل کردیم، وقت آموزش دادنه. معمولاً از متد fit استفاده میکنیم ولی چون از یه تولیدکننده داده استفاده میکنیم، از fit_generator استفاده میکنیم و تولیدکننده، دادههای X و y، تعداد epochها و اندازه batch رو بهش پاس میدیم. همچنین یه مجموعه اعتبارسنجی هم بهش میدیم تا خطا و دقت روی هر دو مجموعه رو بررسی کنیم.
epochs = 3
batch_size = 32
history = model.fit_generator(datagen.flow(x_train, y_train, batch_size=batch_size), epochs=epochs,
validation_data=(x_test, y_test), steps_per_epoch=x_train.shape[0]//batch_size)Epoch 1/5
1875/1875 [==============================] - 22s 12ms/step - loss: 0.1037 - acc: 0.9741 - val_loss: 0.0445 - val_acc: 0.9908
Epoch 2/5
1875/1875 [==============================] - 22s 12ms/step - loss: 0.0879 - acc: 0.9781 - val_loss: 0.0259 - val_acc: 0.9937
Epoch 3/5
1875/1875 [==============================] - 22s 12ms/step - loss: 0.0835 - acc: 0.9788 - val_loss: 0.0321 - val_acc: 0.9926
Epoch 4/5
1875/1875 [==============================] - 22s 12ms/step - loss: 0.0819 - acc: 0.9792 - val_loss: 0.0264 - val_acc: 0.9936
Epoch 5/5
1875/1875 [==============================] - 22s 12ms/step - loss: 0.0790 - acc: 0.9790 - val_loss: 0.0220 - val_acc: 0.9938می تونیم دقت و خطای آموزش و تست رو برای هر epoch بصورت نموداری نمایش بدیم تا درک بهتری از عملکرد مدل داشته باشیم. دقت و خطا در طول epochها در متغیر history که هنگام آموزش دریافت کردیم ذخیره میشه و از Matplotlib برای نمایش این دادهها استفاده میکنیم.
import matplotlib.pyplot as plt
plt.plot(history.history['acc'], label='training accuracy')
plt.plot(history.history['val_acc'], label='testing accuracy')
plt.title('Accuracy')
plt.xlabel('epochs')
plt.ylabel('accuracy')
plt.legend()
plt.plot(history.history['loss'], label='training loss')
plt.plot(history.history['val_loss'], label='testing loss')
plt.title('Loss')
plt.xlabel('epochs')
plt.ylabel('loss')
plt.legend()
توی نمودارهای بالا میبینیم که مدل ما بیش برازش نمیکنه و هنوز میتونیم epochهای بیشتری رو آموزش بدیم چون خطای اعتبارسنجی هنوز در حال کاهشه.
حالا که با نصب و راه اندازی Keras آشنا شدی، وقتشه دست به کار بشی و اولین مدل یادگیری عمیق خودت رو بسازی!
در این بخش، قدم به قدم نحوه ساخت یه مدل ساده با استفاده از Keras رو یاد میگیری.
مدل Sequential سادهترین نوع مدل توی Keras هست. این مدل بهت اجازه میده لایهها رو به ترتیب به هم متصل کنی.
برای شروع، از دیتاست MNIST استفاده میکنیم که شامل تصاویر دست نوشته اعداد هست. این دیتاست به دو مجموعه آموزشی و تست تقسیم شده.
from keras.datasets import mnist
# بارگذاری دیتاست
(x_train, y_train), (x_test, y_test) = mnist.load_data()تصاویر باید به فرمت مناسب برای شبکه عصبی تبدیل بشن. این شامل تغییر شکل تصاویر به چهار بعد، تبدیل دادهها به نوع float32 و نرمال سازی اوناست.
# تبدیل دادهها به float32 و نرمال سازی
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255
# تغییر شکل تصاویر به چهار بعد
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)همچنین باید برچسبها رو به فرمت one-hot encoding تبدیل کنیم.
from keras.utils import to_categorical
# تبدیل برچسبها به one-hot encoding
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)حالا وقتشه که مدل رو بسازیم. از مدل Sequential استفاده میکنیم و لایههای مختلف رو یکی یکی به مدل اضافه میکنیم.
from keras.models import Sequential
from keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout
# ساخت مدل Sequential
model = Sequential()
# اضافه کردن لایههای کانولوشنی، مکس پولینگ و دراپ آوت
model.add(Conv2D(filters=32, kernel_size=(5,5), activation='relu', input_shape=x_train.shape[1:]))
model.add(Conv2D(filters=32, kernel_size=(5,5), activation='relu'))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Dropout(rate=0.25))
model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Dropout(rate=0.25))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(rate=0.5))
model.add(Dense(10, activation='softmax'))توضیح کد:
قبل از این که مدل رو آموزش بدیم، باید اون رو کامپایل کنیم. برای این کار، یه بهینه ساز (optimizer)، یه تابع خطا (loss function) و معیار دقت (accuracy) رو مشخص میکنیم.
# کامپایل کردن مدل
model.compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy']
)حالا وقتشه که مدل رو با دادههای آموزشی تمرین بدیم. از متد fit برای آموزش مدل استفاده میکنیم.
# آموزش مدل
model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=10, batch_size=200, verbose=2)توضیح کد:
در نهایت، مدل رو با دادههای تست ارزیابی میکنیم تا دقت اون رو ببینیم.
# ارزیابی مدل
scores = model.evaluate(x_test, y_test, verbose=0)
print(f'Accuracy: {scores[1] * 100}%')این کد دقت مدل رو روی دادههای تست چاپ میکنه.
دیدی چقدر راحت میتونی با Keras یه مدل یادگیری عمیق بسازی؟😉 این فقط یکی از روشهای ساخت مدل بود. با Keras میتونی مدلهای پیچیدهتر و انعطاف پذیرتری هم بسازی. حالا وقتشه که دست به کار بشی و مدلهای خودت رو بسازی!

Keras برای پروژه هایی که نیاز به ساخت و آموزش مدلهای یادگیری عمیق دارن و همچنین برای کسانی که تازه وارد دنیای یادگیری ماشین شدن خیلی مناسبه.
خیر، Keras به طور مستقیم با PyTorch کار نمیکنه. Keras بیشتر با TensorFlow، Theano و CNTK سازگاره.
می تونی از روش model.save برای ذخیره مدل استفاده کنی. مثلاً:
model.save('my_model.h5')برای بارگذاری مدل ذخیره شده میتونی از keras.models.load_model استفاده کنی:
from keras.models import load_model
model = load_model('my_model.h5')Keras بیشتر برای یادگیری عمیق مناسبه، ولی میتونی از اون برای برخی پروژههای یادگیری ماشین کلاسیک هم استفاده کنی.
Keras یکی از بهترین ابزارها برای ورود به دنیای یادگیری ماشین و ساخت مدلهای یادگیری عمیق هست. با سادگی و انعطاف پذیریش، به شما این امکان رو میده که بدون سردرگمی و پیچیدگیهای اضافی، مدلهای خودتون رو بسازید و آزمایش کنید. چه تازه کار باشید و چه یک حرفه ای، Keras ابزاریست که به شما کمک میکنه تا سریعتر و بهتر مدلهای خودتون رو توسعه بدید.
یادت باشه که یادگیری ماشین یک سفره و Keras میتونه بهترین همراه برای این سفر باشه. پس شروع کن و از این ابزار فوق العاده برای ساختن آینده ای هوشمندتر استفاده کن.
"یادگیری ماشین آینده ی دنیای تکنولوژی است و Keras یکی از دروازههای ورود به این آینده است." – ناشناس
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: