یادگیری انتقالی یکی از روش های کارامد برای ایجاد مدل در یادگیری عمیق است.با استفاده از یادگیری انتقالی می توان از مدل هایی که با دیتاست های بزرگ و داده های زیاد اموزش دیده اند استفاده کرد و وزن هایی که این مدل های در فرایند اموزش بدست اوردن برای ایجاد مدل مورد نظرمان استفاده کنیم به عنوان نمونه برای تشخیص جنسیت از مدل VGG16 استفاده می کنیم و فرایند اموزش را توضیح می دهیم .
از کتابخانه ی کراس برای اموزش مدل استفاده می کنیم و برای استفاده از VGG16 از ستور زیر استفاده می کنیم .
vgg = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
در کد بالا مدل با استفاده از وزن هایی که در دیتاست imagenet بدست امده تعریف می شود و اندازه ی ورودی در این مدل به صورت 224*224*3 تعریف شده است بعد از تعریف مدل با استفاده از دستور زیر این قسمت از شبکه را فریز می کنیم تا فرانید اموزش برای این قسمت انجام نشده و از وزن های بدست امده در طول اموزش با استفاده از دیتاست imagenet استفاده شود .
vgg.trainable = False
در ادامه مدل VGG را به مدل اصلی اضافه کرد و لایه های موردنیاز برای کلاس بندی داده های را طبق کد زیر اضافه می کنیم .
model = Sequential()
model.add(vgg)
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
تابع خطا و تابع بهینه سازی را با استفاده از دستور زیر برای مدل تعریف می کنیم.
model.compile(loss='binary_crossentropy',
metrics=['accuracy'],
optimizer='adam')
در انتها مدل را فیت کرده و فرایند اموزش را انجام می دهیم
history_without_tuning = model.fit(training_generator,
steps_per_epoch=22667 // batch_size,
epochs=10,
validation_data=test_generator,
validation_steps=5472 // batch_size,
verbose=1,
callbacks = [checkpoint_callback,earlystop])
به این طریق ما یک مدل برای تشخیص جنسیت در داده های انسانی تعریف کرده و به دقت قابل توجهی روی داده های تست دست پیدا می کنیم .
برای مشاهده کامل کد اجرا و همچنین نتایج روی داده های تست به مخزن گیت هاب به ادرس زیر مراجعه کنید.