«نقشه راه یادگیری در ChistIO»

دوره های رایگان که تا کنون در ChistIO ارائه شده است:

آشنایی با داده کاوی(Data Mining) و کاربردهای آن
سیستم های توزیع شده(Distributed Systems)
درس همروندی(Concurrency) و مدیریت ترمیم(Recovery Management) در پایگاه داده ها
درس آشنایی با پایگاه داده های NoSQL 
درس توابع درهم ساز(Hash Functions)
یادگیری عمیق(Deep Learning) در شبکه های عصبی
درس ضد الگوها(Anti Patterns) در مهندسی نرم افزار و برنامه نویسی

تعریف پرسپترون(Perceptron) در شبکه های عصبی

در درس قبل یک شمای کلی از شبکه های عصبی و قانون ضرب ورودی در وزن ها را یادگرفتیم. اجازه بدهید در این درس ببنیم کامپیوتر با شبکه های عصبی چگونه یادگیری را انجام میدهد.

فرض کنید به یک بچه کوچک میخواهید آموزش بدهید. مثلا میخواهید به اون بگویید که یک اتوبوس چیست. برای این کار چه کاری میکنید؟ یک راه ساده(که خود ما هم خیلی چیزها را به وسیله آن یادگرفته ایم) این است که به بچه کوچک بگوییم که این اتوبوس است و آن اتوبوس نیست. چندین مورد اتوبوس را به بچه نشان میدهیم و چندین موردی که اتوبوس نیست را هم به اون میگوییم. به راحتی یک بچه با چند بار تمرین میتواند یادبگیرد که اتوبوس چیست! یعنی میتواند تمایز اتوبوس را با بقیه ماشین های دیگر درک کند. این روش پایه روش یادگیری در پرسپترون و بسیاری دیگر از الگوریتم های داده کاوی است.

ادامه خواندن “تعریف پرسپترون(Perceptron) در شبکه های عصبی”

شبکه عصبی(Neural Network) چیست؟

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

البته که این توضیح در علم پزشکی مفید است ولی در علوم کامپیوتر و هوش مصنوعی بهتر است ما فقط از نورون های مغز برای ساخت الگوریتمی به نام شبکه عصبی مصنوعی(Artificial Neural Network) بهره میگیریم.

ادامه خواندن “شبکه عصبی(Neural Network) چیست؟”

معکوس سازی وابستگی(Dependency Inversion) در برنامه نویسی

۱. ماژول های سطح بالا نباید به ماژول های سطح پایین وابستگی داشته باشند. هر دو این ماژول ها باید به یک سطح انتزاعی وابسته باشند.

۲. انتزاع ها نباید به جزئیات وابسته باشند بلکه جزئیات باید به انتزاع ها وابسته باشند

این تعریف اصلی معکوس سازی وابستگی(Dependency Inversion) بود. این اصل پنچمین آخرین حرف کلمه SOLID را نشان میدهد که در دوره SOLID به آن میپردازیم.

اگر از دو تعریف بالا که دو قانون مربوط به معکوسی سازی وابستگی بود چیزی سردرنیاوردید به مثال زیر توجه کنید:

ادامه خواندن “معکوس سازی وابستگی(Dependency Inversion) در برنامه نویسی”

مفهوم جدایی واسط ها(Interface Segregation Principle) در مهندسی نرم افزار

تا اینجا با مفاهیم زیادی از اصول SOLID در برنامه نویسی و مهندسی نرم افزار آشنا شدیم. در این قسمت میخواهیم به چهارمین حرف از اصول SOLID بپردازیم که به آن Interface Segregation یا جدا سازی واسط ها میگویند. برای درک بهتر این درس باید با Inteface ها یا موارد مشابه آن در یک زبان برنامه نویسی کار کرده باشید. اجازه بدهید با یک مثال این درس را جلو ببریم:

ادامه خواندن “مفهوم جدایی واسط ها(Interface Segregation Principle) در مهندسی نرم افزار”

مفهوم جایگزینی لیسکو(Lisko Substitution Principle) در برنامه نویسی

در درس های گذشته، با دو حرف اول SOLID آ شنا شدیم. ابتدا Single Responsibility را بحث کردیم و سپس به مفهوم Open Closed پرداختیم. در این درس میخواهیم به سومین حرف از مفهوم SOLID بپردازیم که به آن Lisko Substitution Principle یا همان مفهوم جایگزینی لیسکو میگویند. در میان مفاهیم موجود در SOLID شاید این مفهوم برای درک شدن کمی نیاز به تفکر بیشتری داشته باشد.

ادامه خواندن “مفهوم جایگزینی لیسکو(Lisko Substitution Principle) در برنامه نویسی”

مفهوم باز-بسته(Open-Closed) در برنامه نویسی و مهندسی نرم افزار

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

در این درس به دومین حرف از کلمه SOLID که مفهوم باز-بسته(Open-Closed) است میپردازیم تا ببنیم این اصل چگونه میتواند به نوشتن یک برنامه با کیفیت و منعطف در برابر تغییرات کمک کند.

ادامه خواندن “مفهوم باز-بسته(Open-Closed) در برنامه نویسی و مهندسی نرم افزار”

مسئولیت واحد(Single Responsibility) در مهندسی نرم افزار و برنامه نویسی

حتما میدانید که در برنامه نویسی شی گرا در یک پروژه نرم افزاری، کلاس ها(Class) و توابع(Function) مختلف حضور دارند. این کلاس ها در فایل های مختلف قرار میگیرند و هر کدام کاربردهای خاص خود را دارند. مانند افراد مختلف در یک سازمان که هر کدام مسئولیت های مشخصی بر عهده داند.

ادامه خواندن “مسئولیت واحد(Single Responsibility) در مهندسی نرم افزار و برنامه نویسی”

طبقه بندی و پیش بینی تصاویر دست نوشته با پایتون و الگوریتم RNN

حال اجازه بدهید با استفاده از طبقه بند Radius Neighbors دسته نوشته های درس قبل را یاد بگیریم.  محتویات این فایل به شکل زیر است(دانلود فایل iris_radius_nn_handwriting_classification.py):

from sklearn.neighbors import RadiusNeighborsClassifier  
from sklearn import datasets, metrics  
  
digits = datasets.load_digits()  
images_and_labels = list(zip(digits.images, digits.target))  
  
n_samples = len(digits.images)  
data = digits.images.reshape((n_samples, -1))  
rnn = RadiusNeighborsClassifier(30, outlier_label=-1)  
  
X_train = data[:n_samples // 2]  
y_train = digits.target[:n_samples // 2]  
X_test = data[n_samples // 2:]  
y_test = digits.target[n_samples // 2:]  
  
rnn.fit(X_train, y_train)  
  
predicted = rnn.predict(X_test)  
report = metrics.classification_report(y_test, predicted)  
print(report)
دسترسی کامل به این دوره مخصوص « کاربر ویژه(ماهیانه ۱۲هزار تومان جهت دسترسی به کلیه دوره های ویژه) » می باشد
ورود ثبت نام

تجزیه و تحلیل تصاویر دست نوشته با پایتون و Matplotlib

 اجازه بدهید به سراغ کد برویم و مطابق روال گذشته، کد را خط به خط مرور کنیم. میخواهیم توسط کد پایتون چند عکس را به نمایش در بیاوریم(در این قسمت فعلا عملیات طبقه بندی را انجام نمیدهیم و فقط به نمایش داده های تصویری میپردازیم). ساختار فایل به صورت زیر است (دانلود فایل radius_nn_handwriting.py):

from sklearn import datasets  
import matplotlib.pyplot as plt  
  
digits = datasets.load_digits()  
images_and_labels = list(zip(digits.images, digits.target))  
for index, (image, label) in enumerate(images_and_labels[:4]):  
    plt.subplot(2, 4, index + 1)  
    plt.axis('off')  
    plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')  
    plt.title('Training: %i' % label)
دسترسی کامل به این دوره مخصوص « کاربر ویژه(ماهیانه ۱۲هزار تومان جهت دسترسی به کلیه دوره های ویژه) » می باشد
ورود ثبت نام

تبدیل مسئله تشخیص دست نوشته(handwriting) به ماتریس آموزشی داده کاوی

اجازه دهید این مثال آخر را کمی پیشرفته تر و کاربردی تر اجرا کنیم. فرض کنید شما دست نوشته ای دارید و میخواهید از این دسته نوشته که به صورت عکس است، اعداد آن را تشخیص دهید. البته در اینجا مسئله را ساده در نظر میگیریم و از هر کاراکتر دست نوشته(که عددی بین ۰ تا ۹ است) یک عکس کوچک تهیه می کنیم. مثلا اگر کسی عدد ۰را به صورت دست نوشت بر روی کاغذ نوشت(و یک عکس از این کاغذ گرفته شد)، کامپیوتر بتواند با استفاده از تصویر این عکس، عدد را تشخیص دهد. در علم داده کاوی این مسئله نیز یک مسئله طبقه بندی است. ویژگی ها یا ابعاد این مسئله، پیکسل های عکس هستند، در حالی که برچسب ها(کلاس ها)، همان اعداد هستند. در این جا ۱۰ برچسب(از ۰ تا ۹) داریم که هر کدام یک کلاس یا یک طبقه را نمایش می دهند. برای تبدیل تصاویر به ماتریس، به مهندسی ویژگی(Feature Engineering) نیاز است. شکل زیر را در نظر بگیرید(برای مثال ساده، عکس کاملا سیاه و سفید در نظر گرفته می شود):

دسترسی کامل به این دوره مخصوص « کاربر ویژه(ماهیانه ۱۲هزار تومان جهت دسترسی به کلیه دوره های ویژه) » می باشد
ورود ثبت نام