یکی از نکات بسیار مهم در مباحث مربوط به یادگیری عمیق (Deep learning) و شبکه های عصبی (Neural networks) چگونگی پیاده سازی مدل ریاضیاتی مورد نظر است.
رایج ترین توصیه برای افزایش سرعت برنامه نوشته شده و به طور کلی بهبود سطح نتیجه فاز پیاده سازی، پرهیز از به کار بردن حلقه های For به ویژه حلقه های For تو در تو تا حد ممکن است. راه حل این مسئله استفاده از تکنیک های Vectorization است که در صورت ترجمه لغوی به «بردارسازی» ترجمه می شود.
در این مطلب، به بررسی تفاوت زمان مورد نیاز برای انجام ضرب داخلی دو ماتریس با استفاده از شیوه های زیر می پردازیم.
معادله کلی دررگرسیون لجستیک (به انگلیسی: Logistic regression) به صورت زیر است:
در این فرمول، W و X هر یک ماتریس هایی هستند که می توانند شامل تعداد زیادی درایه عددی باشند.
مثال: فرض کنید W و X دارای مقادیر زیر هستند:
برای محاسبه رگرسیون لجستیک، ابتدا ترانهاده ماتریس W را به دست می آوریم:
و طبق فرمول ارایه شده برای لجستیک رگرشن، در ادامه خواهیم داشت:
پس حاصل نهایی ضرب داخلی دو ماتریس W و X در این مثال برابر با 58 است.
For loop
در حالت عادی برای پیاده سازی این روش در پایتون، از یک حلقه for استفاده می کنیم:
a=[1,2,3] b=[7,9,11] c=0 for i in range(len(a)): c+=a[i]*b[i] print(c)
در حالت وکتورایز شده از کتابخانه numpy استفاده می کنیم:
import numpy as np a = [1,2,3] b = [7,9,11] c = 0 c = np.dot(a,b) print(c)
همانطور که در ویدیوی این پست مشاهده می کنید اگر تعداد درایه های ماتریس ها زیاد باشد، برای اجرای حلقه for به زمان بسیار زیادتری نیاز است.