هوش مصنوعی با پایتون – یادگیری عمیق

3 سال پیش

هوش مصنوعی با پایتون – یادگیری عمیق

شبکه عصبی مصنوعی (ANN) یک سیستم محاسباتی کارآمد است که تم اصلی آن از تشبیه شبکه های عصبی بیولوژیکی گرفته شده است. شبکه های عصبی یک نوع مدل برای یادگیری ماشین هستند. در اواسط دهه ۱۹۸۰ و اوایل دهه ۱۹۹۰ پیشرفت های بسیار مهمی در معماری در شبکه های عصبی صورت گرفت. در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، شما با یادگیری عمیق، رویکرد AI بیشتر آشنا خواهید شد.

پیشنهاد ویژه : پکیج آموزش پایتون مختص بازار کار

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

یادگیری ماشینی در مقابل یادگیری عمیق

یادگیری عمیق این روزها قدرتمندترین تکنیک یادگیری ماشین است. این بسیار قدرتمند است زیرا آنها ضمن یادگیری نحوه حل مسئله، بهترین روش برای نشان دادن مسئله را می آموزند. در زیر مقایسه ای از یادگیری عمیق و یادگیری ماشین آورده شده است –

وابستگی به داده ها

اولین نقطه تفاوت بر اساس عملکرد DL و ML است که مقیاس داده افزایش می یابد. وقتی داده ها بزرگ هستند، الگوریتم های یادگیری عمیق عملکرد بسیار خوبی دارند.

وابستگی ماشین

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

استخراج ویژگی

الگوریتم های یادگیری عمیق می توانند ویژگی های سطح بالایی را استخراج کنند و سعی کنید از همان موارد نیز یاد بگیرید. از طرف دیگر، یک متخصص لازم است تا بیشتر ویژگی های استخراج شده توسط یادگیری ماشین را شناسایی کند.

 

زمان اجرا

زمان اجرا به پارامترهای بیشماری که در یک الگوریتم استفاده می شود بستگی دارد. پارامترهای یادگیری عمیق بیشتر از الگوریتم های یادگیری ماشین است. از این رو، زمان اجرای الگوریتم های DL ، به ویژه زمان آموزش، بسیار بیشتر از الگوریتم های ML است. اما زمان تست الگوریتم های DL کمتر از الگوریتم های ML است.

رویکرد حل مسئله

یادگیری عمیق مسئله را از انتها به انتها (end to end) حل می کند در حالی که یادگیری ماشینی از روش سنتی حل مسئله استفاده می کند ، یعنی با تقسیم آن به قطعات.

شبکه عصبی کانولوشن (CNN)

شبکه های عصبی کانولوشن همان شبکه های عصبی معمولی هستند زیرا همچنین از نورون هایی تشکیل شده اند که دارای وزن و تعصب قابل یادگیری هستند. شبکه های عصبی معمولی ساختار داده های ورودی را نادیده می گیرند و همه داده ها قبل از تغذیه آنها در شبکه به آرایه ۱-D تبدیل می شوند. این فرایند متناسب با داده های معمولی است، اما اگر داده ها حاوی تصاویر باشند، فرایند ممکن است دست و پا گیر باشد.

CNN این مشکل را به راحتی حل می کند. ساختار دو بعدی تصاویر را هنگام پردازش در نظر می گیرد ، که به آنها امکان می دهد خصوصیات خاص تصاویر را استخراج کنند. به این ترتیب ، هدف اصلی CNN ها رفتن از داده های تصویر خام در لایه ورودی به کلاس صحیح در لایه خروجی است. تنها تفاوت NN های معمولی با CNN ها در پردازش داده های ورودی و نوع لایه هاست.

مروری بر معماری CNN ها

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

معماری CNN ها دارای نورون هایی هستند که در ۳ بعد به نام عرض، ارتفاع و عمق قرار گرفته اند. هر نورون در لایه فعلی به یک تکه کوچک از خروجی لایه قبلی متصل است. این شبیه به همپوشانی فیلتر 𝑵 × on روی تصویر ورودی است. برای اطمینان از بدست آوردن تمام جزئیات از فیلترهای M استفاده می کند. این فیلترهای M استخراج کننده ویژگی هایی هستند که ویژگی هایی مانند لبه ها ، گوشه ها و غیره را استخراج می کنند.

لایه ها برای ساخت CNN استفاده می شوند

از لایه های زیر برای ساخت CNN استفاده می شود –

  • Input Layer  – داده های تصویر خام را همانطور که هست می گیرد.
  • Convolutional Layer – این لایه هسته اصلی ساخت CNN است که بیشتر محاسبات را انجام می دهد. این لایه پیچیدگی های بین نورون ها و وصله های مختلف ورودی را محاسبه می کند.
  • Rectified Linear Unit Layer – این یک تابع فعال سازی را برای خروجی لایه قبلی اعمال می کند. این غیر خطی بودن را به شبکه اضافه می کند تا بتواند به خوبی نسبت به هر نوع عملکردی تعمیم یابد.
  • Pooling –Pooling Layer به ما کمک می کند تا هنگام پیشرفت در شبکه، فقط قسمتهای مهم را حفظ کنیم. لایه Pooling به طور مستقل بر روی هر برش عمق ورودی کار می کند و فضای آن را تغییر اندازه می دهد. از عملکرد MAX استفاده می کند.
  • Fully Connected layer/Output layer  – این لایه امتیازات خروجی لایه آخر را محاسبه می کند. خروجی حاصل از اندازه 𝟏 × 𝟏 × 𝑳 است، جایی که L کلاسهای مجموعه آموزش تعداد است.

نصب پکیج های مفید پایتون

می توانید از Keras استفاده کنید که یک API شبکه عصبی سطح بالا است و با زبان پایتون نوشته شده و قابلیت اجرا در بالای TensorFlow ، CNTK یا Theno را دارد. با پایتون ۲٫۷-۳٫۶ سازگار است.

برای نصب keras از دستورات زیر استفاده کنید –

pip install keras

در محیط conda، می توانید از دستور زیر استفاده کنید –

conda install –c conda-forge keras

 

ساخت رگرسیون خطی با استفاده از ANN

در این بخش، شما می آموزید که چگونه با استفاده از شبکه های عصبی مصنوعی یک رگرسیون خطی بسازید. برای رسیدن به این هدف می توانید از KerasRegressor استفاده کنید. در این مثال، ما از مجموعه داده های قیمت خانه بوستون با ۱۳ عدد برای خواص در بوستون استفاده می کنیم. کد پایتون برای همان در اینجا نشان داده شده است –

همانطور که نشان داده شده است ، تمام پکیج های مورد نیاز را وارد کنید –

import numpy
import pandas
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold

اکنون، مجموعه داده ما را که در فهرست محلی ذخیره شده بارگیری کنید.

dataframe = pandas.read_csv("/Usrrs/admin/data.csv", delim_whitespace = True, header = None)
dataset = dataframe.values

 

اکنون، داده ها را به متغیرهای ورودی و خروجی تقسیم کنید یعنی X و Y –

X = dataset[:,0:13]
Y = dataset[:,13]

 

از آنجا که ما از شبکه های عصبی پایه استفاده می کنیم، مدل را تعریف کنیم –

def baseline_model ():

اکنون، مدل را به صورت زیر ایجاد کنید –

model_regressor = Sequential()
model_regressor.add(Dense(13, input_dim = 13, kernel_initializer = 'normal', 
   activation = 'relu'))
model_regressor.add(Dense(1, kernel_initializer = 'normal'))

 

بعد، مدل را کامپایل کنید –

model_regressor.compile(loss='mean_squared_error', optimizer='adam')
return model_regressor

اکنون بذر تصادفی را برای قابلیت تکرار به شرح زیر اصلاح کنید –

seed = 7
numpy.random.seed(seed)

شی Keras wrapper برای استفاده در یادگیری scikit به عنوان برآوردگر رگرسیون KerasRegressor نامیده می شود. در این بخش، ما باید این مدل را با مجموعه داده های استاندارد ارزیابی کنیم.

estimator = KerasRegressor(build_fn = baseline_model, nb_epoch = 100, batch_size = 5, verbose = 0)
kfold = KFold(n_splits = 10, random_state = seed)
baseline_result = cross_val_score(estimator, X, Y, cv = kfold)
print("Baseline: %.2f (%.2f) MSE" % (Baseline_result.mean(),Baseline_result.std()))

خروجی کدی که در بالا نشان داده شده است ، تخمین عملکرد مدل در مورد مشکل داده های غیبی است. این میانگین خطای مربع، شامل انحراف متوسط ​​و استاندارد در تمام ۱۰ برابر ارزیابی اعتبار متقابل است.

طبقه بندی کننده تصویر: کاربردی از یادگیری عمیق

(Convolutional Neural Networks (CNN یک مشکل طبقه بندی تصویر را حل می کند، یعنی این که تصویر ورودی به کدام کلاس است. می توانید از کتابخانه یادگیری عمیق کراس استفاده کنید. توجه داشته باشید که ما از مجموعه داده های آموزش و آزمایش تصاویر گربه ها و سگ ها از لینک زیر استفاده می کنیم.

همانطور که نشان داده شده کتابخانه ها و پکیج های مهم Keras را وارد کنید –

پکیج زیر به نام ترتیبی شبکه های عصبی را به عنوان شبکه ترتیبی مقدماتی می کند.

from keras.models import Sequential

بسته زیر به نام Conv2D برای انجام عملیات پیچش، اولین مرحله CNN استفاده شده است.

from keras.layers import Conv2D

بسته زیر به نام MaxPoling2D برای انجام عملیات Pooling، مرحله دوم CNN استفاده شده است.

from keras.layers import MaxPooling2D

پکیج زیر Flatten فرآیند تبدیل همه آرایه های ۲D حاصل به یک بردار خطی مداوم و طولانی است.

from keras.layers import Flatten

 

پکیج زیر به نام Dense برای انجام اتصال کامل شبکه عصبی، مرحله چهارم CNN استفاده شده است.

from keras.layers import Dense

اکنون، یک شی از کلاس ترتیبی ایجاد کنید.

S_classifier = Sequential()

اکنون، مرحله بعدی کدگذاری قسمت کانولوشن است.

S_classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))

اکنون مرحله بعدی CNN، عملیات جمع کردن در نقشه ویژگی های حاصل از قسمت پیچیدگی است.

S-classifier.add(MaxPooling2D(pool_size = (2, 2)))

اکنون  با استفاده از flattering، تمام تصاویر جمع شده را به یک پیوسته مداوم تبدیل کنید –

S_classifier.add(Flatten())

بعد، یک لایه کاملاً متصل ایجاد کنید.

S_classifier.add(Dense(units = 128, activation = 'relu'))

 

در اینجا ۱۲۸ واحد تعداد پنهان است. این یک روش معمول است که تعداد واحدهای پنهان را به عنوان توان ۲ تعریف می کند.

اکنون لایه خروجی را به صورت زیر مقدار دهی اولیه کنید –

S_classifier.add(Dense(units = 1, activation = 'sigmoid'))

اکنون CNN را کامپایل کنید، ما ساخته ایم –

S_classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

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

اکنون، افزایش تصویر را انجام دهید و سپس تصاویر را در شبکه های عصبی قرار دهید –

train_datagen = ImageDataGenerator(rescale = 1./255,shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)

training_set = 
   train_datagen.flow_from_directory(”/Users/admin/training_set”,target_size = 
      (۶۴, ۶۴),batch_size = 32,class_mode = 'binary')

test_set = 
   test_datagen.flow_from_directory('test_set',target_size = 
      (۶۴, ۶۴),batch_size = 32,class_mode = 'binary')

 

اکنون، داده ها را با مدلی که ایجاد کرده ایم متناسب کنید –

classifier.fit_generator(training_set,steps_per_epoch = 8000,epochs = 
۲۵,validation_data = test_set,validation_steps = 2000)

 

در اینجا steps_per_epoch تعداد تصاویر آموزش را دارد.

اکنون که مدل آموزش داده شده است، می توانیم از آن برای پیش بینی به شرح زیر استفاده کنیم –

from keras.preprocessing import image

test_image = image.load_img('dataset/single_prediction/cat_or_dog_1.jpg', 
target_size = (64, 64))

test_image = image.img_to_array(test_image)

test_image = np.expand_dims(test_image, axis = 0)

result = classifier.predict(test_image)

training_set.class_indices

if result[0][0] == 1:
prediction = 'dog'

else:
   prediction = 'cat'

 

منبع.

لیست جلسات قبل آموزش هوش مصنوعی با برنامه نویسی پایتون

  1. آموزش هوش مصنوعی با برنامه نویسی پایتون – مفهوم کلی
  2. شروع آموزش هوش مصنوعی با برنامه نویسی پایتون
  3. یادگیری ماشین در هوش مصنوعی با برنامه نویسی پایتون
  4. هوش مصنوعی با برنامه نویسی پایتون، آماده ‌سازی داده ها
  5. هوش مصنوعی با پایتون، یادگیری نظارت شده و طبقه بندی
  6. هوش مصنوعی با برنامه نویسی پایتون – یادگیری تحت نظارت: رگرسیون
  7. هوش مصنوعی با برنامه نویسی پایتون – برنامه نویسی منطقی
  8. هوش مصنوعی با پایتون – یادگیری بدون نظارت: خوشه بندی
  9. هوش مصنوعی با پایتون – پردازش زبان طبیعی
  10. هوش مصنوعی با پایتون – پکیج NLTK
  11. هوش مصنوعی با پایتون – تجزیه و تحلیل داده های سری زمانی
  12. هوش مصنوعی با پایتون – تشخیص گفتار
  13. هوش مصنوعی با پایتون – جستجوی کاشف
  14. هوش مصنوعی با پایتون – بازی
  15. هوش مصنوعی با پایتون – شبکه های عصبی
  16. هوش مصنوعی با پایتون – یادگیری Reinforcement
  17. هوش مصنوعی با پایتون – الگوریتم های ژنتیک
  18. هوش مصنوعی با پایتون – بینایی رایانه‌ ای
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه