پیاده سازی شبکه عصبی در پایتون — به زبان ساده
در این مطلب، ضمن بیان مفهوم شبکه عصبی مصنوعی، پیاده سازی شبکه عصبی در پایتون انجام شده است.
پیاده سازی شبکه عصبی در پایتون
یک شبکه عصبی مصنوعی (Artificial Neural Network | ANN) یک پارادایم پردازش اطلاعات است که از مغز انسان الهام گرفته شده است. شبکه عصبی مصنوعی با استفاده از مثالها یاد میگیرد. یک شبکه عصبی مصنوعی برای کاربردهای خاصی پیکربندی میشود که از این جمله میتوان به تشخیص الگو (Pattern Recognition) یا دستهبندی دادهها از طریق فرایند یادگیری اشاره کرد. یادگیری شامل تنظیم اتصالات سیناپسهایی میشود که در بین نورونها وجود دارند.
مغز شامل صدها میلیارد سلول است که به آنها نورون گفته میشود. این نورونها به وسیله سیناپسها به یکدیگر متصل شدهاند. این سیناپیس چیزی به جز اتصالاتی در سراسر نورونها نیستند که امکان ارسال پالسها به دیگر نورونها را فراهم میکنند. هنگامی که یک نورون یک سیگنال تحریکی به نورون دیگر ارسال کند، پس از آن این سیگنال به همه ورودیهای دیگر آن نورون اضافه میشود. اگر این مورد از یک آستانه داده شده سرریز کند، منجر به آن میشود که نورون هدف یک سیگنال عمل را رو به جلو پرتاب کند. این دقیقا همان طوری است که فرایند فکر کردن به صورت داخلی کار میکند.
در علوم کامپیوتر، این فرایند با ساخت «شبکهها» در کامپیوتر با استفاده از ماتریسها مدلسازی میشود. این شبکهها را میتوان به عنوان انتزاعی از نورونها بدون همه پیچیدگیهای بیولوژیکی در نظر گرفت. برای آنکه کارها سادهتر نگه داشته شوند، تنها نیاز به مدل کردن یک شبکه عصبی ساده با دو لایه است که قادر به حل کردن مسئله دستهبندی خطی هستند.
فرض میشود که مسئلهای وجود دارد که در آن هدف پیشبینی خروجی یک مجموعه از ورودیها و خروجیهای داده شده به عنوان نمونه آموزش است.
این ورودیهای آموزش میتوانند به صورت زیر باشند. شایان توجه است که خروجی به طور مستقیم به ستون سوم مرتبط است. یعنی، مقادیر ورودی ۳ چیزی است که خروجی در هر مثال آموزش در شکل ۲ هستند. بنابراین، برای مثال تست مقدار خروجی برابر با یک خواهد بود. فرایند آموزش شامل مراحل زیر است:
انتشار رو به جلو
- ورودیها دریافت میشوند و در وزنها ضرب میشوند (از اعداد تصادفی به عنولن وزنها استفاده میشود). فرض میشود که داریم: Y = WiIi = W1I1+W2I2+W3I3
- نتایج از طریق یک فرمول سیگوئید برای محاسبه خروجی نورونها ارسال میشود. تابع سیگموئید برای نرمال کردن نتایج بین ۰ و ۱ مورد استفاده قرار میگیرد. ۱/۱ + e-y
انتشار رو به عقب
- خطا را محاسبه میکند. یعنی، تفاوت بین خروجی و خروجی مورد انتظار را محاسبه میکند. بسته به خطا، وزنها با ضرب کردن خطا با ورودی و دوباره، با گرادیان منحنی سیگموئید محاسبه میشود. داریم:
- وزن += خروجی ورودی خطا (۱ – خروجی)، در اینجا خروجی (۱- خروجی) اشتقاقی از منحنی سیگموئید است.
- تذکر: کل فرایند باید هزاران بار تکرار شود.
- در ادامه، کدنویسی این فرایند در پایتون انجام میشود.
- برای پیادهسازی آنچه گفته شد در زبان برنامهنویسی پایتون، نیاز به نصب کتابخانه NumPy است. برای نصب NumPy میتوان از دستور زیر استفاده کرد.
sudo apt -get install python-numpy
پیادهسازی در پایتون
from joblib.numpy_pickle_utils import xrange
from numpy import *
class NeuralNet(object):
def __init__(self):
# Generate random numbers
random.seed(1)
# Assign random weights to a 3 x 1 matrix,
self.synaptic_weights = 2 * random.random((3, 1)) - 1
# The Sigmoid function
def __sigmoid(self, x):
return 1 / (1 + exp(-x))
# The derivative of the Sigmoid function.
# This is the gradient of the Sigmoid curve.
def __sigmoid_derivative(self, x):
return x * (1 - x)
# Train the neural network and adjust the weights each time.
def train(self, inputs, outputs, training_iterations):
for iteration in xrange(training_iterations):
# Pass the training set through the network.
output = self.learn(inputs)
# Calculate the error
error = outputs - output
# Adjust the weights by a factor
factor = dot(inputs.T, error * self.__sigmoid_derivative(output))
self.synaptic_weights += factor
# The neural network thinks.
def learn(self, inputs):
return self.__sigmoid(dot(inputs, self.synaptic_weights))
if __name__ == "__main__":
# Initialize
neural_network = NeuralNet()
# The training set.
inputs = array([[0, 1, 1], [1, 0, 0], [1, 0, 1]])
outputs = array([[1, 0, 1]]).T
# Train the neural network
neural_network.train(inputs, outputs, 10000)
# Test the neural network with a test example.
print(neural_network.learn(array([1, 0, 1])))
خروجی مورد انتظار
پس از ده بار تکرار، شبکه عصبی مقدار را برابر با ۰٫۶۵۹۸۰۹۲۱ پیشبینی میکند. خروجی به اندازه کافی خوب نیست؛ زیرا پاسخ باید ۱ باشد. اگر تعداد تکرارها به ۱۰۰ افزایش پیدا کند، پاسخ برابر با ۰٫۸۷۶۸۰۵۴۱ خواهد بود. این یعنی با افزایش تعداد تکرارها، شبکه هوشمندتر میشود. متعاقبا و با ۱۰۰۰۰ تکرار، پاسخ ۰٫۹۸۹۷۷۰۴ حاصل میشود که به نتیجه واقعی بسیار نزدیک است.
منابع پیشنهادی برای فراگیری زبان برنامهنویسی پایتون
برای فراگیری پایتون استفاده از فیلمهای آموزشی به زبان فارسی پیشنهاد میشود که در ادامه معرفی شدهاند.
فیلم آموزش پایتون مقدماتی
مدت زمان فیلم آموزش پایتون مقدماتی برابر با نوزده ساعت و پنجاه و سه دقیقه و مدرس آن مهندس پژمان اقبالی است. فیلم آموزش پایتون مقدماتی که در این بخش از مطلب چرا پایتون یاد بگیریم معرفی شده برای افراد تازهوارد به دنیای برنامهنویسی پایتون و کسانی که با پایتون تا حدی آشنا هستند و قصد دارند سطح دانش و مهارت خود را بیش از پیش ارتقا دهند مناسب است. در فیلم آموزش مقدماتی پایتون، ضمن معرفی و آموزش چگونگی نصب پایتون، مباحث ساختمان دادهها در پایتون، توابع و ماژولها، کلاس، خواندن و نوشتن فایلها و دیگر موارد مورد بررسی قرار میگیرند.
- برای دیدن فیلم آموزش پایتون مقدماتی + اینجا کلیک کنید.
فیلم آموزش کار با کتابخانه های NumPy و Matplotlib در پایتون
مدت زمان فیلم آموزش کار با کتابخانه های NumPy و Matplotlib در پایتون چهار ساعت و چهل و شش دقیقه و مدرس آن مهندس میترا تجربهکار است. در این دوره که در این بخش از مطلب چرا پایتون یاد بگیریم معرفی شده، مباحث پیشرفتهتر و در واقع تکمیلی آموزش برنامهنویسی پایتون مورد بررسی قرار گرفته است. بنابراین، این دوره برای افرادی مناسب است که فیلم آموزش مقدماتی پایتون را مشاهده کردهاند و یا، با مبانی پایتون به طور کامل آشنایی دارند. از جمله موضوعات مورد بررسی در فیلم آموزش پایتون تکمیلی میتوان به معرفی و تعریف آرایهها در زبان پایتون، معرفی بسته نامپای (NumPy)، رسم نمودار در پایتون و دیگر موارد اشاره کرد.
- برای دیدن فیلم آموزش پایتون تکمیلی + اینجا کلیک کنید.
فیلم آموزش پایتون و یادگیری ماشین
مدت زمان فیلم آموزش پایتون و یادگیری ماشین ده ساعت و مدرس آن مهندس سعید مظلومی راد است. این دوره آموزشی که در این بخش از مطلب چرا پایتون یاد بگیریم معرفی شده برای افرادی مناسب است که با زبان برنامهنویسی پایتون آشنایی اولیه دارند و در صدد فراگیری یادگیری ماشین و انجام پیادهسازیهای مربوط به آن با بهرهگیری از زبان پایتون هستند. از جمله مباحث مورد بررسی در فیلم آموزش یادگیری ماشین با پایتون میتوان به مقدمهای بر یادگیری ماشین، آشنایی با بسته نامپای، معرفی بسته پانداس و آموزش کار با آن، آموزش ترسیم دادهها با بهرهگیری از کتابخانه matplotlib، آشنایی با مباحث آماری و مورد کاربرد آنها در یادگیری ماشین، پیش پردازش دادهها، یادگیری نظارت شده، یادگیری غیر نظارت شده و روشهای کاهش ابعاد اشاره کرد.
- برای دیدن فیلم آموزش پایتون و یادگیری ماشین + اینجا کلیک کنید.
فیلم آموزش پایتون برای یادگیری ماشین مقدماتی
طول مدت این دوره آموزشی شانزده ساعت و پنجاه دقیقه و مدرس آن مهندس فرشید شیرافکن است. در این دوره که در این بخش از مطلب چرا پایتون یاد بگیریم معرفی شده، مباحث مقدماتی و متوسطه یادگیری ماشین به طور جامع و به زبان ساده از پایه مورد مورد بررسی قرار گرفته و در همه پیادهسازیها، از زبان برنامهنویسی پایتون و کتابخانههای آن استفاده شده است. از جمله مباحث مورد بررسی در این دوره آموزشی میتوان به مقدمهای بر یادگیری ماشین، داده و انواع آن، پیشپردازش دادهها، رگرسیون، رگرسیون لجستیک، شبکههای عصبی مصنوعی، ماشین بردار پشتیبان و درخت تصمیم اشاره کرد.
- برای دیدن فیلم آموزش پایتون برای یادگیری ماشین مقدماتی + اینجا کلیک کنید.
فیلم آموزش پایتون برای یادگیری ماشین تکمیلی
طول مدت این دوره آموزشی ده ساعت و سی و سه دقیقه و مدرس آن مهندس فرشید شیرافکن هستند. این آموزش برای افرادی که با مباحث مقدماتی و متوسطه یادگیری ماشین با پایتون آشنایی دارند مناسب است. در فیلم آموزش پایتون برای یادگیری ماشین تکمیلی، کلیه مباحث تکمیلی یادگیری ماشین شامل دستهبندی بیز، دستهبندی K نزدیکترین همسایگی، یادگیری جمعی، انتخاب ویژگی، تقلیل ابعاد، خوشهبندی، کشف دادههای پرت و کاوش قوانین انجمنی مورد بررسی قرار گرفته است.
- برای دیدن فیلم آموزش پایتون برای یادگیری ماشین تکمیلی + اینجا کلیک کنید.
اگر این مطلب برای شما مفید بوده است، آموزشها و مطالب زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای الگوریتم ژنتیک و محاسبات تکاملی
- آموزش مبانی محاسبات تکاملی و بهینهسازی هوشمند
- مجموعه آموزشهای هوش مصنوعی
- بهینهسازی (ریاضیاتی) چیست؟ — راهنمای جامع
- شبیهسازی تبرید (Simulated Annealing) – به زبان ساده
- بهینهسازی چند هدفه چیست؟ — راهنمای جامع
منبع [+]
مجموعه: شبکه های عصبی, مهندسی کامپیوتر, هوش مصنوعی برچسب ها: ANN, Artificial Neural Network, شبکه عصبی با پایتون, شبکه عصبی مصنوعی, هوش مصنوعی با پایتون, یادگیری ماشین با پایتون