کدهای معروف جعبه ابزار یادگیری عمیق با تصاویر
فهرست مطالب
مقدمه:
یادگیری عمیق یکی از حوزه های مهم هوش مصنوعی است که به کمک شبکه های عصبی عمیق، به تحلیل و استخراج اطلاعات پیچیده از داده ها میپردازد. در این راستا، استفاده از کدهای معروف جعبه ابزار یادگیری عمیق برای پردازش تصاویر از اهمیت ویژهای برخوردار است. در ادامه به معرفی و بررسی برخی از این کدها میپردازیم.
یکی از کدهای محبوب برای پردازش تصاویر در جعبه ابزار یادگیری عمیق:
، کدهای پایتورچ میباشد. پایتورچ یکی از قدرتمندترین کتابخانههای یادگیری عمیق است که امکان پیادهسازی شبکههای عصبی کانولوشنال و آموزش آنها بر روی تصاویر را فراهم میکند. این کتابخانه از معماریهای مختلف شبکههای عصبی مانند ResNet، VGG و Inception پشتیبانی میکند و امکان تنظیم پارامترهای مختلف آنها را فراهم میکند.
کدهای مشهور برای شبکههای عصبی کانولوشنال، کتابخانه TensorFlow:
یکی دیگر از کدهای مشهور برای شبکههای عصبی کانولوشنال، کتابخانه TensorFlow میباشد. TensorFlow یکی از پرکاربردترین کتابخانههای یادگیری عمیق است که توسط گوگل توسعه داده شده است. این کتابخانه امکان ایجاد و آموزش شبکههای عصبی کانولوشنال بر روی تصاویر را فراهم میکند و از امکانات پیشرفتهای برای بهینهسازی و آموزش مدلهای یادگیری عمیق بر روی تصاویر برخوردار است.
دستورات جعبه ابزار یادگیری عمیق با تصاویر:
برای استفاده از این کدها، ابتدا باید دادههای تصویری مورد نظر را بارگذاری و پیشپردازش کنیم. سپس با استفاده از معماریهای مختلف شبکههای عصبی کانولوشنال و تنظیم پارامترهای مورد نیاز، مدل را آموزش داده و نتایج را بررسی میکنیم. این کدها امکان اعمال تکنیکهای پیشرفته مانند انتقال یادگیری و تقویت یادگیری را نیز فراهم میکنند که به بهبود عملکرد مدلهای یادگیری عمیق بر روی تصاویر کمک میکند.
حال به این دستورات می پردازیم:
دستور trainingOptions:
اینجا یک مثال ساده از استفاده از دستور trainingOptions در متلب:
% ایجاد یک شیء از نوع trainingOptions
options = trainingOptions('sgdm', ...
'MaxEpochs',50, ... % تعداد حداکثر دورهای آموزش
'MiniBatchSize',32, ... % اندازه دستههای کوچک برای آموزش
'InitialLearnRate',0.01); % نرخ یادگیری اولیه
% اینجا میتوانید از این options در تابع trainNetwork استفاده کنید
% نمونهای از استفاده از trainNetwork
layers = [
imageInputLayer([28 28 1])
fullyConnectedLayer(128)
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
net = trainNetwork(data, labels, layers, options);
در این مثال، یک شیء options از نوع trainingOptions ایجاد شده است که شامل تعداد حداکثر 50 دوره، اندازه دستههای 32 تایی و نرخ یادگیری اولیه 0.01 است. سپس این options به تابع trainNetwork برای آموزش یک شبکه عصبی ارسال میشود.
دستور trainNetwork:
در محیط نرمافزار MATLAB، دستور trainNetwork برای آموزش یک شبکه عصبی عمیق (DNN) یا یک شبکه عصبی کانولوشنال (CNN) با استفاده از الگوریتمهای آموزش مختلف (مانند SGD، ADAM و غیره) به کار میرود. این دستور برای آموزش شبکههای عصبی به منظور تشخیص، دستهبندی یا پیشبینی دادهها استفاده میشود.
ویژگیهای اصلی دستور trainNetwork عبارتند از:
1. امکان تعریف و سفارشیسازی معماری شبکه عصبی.
2. انتخاب و تنظیم پیکربندی الگوریتم آموزش.
3. امکان استفاده از دادههای آموزش و اعتبارسنجی برای آموزش مدل.
4. پیگیری متریکهای عملکرد شبکه در طول مراحل آموزش.
5. ذخیره و بارگذاری مدل برای استفاده بعدی.
یک مثال ساده از استفاده از دستور trainNetwork در MATLAB برای آموزش یک شبکه عصبی به شکل زیر است:
% تعریف معماری شبکه
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
% تنظیمات آموزش
options = trainingOptions('adam', ...
'MaxEpochs', 10, ...
'MiniBatchSize', 128, ...
'Plots','training-progress');
% آموزش شبکه
net = trainNetwork(trainingData, layers, options);
در این مثال، ابتدا یک معماری ساده برای شبکه عصبی CNN تعریف شده و سپس با تنظیمات مشخص شده، شبکه با دادههای آموزشی trainingData به مدت 10 دوره (epoch) آموزش داده میشود.
دستور analyzeNetwork:
در متلب، analyzeNetwork یک دستور است که برای تجزیه و تحلیل شبکههای عصبی عمیق مورد استفاده قرار میگیرد. این دستور به شما امکان میدهد تا مشخصههای شبکههای عصبی خود را بررسی کنید و اطلاعاتی مانند تعداد لایهها، تعداد نورونها در هر لایه، وزنها، بیاسها، توابع فعالسازی و… را مشاهده کنید.
برای استفاده از analyzeNetwork، میتوانید به صورت زیر اقدام کنید:
% ایجاد یک شبکه عصبی عمیق
layers = [
fullyConnectedLayer(10)
reluLayer
fullyConnectedLayer(5)
reluLayer
fullyConnectedLayer(1)
regressionLayer
];
net = feedforwardnet(layers);
% تجزیه و تحلیل شبکه عصبی
analyzeNetwork(net);
این کد یک شبکه عصبی عمیق با سه لایه تمام متصل ایجاد میکند و سپس با استفاده از ‘analyzeNetwork’، ویژگیهای مختلف این شبکه مانند ساختار، تعداد نورونها، نحوه اتصالات لایهها و… را نمایش میدهد.
با این دستور، شما میتوانید بهتر درک کنید که شبکه شما چگونه ساخته شده و چه ویژگیهایی دارد که میتواند در تحلیل و بهبود عملکرد شبکه به شما کمک کند.
دستور squeezenet:
در متلب، دستور squeezenet یک مدل شبکه عصبی کانولوشنال پیش آموزش دیده از دسته شبکههای کوچکتر و سبکتر میباشد که به منظور تشخیص و دستهبندی تصاویر مورد استفاده قرار میگیرد. این مدل از شبکههای عصبی کانولوشنال دارای ساختاری فشردهتر بوده و تعداد پارامترهای کمتری نسبت به شبکههای عمیقتر (مثل VGG و ResNet) دارد. این ویژگی باعث میشود که squeezenet برای برخی برنامهها که نیاز به کارایی و وزن کمتر دارند، مناسب واقع شود.
برای استفاده از دستور squeezenet در متلب میتوانید از تابع squeezenet موجود در پکیج بینایی کامپیوتری استفاده کنید.
به عنوان مثال، کد زیر یک تصویر را به مدل squeezenet وارد کرده و خروجی را جهت دستهبندی تصویر دریافت میکند:
% خواندن تصویر
img = imread('sample_image.jpg');
% ایجاد یک مدل squeezenet پیشآموزش دیده
net = squeezenet;
% پیشپردازش تصویر برای ورود به مدل
img = imresize(img, [227, 227]); % تغییر اندازه تصویر برای سازگاری با ورودی شبکه
img = im2single(img); % تبدیل تصویر به نوع داده تک پرسنت فلوت
% ارسال تصویر به مدل برای دستهبندی
pred = classify(net, img);
disp(pred);
این کد یک تصویر با عنوان sample_image.jpg را در محیط متلب خوانده، مدل squeezenet را ایجاد و پس از پیشپردازش تصویر، تصویر را به مدل وارد کرده و خروجی دستهبندی را نمایش میدهد.
دستور googlenet:
در متلب، googlenet یک شبکه عصبی عمیق پیش آموزش دیده برای دستهبندی تصاویر است. این مدل از مدل Inception v1 توسط تیم پچاوپرس ایجاد شده است و دارای ۱۰ لایه عصبی عمیق میباشد. شبکه GoogLeNet از مقاله معروف “Going deeper with convolutions” ارائه شدهاست و در مسابقه ImageNet Large Scale Visual Recognition Challenge (ILSVRC) سال 2014 به عنوان برترین شبکهی عصبی معرفی شد.
این شبکه دارای ویژگیهایی مانند شبکهی پیچشی با وزنههای بهینه، استفاده از لایههای inception برای کاهش تعداد پارامترها، استفاده از متغیرهای عملگر Ch-Avg نسبت به max pooling و استفاده از الگوریتم Normalization لایه ای میباشد.
در زیر یک نمونه کد در متلب برای استفاده از شبکه GoogLeNet به صورت پیشبینی تصویر ارائه شده است:
% خواندن تصویر
im = imread('peppers.png');
im = imresize(im,[224,224]);
% بارگذاری مدل GoogLeNet
net = googlenet;
% انجام پیشبینی بر روی تصویر
pred = classify(net,im);
% نمایش نتیجه
disp(['تصویر احتمالا شامل دسته: ', pred]);
این کد مثال یک تصویر از نامهای رنگی به نام peppers.png را بیان میکند. تصویر را برای سازگاری با شبکه GoogLeNet با ابعاد 224×224 تغییر اندازه داده و سپس شبکه را بارگذاری کرده و با استفاده از تابع classify پیشبینی بر روی تصویر انجام میدهد و دستهبندی نهایی را نمایش میدهد.
دستور inceptionv3:
دستور inceptionv3 یک مدل شبکه عصبی پیچشی (Convolutional Neural Network) است که بعنوان یک مدل آموزش دیده برای شناسایی و دستهبندی تصاویر استفاده میشود. این مدل از پیش آموزش دیده شده با دادههای بسیار بزرگی مانند ImageNet است که میتواند برای وظایف پایه تشخیص تصاویر مورد استفاده قرار گیرد.
استفاده اصلی از inceptionv3 در متلب، شناسایی و دستهبندی تصاویر با استفاده از این شبکه عصبی آموزش دیده شده است.
در زیر یک نمونه کد ساده برای بارگذاری مدل inceptionv3 از بسته نرمافزاری پردازش تصویر Matlab و پیشبینی دسته تصویر داده شده با استفاده از این مدل نشان داده شده است:
% بارگذاری تصویر مورد نظر
im = imread('path_to_image.jpg');
% بارگذاری مدل InceptionV3
net = inceptionv3;
% پیشبینی کلاس تصویر
pred = classify(net, im);
disp(pred);
در این کد، ابتدا یک تصویر با نام ‘path_to_image.jpg’ بارگذاری شده و سپس مدل inceptionv3 از بسته نرمافزاری Matlab بارگذاری میشود. سپس با استفاده از دستور classify، دسته تصویر ورودی پیشبینی میشود و نتیجه در خروجی چاپ میشود.
مطمئن شوید که تصویر مورد نظر خود را در قسمت ‘path_to_image.jpg’ جایگزین کنید و مسیر مطابق با محل ذخیره آن را وارد کنید.
دستور mobilenetv2:
در متلب، دستور mobilenetv2 یک مدل شبکه عصبی عمیق پیشآموزشدادهشده است که بر اساس معماری MobileNetV2 ساخته شده است. MobileNetV2 یک معماری شبکه عصبی کانولوشنی (CNN) بسیار سبک و سریع برای دستهبندی تصاویر است که برای برنامههای با منابع محدود و دستگاههای تلفن همراه مناسب است.
مزیتهای استفاده از MobileNetV2 شامل مصرف کمتر منابع محاسباتی، سرعت بالا در پردازش تصاویر، وزن کمتر برای مدل، و قابلیت استفاده بر روی دستگاههای با منابع محدود میباشد.
برای استفاده از mobilenetv2 در متلب، میتوانید از توابع پیشساخته متلب برای شناسایی و دستکاری تصاویر با استفاده از این مدل استفاده کنید.
به عنوان مثال، یک کد ساده برای شناسایی شی گربه در یک تصویر با استفاده از mobilenetv2 در متلب میتواند به صورت زیر باشد:
% بارگذاری تصویر و مدل mobilenetv2 پیشآموزشدادهشده
im = imread('cat.jpg');
mobilenet = mobilenetv2;
% پیشپردازش تصویر
resizedIm = imresize(im,[224,224]);
normIm = im2single(resizedIm);
% استفاده از mobilenetv2 برای دستهبندی تصویر
prediction = classify(mobilenet,normIm);
% نمایش نتیجه
disp(['این شی یافت شده در تصویر گربه است؟ ' prediction]);
لطفا توجه داشته باشید که برای اجرای این کد لازم است تصاویر و کد مربوط به مدل و توابع پیشساخته متلب موجود باشد. همچنین، میتوانید این کد را با تصاویر و دادههای خود تطبیق داده و به منظور بهینهسازی عملکرد، پارامترهای مدل را تنظیم کنید.
دستور exception:
کاراکتر x در متلب برای ایجاد یک استثناء (exception) مورد استفاده قرار میگیرد. وقتی یک خطا رخ میدهد و نیاز به متوقف کردن اجرای برنامه و نمایش خطا به کاربر است، استثناء با استفاده از کاراکتر x ایجاد میشود.
استفاده از xception میتواند برای مدیریت و ردیابی خطاها در کدهای MATLAB مفید باشد. وقتی یک خطا اتفاق میافتد، اجرای برنامه متوقف شده و پیامی به کاربر نمایش داده میشود که شامل اطلاعات مربوط به خطا مانند نام خطا، مسیر فایلی که خطا رخ داده است و شماره خطای کد میباشد.
در زیر یک نمونه کد MATLAB آورده شده است که از xception برای ایجاد یک خطای تست استفاده میکند:
% نمونه کد استفاده از xception در متلب
try
% تلاش برای انجام عملیات
a = 1 / 0; % یک تقسیم بر صفر که خطا ایجاد میکند
catch x
% با گرفتن استثناء x، اطلاعات خطا نمایش داده میشود
disp('یک خطا رخ داده است:');
disp(x.message); % نمایش پیام خطا
disp(x.stack.file); % نمایش مسیر فایلی که خطا رخ داده
disp(x.stack.line); % نمایش شماره خطای در خط فایل
end
در این نمونه کد، یک خطای تقسیم بر صفر بوجود آمده و با استفاده از xception اطلاعات خطا چاپ شده است.
دستور darknet19:
دستور darknet19 در MATLAB برای اجرای شبکه عصبی کانولوشنال عمیق Darknet-19 مورد استفاده قرار میگیرد که یک مدل پیچیده و قوی برای تشخیص اشیاء در تصاویر است. این مدل از شبکه عصبی کانولوشنی با ۱۹ لایه استفاده میکند.
برای استفاده از darknet19 در MATLAB، بهتر است از یک جعبه اجراپذیری یا یک پیادهسازی MATLAB از شبکه Darknet-19 برای تشخیص اشیاء استفاده کنید. این کد توانایی تشخیص اشیاء مختلف در تصاویر را دارد با استفاده از شبکه Darknet-19.
برای مثال، فرض کنید که میخواهید یک تصویر را به شبکه Darknet-19 بدهید و اشیاء آن تصویر را تشخیص کنید. یک کد ساده MATLAB برای این کار میتواند به صورت زیر باشد:
% اضافه کردن تصویر برای تشخیص
image = imread('sample_image.jpg');
% اجرای شبکه Darknet-19 بر روی تصویر
dnn = darknet19;
predictions = predict(dnn, image);
% نمایش نتایج تشخیص
disp(predictions);
این کد نمونه تصویر را با استفاده از شبکه Darknet-19 به تشخیص اشیاء در تصویر میپردازد. مهم است که از دادههایی که شامل آموزش شبکه عصبی مدل Darknet-19 میشود، برای بارگذاری و استفاده از این مدل در MATLAB استفاده شود.
دستور darknet53:
دستور darknet53 در متلب یا MATLAB یک مدل شبکه عصبی عمیق (Deep Neural Network) است که معمولاً برای دستهبندی تصاویر به کار میرود. این مدل یکی از نمونههای معروف معماری شبکههای عصبی به نام DarkNet است که به واسطه پیادهسازی کارآمد و عملکرد خوب در وظایف دستهبندی تصاویر شهرت دارد.
Darknet53 شامل لایههای کانولوشنال (Convolutional Layers)، لایههای ادغام (Pooling Layers) و لایههای مشترک در شبکههای عصبی عمیق است. این مدل معمولاً برای مسائل دستهبندی تصاویر و تشخیص الگوها استفاده میشود و از قابلیت یادگیری و استخراج ویژگیهای پیچیده تصاویر با استفاده از تکنیکهای کانولوشنال بهره میبرد.
برای استفاده از Darknet53 یا مدلهای مشابه در MATLAB باید از کتابخانهها و ابزارهای مناسب برای شبیهسازی و آموزش شبکههای عصبی استفاده کنید. یکی از مواردی که میتوانید با استفاده از MATLAB انجام دهید، آموزش مدل Darknet53 بر روی مجموعه دادههای موجود است.
در ادامه یک نمونه ساده از کد MATLAB برای تعریف شبکه Darknet53 و آموزش آن را میآورم:
% نمونه کد MATLAB برای تعریف و آموزش شبکه Darknet53
% تعریف معماری شبکه Darknet53
layers = [
imageInputLayer([224 224 3])
convolution2dLayer(3,64,'Padding','same')
reluLayer
maxPooling2dLayer(2,'Stride',2)
% ادامه تعریف لایهها به صورت مطابق نیاز
];
% تنظیمات آموزش
options = trainingOptions('sgdm', ...
'MaxEpochs',20, ...
'MiniBatchSize',64, ...
'InitialLearnRate',1e-3, ...
'Plots','training-progress');
%آموزش شبکه
net = trainNetwork(trainingData,layers,options);
در این کد، شبکه Darknet53 با استفاده از توابع MATLAB برای تعریف لایهها، تنظیمات آموزش و آموزش شبکه تعریف شده است. در واقع، این تنها یک نمونه ساده است و برای استفاده کامل از این شبکه، نیاز به تنظیمات و دادههای مناسب است.
دستور efficientnetb0:
دستور efficientnetb0 در متلب یک تابع است که از پکیج Deep Learning Toolbox پشتیبانی میکند و یک شبکه عصبی پیچشی یا CNN به نام EfficientNet-B0 را ایجاد میکند. این مدل از شبکه های عصبی پیچشی از خانواده EfficientNet است که از ترکیب بهینه اندازه، عمق و عرض برای ساختار شبکه استفاده میکند تا عملکرد و دقت بهتری داشته باشد.
شبکه EfficientNet-B0 از بعضی از ویژگیهای زیر برخوردار است:
– ساختار بهینهی شبکه بر اساس عمق، عرض و اندازه
– مصرف کمتر پارامتر و حافظه نسبت به بسیاری از مدلهای CNN دیگر
– دقت بالا در مسائل دستهبندی تصاویر
در زیر یک مثال کد ارائه میشود که از تابع efficientnetb0 برای ساختار یک شبکه عصبی استفاده میکند:
% ایجاد یک شبکه عصبی CNN از نوع EfficientNet-B0
net = efficientnetb0;
% نمایش ساختار شبکه
analyzeNetwork(net);
این کد ابتدا یک شبکه عصبی از نوع EfficientNet-B0 ایجاد میکند و سپس ساختار آن را نمایش میدهد. میتوانید این کد را در یک اسکریپت MATLAB ذخیره کرده و اجرا کنید تا ساختار شبکه را بررسی کنید.
دستور AlexNet:
دستور AlexNet در MATLAB یک مدل شبکه عصبی عمیق یادگیری عمیق معرفی شده توسط Alex Krizhevsky، Ilya Sutskever و Geoff Hinton است. این شبکه برای دستهبندی تصاویر استفاده میشود و معمولاً برای دستهبندی دادههای ImageNet و وظایف دستهبندی تصویر کاربرد دارد. AlexNet شامل 8 لایه عمیق و 5 لایه تبدیلکننده نورونهای پیشپردازشکننده، 2 لایه تبدیلکننده تصادفی و 3 لایه کاملاً متصل به هم میباشد.
نمونهای از کد MATLAB برای استفاده از مدل AlexNet بر روی یک تصویر بدین شرح است:
% خواندن تصویر
img = imread('peppers.png');
img = imresize(img,[227,227]); % با توجه به نیاز AlexNet
% بارگذاری مدل AlexNet
net = alexnet;
% پیشپردازش تصویر برای استفاده در AlexNet
img = im2single(img);
img = reshape(img, [227,227,3,1]);
% اجرای تصویر از طریق AlexNet
prediction = classify(net, img);
disp(prediction);
در این کد، ابتدا یک تصویر خوانده شده و سپس به اندازه مشخص برای ورود به AlexNet تغییر اندازه داده میشود. سپس مدل AlexNet با فراخوانی alexnet بارگذاری میشود. تصویر با استفاده از im2single به فرمت مناسب تبدیل شده و سپس با reshape برای تطابق با ورودی AlexNet آماده میشود. در نهایت، با استفاده از classify، تصویر از طریق مدل AlexNet اجرا میشود و پیشبینی برچسب کلاس تصویر به دست آمده و نمایش داده میشود.
دستور vgg16:
دستور vgg16 یک مدل شناسایی ویژگیهای تصویری است که در زمینه یادگیری عمیق (deep learning) استفاده میشود. این مدل از معماری شبکه عصبی کانولوشنی پیچشی (Convolutional Neural Network یا CNN) استفاده میکند و ابتکارات مهمی در حوزه تشخیص تصاویر داشته است. اصلیترین کاربرد vgg16 در تشخیص اشیاء و شناسایی الگوهای تصویری است.
برای استفاده از مدل vgg16 در متلب، شما میتوانید از تابع vgg16 که در ابزارهای شناسایی تصویری متلب موجود است، استفاده کنید. این تابع امکانات لازم برای بارگذاری و استفاده از مدل vgg16 را فراهم میکند.
در زیر یک نمونه کد MATLAB آورده شده است که بارگذاری مدل vgg16، پردازش یک تصویر و نمایش نتایج را نشان میدهد:
% بارگذاری تصویر
img = imread('peppers.png');
% بارگذاری مدل vgg16
net = vgg16;
% پردازش تصویر در مدل vgg16
output = activations(net, img, 'fc8', 'OutputAs', 'rows');
% نمایش نتیجه
predictedLabels = classify(net, img);
imshow(img)
title(char(predictedLabels));
این کد یک تصویر را بارگذاری میکند، سپس مدل vgg16 را بارگذاری کرده و با استفاده از مدل، ویژگیهای تصویر را استخراج میکند و نهایتاً برچسب مربوط به تصویر را تشخیص میدهد و نمایش میدهد.
دستور vgg19:
دستور vgg19 در MATLAB یک مدل شبکه عصبی عمیق از خانواده VGG است که برای تشخیص الگوها و ویژگیها در تصاویر استفاده میشود. این مدل بر پایه شبکههای کانولوشنالی طراحی شده است و در پیچش تصویر به منظور استخراج ویژگیهای مهم و پیچیده از تصاویر به کار میرود.
برای استفاده از مدل vgg19 در MATLAB باید از پکیجهای Deep Learning Toolbox و Neural Network Toolbox استفاده کنید.
در زیر نمونهای از کد MATLAB آمده است که از مدل vgg19 برای استخراج ویژگیهای یک تصویر استفاده میکند:
% خواندن تصویر و آمادهسازی آن برای ورود به مدل
img = imread('example_image.jpg');
img = imresize(img, [224 224]); % تغییر اندازه تصویر به اندازه ورودی مدل
img = im2single(img); % تبدیل تصویر به نوع مناسب برای ورودی مدل
% لود مدل vgg19 از پکیج Deep Learning Toolbox
net = vgg19;
% انجام پیشپردازش بر روی تصویر
img = preprocess(net, img);
% استخراج ویژگیهای تصویر از طریق مدل vgg19
features = activations(net, img, 'fc7', 'OutputAs', 'channels'); % استخراج ویژگی از لایه fc7
% مشاهده ویژگیهای استخراج شده
disp(features);
در این کد، ابتدا یک تصویر خوانده شده و برای ورود به مدل آماده میشود. سپس مدل vgg19 لود شده و بر روی تصویر پیشپردازش انجام میشود. سپس ویژگیهای تصویر از لایه fc7 با استفاده از activations استخراج میشود و در نهایت ویژگیها نمایش داده میشود.
این کد نمایش دهندهای از استفاده از مدل vgg19 برای استخراج ویژگیهای تصویر است. اما میتوانید بر اساس نیاز و مطالعه بیشتر از مدل، کد را تغییر داده و به شکلهای مختلفی از این مدل بهره ببرید.
دستور image3dInputLayer:
دستور image3dInputLayer در محیط برنامهنویسی MATLAB برای ایجاد یک لایه ورودی برای شبکههای عصبی سهبعدی (3D) استفاده میشود. این لایه مخصوصا برای پردازش دادههای سهبعدی مانند تصاویر سهبعدی، اسکن فایلها، مدلهای سهبعدی و غیره استفاده میشود.
ویژگیهای این دستور شامل:
– توانایی پیکربندی لایه برای ورودیهای دلخواه سهبعدی
– امکان تعیین ابعاد و فرمت دقیق ورودی
– تعیین پارامترهای مختلف مانند تصحیح جانشینی (normalization)، افزودن نویز، تصویر ورودی و …
یک نمونه کد برای استفاده از image3dInputLayer در MATLAB به صورت زیر است:
inputSize = [32 32 32 3]; % ابعاد ورودی به صورت [عرض, ارتفاع, عمق, تعداد کانالها]
numClasses = 10; % تعداد کلاسها
layers = [
image3dInputLayer(inputSize)
convolution3dLayer(3,8,'Padding','same')
batchNormalizationLayer
reluLayer
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];
options = trainingOptions('sgdm', 'MaxEpochs',10);
net = trainNetwork(data,layers,options);
در این نمونه کد، یک لایه ورودی سهبعدی با ابعاد 32x32x32 و 3 کانال برای تصاویر RGB ایجاد شده است و سپس یک معماری شبکه عصبی ساده برای آموزش تعریف شده است.
دستور featureInputLayer:
دستور featureInputLayer در متلب برای ایجاد لایهای در شبکههای عصبی مصنوعی (Neural Networks) کاربرد دارد که به عنوان یک لایهٔ ورودی برای استفاده از ویژگیها به جای تصاویر در یادگیری ژرف (Deep Learning) مورد استفاده قرار میگیرد. این دستور امکان استفاده از ویژگیهایی که توسط یک لایهٔقبلی از شبکه استخراج شدهاند را فراهم میکند.
این دستور به ویژه در مواردی که میخواهید از یک شبکه پیچشی (Convolutional Neural Network) که بر روی تصاویر آموزش داده شده است استفاده کنید بسیار مفید است. با استفاده از featureInputLayer، میتوانید از ویژگیهای استخراج شده توسط لایههای قبلی شبکهی عصبی، مانند لایههای پیچشی، به عنوان ورودی برای شبکهتان استفاده کنید.
در زیر نمونهای از یک کد MATLAB آورده شده است که از featureInputLayer استفاده میکند:
% تعریف یک شبکه عصبی با استفاده از دستورات لایهای MATLAB
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3,8,'Padding','same')
reluLayer
maxPooling2dLayer(2,'Stride',2)
featureInputLayer(10)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
% تعریف یک شبکه عصبی با استفاده از دستورات لایهای تعریف شده بالا
net = trainNetwork(XTrain, YTrain, layers, options);
در این کد، featureInputLayer(10) بعد از لایههای پیچشی و بعد از لایههای اعمال فعالسازی، برای ایجاد لایهای به نام featureInputLayer با اندازهٔ ورودی 10 برای ویژگیهای استخراج شده از شبکهی پیچشی استفاده میشود.
با استفاده از این لایه، شبکه عصبی قادر است از ویژگیهای خارج شده از لایههای پیشین شبکه (بهجای تصاویر) بهترین استفاده را ببرد و به دقت و عملکرد بهتری دست یابد.
دستور convolution2dLayer:
دستور convolution2dLayer در محیط نرمافزاری MATLAB برای ایجاد یک لایهٔ پیچش دوبعدی به منظور پردازش تصاویر استفاده میشود. این دستور به شما این امکان را میدهد که یک شبکهٔ عصبی کانولوشنال را ایجاد کنید که مهمترین ویژگیهای تصویر را استخراج کرده و بر روی آنها عملیات پردازش متعددی انجام دهید.
برخی از ویژگیهای convolution2dLayer عبارتند از:
– تعیین ابعاد و اندازهٔ هستهٔ پیچش (kernel size)
– تعیین تعداد فیلترها (number of filters) یا کانالهای خروجی
– تعیین توابع فعالسازی (activation functions) مورد استفاده برای هر فیلتر
– مدیریت پارامترهای آموزشی مانند وزنها و انحرافها
در زیر یک نمونه کد MATLAB برای ایجاد یک شبکهٔ عصبی با استفاده از convolution2dLayer آمده است:
layers = [
imageInputLayer([28 28 1]) % لایهٔ ورودی تصویر به ابعاد 28x28 و یک کانال (تصویر سیاه سفید)
convolution2dLayer(3, 16, 'Padding', 1) % لایهٔ پیچش با هستهٔ 3x3، 16 فیلتر و پدینگ 1
reluLayer % لایهٔ ReLU به عنوان فعالسازی
maxPooling2dLayer(2, 'Stride', 2) % لایهٔ حذف نمونهها با اندازهٔ پانوم و گام 2
fullyConnectedLayer(10) % لایهٔ کاملا متصل برای دستهبندی به 10 کلاس
softmaxLayer % لایهٔ softmax به عنوان فعالسازی برای تبدیل امتیازها به احتمالات
classificationLayer % لایهٔ دستهبندی که خطا را محاسبه میکند
];
% ساخت یک شبکهٔ عصبی
net = trainNetwork(trainingImages, trainingLabels, layers, options);
در این کد، یک شبکهٔ عصبی ساده با یک لایهٔ پیچشی دوبعدی، یک لایهٔ ReLU و یک لایهٔ کاملا متصل برای دستهبندی تصاویر دادههای آموزشی ایجاد میشود. این مثال تصویری از چگونگی استفاده از convolution2dLayer و لایههای دیگر در پردازش تصاویر با استفاده از شبکههای عصبی نشان میدهد.
دستور convolution3dLayer:
دستور convolution3dLayer در Matlab برای ایجاد یک لایه کانولوشن سهبعدی به منظور پردازش تصاویر یا دادههای سهبعدی از نظر کانولوشن مورد استفاده قرار میگیرد. این دستور به شبکههای عصبی عمیق که بخواهند ویژگیهای چند بعدی را استخراج کنند کمک میکند.
این دستور از فیلترها برای اعمال عملیات کانولوشن بر روی ورودیها استفاده میکند و میتواند وزنهای متناظر با این فیلترها را آموزش دهد تا ویژگیهای مختلف تصاویر یا دادههای سهبعدی را تشخیص دهد.
الگوی استفاده از convolution3dLayer:
% ایجاد یک لایه کانولوشن سهبعدی با تعداد فیلترها، ابعاد فیلتر و پارامترهای دیگر مورد نیاز
convLayer = convolution3dLayer(numFilters, filterSize, 'Name', 'Convolution_Layer_1');
نمونهای از کد با استفاده از convolution3dLayer:
% مثال سادهای از ایجاد یک معماری شبکه با استفاده از convolution3dLayer در متلب
% ایجاد ورودی شبکه
inputSize = [32 32 32 3]; % ابعاد ورودی [ارتفاع، عرض، عمق، تعداد کانالها]
inputLayer = image3dInputLayer(inputSize, 'Name', 'Input_Layer');
% ایجاد یک لایه کانولوشن سهبعدی
numFilters = 64; % تعداد فیلترها
filterSize = [3 3 3]; % ابعاد فیلتر [ارتفاع، عرض، عمق]
convLayer = convolution3dLayer(numFilters, filterSize, 'Name', 'Convolution_Layer_1');
% ایجاد یک شبکه عصبی عمیق با لایههای ورودی، کانولوشن و خروجی
layers = [inputLayer; convLayer; fullyConnectedLayer(10); softmaxLayer(); classificationLayer()];
% تعریف یک شبکه عصبی عمیق
net = trainNetwork(inputData, layers, options);
در این کد، یک معماری شبکه عصبی سهبعدی با یک لایه ورودی 3D، یک لایه کانولوشن سهبعدی، یک لایه fully connected، یک لایه softmax و یک لایه classification تعریف شده است. این معماری برای آموزش یک شبکه برای تشخیص دستهبندی تصاویر 3D استفاده میشود.
دستور transposedConv3dLayer:
دستور transposedConv3dLayer در متلب برای ایجاد یک لایهی کانولوشن ترازنگشتی سه بعدی (3D transposed convolution layer) استفاده میشود. این دستور به شما این امکان را میدهد تا یک لایهی کانولوشن ترازنگشتی برای استفاده در شبکههای عصبی پیچشی شخصیسازی شدهی خود ایجاد کنید. لایههای کانولوشن ترازنگشتی معکوس (transposed convolutional layers) یک نوع از عملیات Upsampling هستند که بیشتر در شبکههای عصبی معمولا برای کاربردهای مانند تصحیح تصاویر، سینتز تصاویر و Segmentaion استفاده میشوند.
برای استفاده از transposedConv3dLayer در متلب، ابتدا باید یک شیء transposed convolution layer ایجاد کنید و سپس این شیء را به عنوان یک لایه به شبکهی عصبی اضافه کنید.
به عنوان مثال، یک کد ساده برای ایجاد یک شبکهی عصبی سه بعدی که از transposedConv3dLayer استفاده میکند به صورت زیر است:
% ایجاد یک شبکه عصبی جدید
layers = [
image3dInputLayer([32 32 32 3]) % لایهی ورودی
transposedConv3dLayer(3, 64, 'Stride', 2) % لایهی کانولوشن ترازنگشتی
reluLayer % لایهی فعالسازی ReLU
fullyConnectedLayer(10) % لایهی fully connected
softmaxLayer % لایهی softmax
classificationLayer % لایهی خروجی
];
% تعریف یک ساختار تنظیمات آموزش
options = trainingOptions('sgdm', 'MaxEpochs', 10);
% آموزش شبکه
net = trainNetwork(XTrain, YTrain, layers, options);
در این کد، ابتدا یک شبکهی عصبی سه بعدی تعریف شده است که از transposedConv3dLayer به عنوان یک لایهی کانولوشن ترازنگشتی استفاده میکند. سپس شبکه با استفاده از دادههای آموزشی XTrain و برچسبها YTrain آموزش داده میشود.
لازم به ذکر است که برای اجرای کد بالا، باید دادههای آموزشی مناسبی مثل XTrain و YTrain نیز تعریف شده باشند.
دستور fullyConnectedLayer:
دستور fullyConnectedLayer در محیط برنامه نویسی متلب برای ایجاد یک لایه کاملاً متصل (fully connected layer) در شبکههای عصبی کانولوشنال (CNN) استفاده میشود. این لایه به تمام ورودیهای خود وزندهی را اعمال کرده و خروجی جدید را تولید میکند.
در واقع، این لایه تمام ورودیهایش را به هر نودی از لایه بعدی متصل میکند و به هر اتصال وزنی نسبت میدهد. این لایه یکی از اجزای اصلی شبکههای عصبی است که بیشتر در معماریهای شبکه عصبی عمیق (deep neural networks) استفاده میشود.
برای استفاده از fullyConnectedLayer در متلب، میتوانید از دستور زیر استفاده کنید:
numClasses = 10; % تعداد کلاسها
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(5,20)
reluLayer
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];
در این کد، یک شبکه عصبی ساده با یک لایه کاملاً متصل (fullyConnectedLayer) به تعداد کلاسهای مورد نظر ساخته شده است. این لایه به تعداد کلاسها متصل است و ورودیها را به تمام نودهای خروجی مربوطه وزندهی میکند.
مطمئن شوید که موارد دیگری مانند دادههای آموزش و تنظیمات شبکه نیز در نظر گرفته شوند تا شبکه به درستی آموزش داده شود.
دستور reluLayer:
دستور reluLayer در محیط نرمافزار متلب برای ایجاد یک لایه فعالساز Relu (Rectified Linear Unit) استفاده میشود. Relu یک نوع از فعالسازهای است که در شبکههای عصبی عمیق به کار میرود و برای افزایش سرعت آموزش و بهبود عملکرد مدل های شبکه عصبی مورد استفاده قرار میگیرد.
مزایای استفاده از reluLayer شامل پیادهسازی سادهتر و کاهش احتمال وقوع مشکل کاهش گرادیان (Vanishing Gradient Problem) است. این لایه با حذف اعداد منفی و تبدیل آنها به صفر، تاثیر منفی گرادیان هنگام عمل بهینهسازی را کاهش میدهد.
در زیر یک مثال کد MATLAB برای ایجاد یک لایه reluLayer و اضافه کردن آن به یک شبکه عصبی ارایه شده است:
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
% show the layers in the network
disp(layers);
در این کد، ابتدا یک لایه ورودی تصویری ایجاد شده و سپس یک لایه کانولوشن، لایه Batch Normalization، لایه Relu، لایه Max Pooling و بقیه لایههای لازم برای یک شبکه عصبی کامل (fully connected) تعریف و به ترتیب به layers اضافه شدهاند.
دستور eluLayer:
دستور eluLayer در MATLAB برای ایجاد یک لایه Exponential Linear Unit (ELU) در شبکههای عصبی عمیق استفاده میشود. ELU یک تابع فعالسازی است که مشابه با ReLU است اما مزیتهایی دارد که از مشکلات ReLU پیش میگیرد. یکی از این موارد این است که ELU در اعداد منفی، خطی است و از این رو میتواند موجب حل مشکل نیروهای مرده (dead neurons) شود.
یک نمونه کد MATLAB که از eluLayer استفاده میکند، به صورت زیر است:
layers = [
imageInputLayer([32 32 3])
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
eluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
eluLayer
maxPooling2dLayer(2,'Stride',2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
در این کد، ابتدا یک شبکه عصبی ساخته شده است که شامل لایههای ورودی تصویر، لایههای کانولوشن، لایههای batch normalization، و لایههای ELU است. البته این کد فقط یک مثال است و معماری شبکه عصبی شما ممکن است متفاوت باشد اما میتوانید eluLayer را با دقت در شبکه خود استفاده کنید تا از مزیتهای آن استفاده کنید.
دستور tanhLayer:
در متلب، tanhLayer یک لایه (layer) تانژانس هایپربولیک (Hyperbolic Tangent) است که در شبکههای عصبی کانولوشنال (CNN) استفاده میشود. تابع تانژانت هایپربولیک ورودی را به دامنه (-1، 1) نگاشت میکند. این لایه میتواند در شبکههای عصبی برای اجرای عملیات نورونی و فعال سازی در لایهها مورد استفاده قرار گیرد.
برای استفاده از tanhLayer در متلب، میتوانید از تابع tanhLayer() استفاده کنید. یک نمونه کد به صورت زیر است:
% ایجاد شبکه عصبی
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3, 8, 'Padding', 'same')
tanhLayer()
fullyConnectedLayer(10)
softmaxLayer()
classificationLayer()
];
% آموزش شبکه
options = trainingOptions('sgdm', 'MaxEpochs', 10);
net = trainNetwork(trainingImages, trainingLabels, layers, options);
در این کد، یک لایه تانژانت هایپربولیک (tanhLayer) بین یک لایه کانولوشن و یک لایه متمرکز کامل (fully connected) قرار داده شده است. این لایه تانژانت هایپربولیک وظیفه اعمال تابع تانژانت هایپربولیک بر روی خروجی لایههای قبلی و تبدیل ورودی های آن را به دامنه (-1، 1) دارد.
دستور batchNormalizationLayer:
دستور batchNormalizationLayer در محیط نرمافزار متلب برای اعمال عملیات نرمالسازی دستهای بر روی ورودیهای یک لایه در شبکههای عصبی مصنوعی استفاده میشود. این لایه کمک میکند تا با استفاده از میانگین و انحراف معیار دستههای مختلف از دادههای ورودی، ورودیها را نرمالسازی کرده و تاثیر نویز و شیفت دامنهای را کاهش دهد. این کار منجر به سرعت یادگیری بهتر، پایداری بیشتر و جلوگیری از برازش بیش از حد مدل میشود.
برای استفاده از batchNormalizationLayer در متلب میتوانید به شکل زیر عمل کنید:
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
در این مثال، batchNormalizationLayer بعد از هر لایه کانولوشن اعمال شده است تا موثریت نرمالسازی دستهای را نشان دهد. این لایه میتواند پارامترهایی چون Factor, Epsilon, Offset و TrainedMean را قبل از آموزش مدل شما بهصورت دستی تنظیم کرد.
دستور dropoutLayer:
در محیط نرم افزار متلب، دستور dropoutLayer از بخش آموزش شبکههای عصبی و اعمال تکنیکهای آنها استفاده میشود. این دستور برای اعمال dropout به یک لایه در شبکههای عصبی کانولوشنال یا کاملاً متصل (Fully Connected) استفاده میشود. Dropout یک روش regularization است که در آن، تصادفی برخی از واحدهای یک لایه در هر مرحله ترینینگ به وزن صفر تبدیل میشوند. این روش کمک میکند تا شبکه برازشهای زیادی به دادگان ترینینگ نکند و از بیشبرازش (Overfitting) جلوگیری کند.
برای استفاده از dropoutLayer، شما میتوانید آن را به عنوان یک لایه به شبکه عصبی اضافه کرده و با تنظیم پارامترهای آن از آن استفاده نمایید.
در زیر یک نمونه کد در متلب برای اضافه کردن یک dropout layer به یک شبکه عصبی کاملاً متصل آورده شده است:
layers = [
fullyConnectedLayer(512)
dropoutLayer(0.5) % Dropout with a rate of 50%
reluLayer
fullyConnectedLayer(256)
dropoutLayer(0.3) % Dropout with a rate of 30%
reluLayer
fullyConnectedLayer(128)
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
% Define the network options (e.g., training options, data preprocessing, etc.)
options = trainingOptions('sgdm', ...
'MaxEpochs', 20, ...
'MiniBatchSize', 128, ...
'Plots', 'training-progress');
% Train the network
net = trainNetwork(XTrain, YTrain, layers, options);
در این کد، ابتدا چند لایه Fully Connected به شبکه اضافه شده و سپس با استفاده از dropoutLayer از dropout برای برخی از واحدها استفاده شده است. در اینجا، dropout با نرخ 50٪ برای یک لایه و با نرخ 30٪ برای لایه دیگر استفاده شده است. سپس شبکه با استفاده از دادههای آموزش (XTrain و YTrain) آموزش دیده و بهبود پیدا میکند.
دستور averagePooling2dLayer:
در MATLAB، averagePooling2dLayer یک لایهی پولینگ است که در شبکههای عصبی عمیق برای انجام عملیات پولینگ (استخراج ویژگیهای کلیدی) بر روی ویژگیهای ورودی استفاده میشود. این لایه با محاسبه میانگین مقادیر در هر محدودهی قرار گرفته بر روی ویژگیهای ورودی، ابعاد آنها را کاهش میدهد.
برای استفاده از averagePooling2dLayer باید یک شیء از این لایه تعریف کنید و به شبکه خود اضافه کنید. این لایه میتواند کلیه پارامترهای لایههای پولینگ مانند اندازه پنجره، گام و حالتهای پر کردن را تنظیم کند.
اینجا یک مثال ساده از استفاده از averagePooling2dLayer در MATLAB است:
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3,16,'Padding','same')
reluLayer
averagePooling2dLayer(2,'Stride',2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
در اینجا یک شبکهی عصبی ساده با یک لایه پولینگ از نوع میانگین (averagePooling2dLayer) تعریف شده است که پس از یک لایهی فشرده (Convolutional) و ReLU قرار دارد. این نمونه شامل یک لایه کامل مخصوص ادراک (fullyConnectedLayer) و لایههای softmax و دستهبندی نیز میباشد.
دستور averagePooling3dLayer:
دستور averagePooling3dLayer در متلب برای انجام عملیات ادغام سطوح یک سری از ویژگی های ورودی عمقی استفاده میشود. این دستور به شما این امکان را میدهد تا با انتخاب ابعاد مشخص، متوسط اعضای هر گروه را محاسبه کرده و خروجی آن را تولید کنید. به عبارت دیگر، این دستور به شما کمک میکند تا اطلاعات مهم از یک مجموعه داده بزرگتر را بهصورت خلاصه تر خلاصه کرده و از انبار کمتری استفاده کنید.
برای استفاده از دستور averagePooling3dLayer به شکل زیر میتوانید اقدام کنید:
layers = [
imageInput3dLayer([28 28 28 1])
averagePooling3dLayer([2 2 2], 'Stride', [2 2 2])
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
در این مثال، ابتدا یک لایه ورودی تصویری مشخص شده است که یک تصویر با ابعاد 28x28x28 را دریافت میکند. سپس یک لایه averagePooling3d با ابعاد ادغام 2x2x2 و گام 2x2x2 اعمال شده است. در انتها یک لایه fully connected و softmax برای طبقهبندی اعمال شده است.
این مثال یک طراحی سادهای از یک شبکه عصبی در متلب به وجود میآورد که از averagePooling3dLayer برای ادغام سطوح استفاده کرده است.
دستور globalAveragePooling3dLayer:
دستور globalAveragePooling3dLayer در متلب برای تبدیل ویژگی های یک ورودی با ابعاد 3D (برای مثال یک تصویر حجمی سه بعدی) به یک بردار یا یک تصویر دو بعدی از میانگین مقادیر ویژگی ها در سه بعد معین شده انجام میدهد.
با استفاده از این لایه، ابعاد داده ورودی را کاهش میدهیم و اطلاعات مهم تصویری را با حفظ معنای مورد استفاده قرار میدهیم، که این کار میتواند کارایی شبکههای عصبی عمیق را بهبود بخشد و از پدیدهی overfitting جلوگیری کند.
یک نمونه کد برای استفاده از globalAveragePooling3dLayer در متلب به شکل زیر است:
% تعریف لایهی globalAveragePooling3d
layer = globalAveragePooling3dLayer();
% تشکیل شبکه
layers = [
image3dInputLayer([32 32 32 3])
convolution3dLayer(3,8,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling3dLayer(2,'Stride',2)
convolution3dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
globalAveragePooling3dLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
% آموزش مدل
options = trainingOptions('sgdm','MaxEpochs',5);
net = trainNetwork(data,layers,options);
در این کد، یک شبکهی عصبی سه بعدی با لایه globalAveragePooling3d به همراه دیگر لایهها تعریف و آموزش داده میشود.
دستور MaxPooling2dLayer:
در فرآیند یادگیری عمیق و شبکههای عصبی، لایه MaxPooling2dLayer یک نوع لایهی پولینگ میباشد که بعنوان یک بخش از شبکه عصبی استفاده میشود. این لایه با انجام عملیات کوچک کردن اندازه ویژگیهای ورودی، از یک تصویر مربعی (در دادههای ورودی تصویری به صورت شبکههای عصبی معمولا استفاده میشود) با اندازهی بزرگتر، یک تصویر کوچکتر و با ویژگیهای مهمتری برمیگرداند. این کار به مدل کمک میکند تا از پدیدههای زاویهای و توجه به جزئیات غیرمهم جلوگیری کند و ویژگیهای مهمتر تصویر را استخراج کند.
یک کد ساده در محیط متلب که از لایه MaxPooling2dLayer استفاده میکند، به صورت زیر است:
% تعریف معماری شبکه عصبی
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3, 64)
reluLayer
maxPooling2dLayer(2, 'Stride', 2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
% تعریف پارامترهای آموزش
options = trainingOptions('sgdm');
% آموزش شبکه
net = trainNetwork(inputData, targetData, layers, options);
در این کد، بخش maxPooling2dLayer(2, ‘Stride’, 2) بر روی خروجی لایهی قبلی اعمال شده است. این حالت یک نمونه ساده از استفاده از لایه MaxPooling2dLayer است که یک پنجره 2×2 را روی ورودی حرکت داده و از هر فاصلهی 2 پیکسل، حداکثر مقدار را انتخاب میکند.
دستور additionLayer:
دستور additionLayer در محیط نرمافزار متلب جهت ایجاد یک لایه (layer) اضافه کننده به شبکههای عصبی عمیق (Deep Neural Networks) استفاده میشود. این لایه مسئولیت انجام عملیات جمع دو ورودی را بر عهده دارد. استفاده از این لایه میتواند برای افزودن عملیات جمع به شبکههای عصبی در مواردی مانند ادغام اطلاعات از ورودیهای مختلف یا ترکیب دادههای ورودی با هدف استخراج ویژگیهای بهتر و یا حل مسائل خاص مفید باشد.
در زیر، یک مثال کد متلب برای ایجاد یک شبکه عصبی ساده با استفاده از additionLayer آورده شده است:
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3,8,'Padding','same')
batchNormalizationLayer
reluLayer
additionLayer(2,'Name','addition_layer')
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
در این مثال، پس از اعمال چند لایه معمولی (convolutional، batch normalization، relu و fully connected)، یک additionLayer به شبکه اضافه شده است. این لایه مسئول انجام عملیات جمع بین دو ورودی است که در اینجا به عنوان دو خروجی قبلی شبکه میباشند.
دستور concatenationLayer:
در متلب، دستور concatenationLayer یک لایه شبکه عصبی را ایجاد میکند که به شما امکان ادغام (Concatenation) و یا ادغام عمودی (Concatenation along depth) دو یا چند ورودی را فراهم میکند. این لایه، ویژگیهای ورودی را به صورت موازی و یا عمودی به یکدیگر میچسباند.
یک مثال ساده از استفاده از concatenationLayer در متلب برای ادغام دو ورودی، به صورت زیر است:
%% ساختن ورودیها
inputSize1 = [28 28 1];
inputSize2 = [28 28 3];
%% ایجاد معماری شبکه
layers = [
imageInputLayer(inputSize1, 'Name', 'input1')
convolution2dLayer(3, 16, 'Name', 'conv1')
reluLayer('Name', 'relu1')
maxPooling2dLayer(2, 'Stride', 2, 'Name', 'maxpool1')
];
lgraph1 = layerGraph(layers);
layers = [
imageInputLayer(inputSize2, 'Name', 'input2')
convolution2dLayer(3, 32, 'Name', 'conv2')
reluLayer('Name', 'relu2')
maxPooling2dLayer(2, 'Stride', 2, 'Name', 'maxpool2')
];
lgraph2 = layerGraph(layers);
%% ادغام دو معماری شبکه
lgraph = layerGraph();
lgraph = addLayers(lgraph, lgraph1.Layers);
lgraph = addLayers(lgraph, lgraph2.Layers);
%% اضافه کردن لایه concat لایه
lgraph = addLayers(lgraph, concatenationLayer(1,2, 'Name', 'concat'));
%% اتصال لایهها
lgraph = connectLayers(lgraph, 'maxpool1', 'concat/in1');
lgraph = connectLayers(lgraph, 'maxpool2', 'concat/in2');
%% نمایش معماری نهایی
analyzeNetwork(lgraph)
در این مثال، دو شبکه با ورودیهای مختلف ایجاد شده و سپس با استفاده از concatenationLayer، ورودیهای این دو شبکه ادغام شدهاند تا یک شبکه جدید با ورودیهای ترکیب شده ایجاد شود.
دستور sigmoidLayer:
دستور sigmoidLayer در محیط MATLAB برای ایجاد یک لایه شبکه عصبی با تابع فعالسازی سیگموئید (sigmoid) استفاده میشود. این لایه به طور معمول در شبکههای عصبی برای مسائل دستهبندی استفاده میشود، زیرا توانایی تبدیل مقادیر ورودی به مقادیر بین 0 و 1 را دارد که میتوان این مقادیر را به عنوان احتمال برای هر کلاس در نظر گرفت.
برای استفاده از دستور sigmoidLayer، ابتدا باید یک ساختار شبکه عصبی را تعریف کنید و سپس از این دستور به عنوان یک لایه به شبکه خود اضافه کنید. به طور مثال:
layers = [
imageInputLayer([28 28 1])
fullyConnectedLayer(300)
reluLayer
fullyConnectedLayer(100)
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
sigmoidLayer
];
net = trainNetwork(XTrain, YTrain, layers, options);
در کد فوق، یک شبکه عصبی با ورودی تصاویر به ابعاد 28×28 و خروجی 10 کلاس با استفاده از لایههای fully connected، relu، softmax، classification و sigmoid ساخته شده است. با افزودن sigmoidLayer به انتهای شبکه، امکان اعمال تابع فعالسازی سیگموئید به خروجی شبکه فراهم میشود.
دستور Softmax:
لایه Softmax در متلب به شما کمک میکند تا خروجیهای یک مدل شبکه عصبی را به صورت احتمالی تبدیل کنید. این لایه عموماً برای مسائل دستهبندی و تشخیص الگو استفاده میشود. ورودیهایی که از یک شبکه عصبی دریافت میشود (مانند خروجیهای یک لایه Dense) را به احتمالات متناظر با دستههای مختلف تبدیل میکند.
به طور کلی، Softmax یک تابع فعالسازی است که خروجیهای خطی یک لایه را به صورت احتمالی تبدیل میکند، به طوری که مجموع احتمالات یک خروجی شبکه برابر با 1 میشود.
برای استفاده از لایه Softmax در متلب، شما میتوانید از تابع softmaxLayer استفاده کنید. به طور مثال، فرض کنید داده ورودی x به مدل شما رفته و پس از یک لایه Dense، خروجیها y را دریافت میکنید.
میتوانید لایه Softmax را به صورت زیر بعد از لایه Dense به کد خود اضافه کنید:
layers = [
% لایه Dense
fullyConnectedLayer(10)
% لایه Softmax
softmaxLayer
];
این کد یک معماری ساده از یک شبکه عصبی با یک لایه Dense و یک لایه Softmax ایجاد میکند. شما میتوانید این کد را با معماری شبکه عصبی مورد نظر خود تغییر دهید و از لایه Softmax برای تبدیل خروجیهای نهایی شبکه به احتمالات استفاده کنید.
دستور classificationLayer:
دستور classificationLayer در محیط نرمافزاری متلب به کار برده میشود تا یک لایه دستهبندی برای شبکههای عصبی اعمال کند. این دستور به شما این امکان را میدهد تا یک لایه دستهبندی برای استفاده در مدلهای شبکههای عصبی تعریف کنید.
این دستور در واقع یک لایه آخر را به شبکه عصبی اضافه میکند که وظیفه دستهبندی محتویات ورودی را بر عهده دارد. این لایه معمولا بعد از لایههای پردازشی ویژگی مثل لایههای پیشگفتگو (Convolutional) و یا LSTM در یک مدل شبکه عصبی اضافه میشود.
برای استفاده از classificationLayer در یک کد متلب، میتوانید مانند زیر اقدام کنید:
numClasses = 10; % تعداد کلاسها
layers = [
imageInputLayer([28 28 1]) % لایه ورودی برای تصاویر سیاه و سفید با ابعاد 28x28
convolution2dLayer(3,8,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
fullyConnectedLayer(128)
reluLayer
fullyConnectedLayer(numClasses) % لایه خروجی با تعداد نودهای برابر تعداد کلاسها
softmaxLayer
classificationLayer]; % لایه دستهبندی
options = trainingOptions('adam');
net = trainNetwork(datastore,layers,options);
در این کد، classificationLayer در لایه آخر مدل شبکه عصبی قرار داده شده است. این مدل برای دستهبندی تصاویر به تعداد 10 کلاس مختلف آموزش داده میشود.
دستور regressionLayer:
در متلب، دستور regressionLayer یک لایه (layer) شبکه عصبی برای انجام مسائل رگرسیون است. این لایه در عمل به تشخیص مسئله رگرسیون و اعمال توابع خطا بین مقدار تخمینی واقعی برای محاسبه نرخ خطا در شبکه عصبی کمک میکند.
این لایه یکی از لایههای output یک شبکه عصبی است که بیشتر در وظفه پیشبینی یک متغیر پیوسته استفاده میشود. مثلاً وقتی شما یک مدل رگرسیون با استفاده از شبکه عصبی میسازید، میتوانید این لایه را به عنوان لایهی آخر شبکه برای پیشبینی مقدار متغیر پیش بینی شده استفاده کنید.
برای استفاده از regressionLayer در متلب، ابتدا یک شبکه عصبی ایجاد کنید، سپس از این دستور به عنوان یک لایه اضافی به شبکه اضافه کنید. سپس با استفاده از دادههای خود شبکه را آموزش دهید و ارزیابی کنید.
در زیر یک نمونه کد برای اضافه کردن regressionLayer به یک شبکه عصبی در متلب آمده است:
% ساختن یک شبکه عصبی ساده
net = feedforwardnet(10); % یک شبکه عصبی با 10 نورون در لایه پنهان
% اضافه کردن لایه رگرسیون به شبکه
net.layers{end+1} = regressionLayer;
% تعیین ورودی و خروجی شبکه
X = rand(10,100); % دادههای ورودی
Y = rand(1,100); % خروجیهای مورد انتظار
% آموزش شبکه
net = train(net, X, Y);
% پیشبینی مقدار
Y_pred = net(X);
% نمایش خطای معیار رگرسیون
mse = immse(Y, Y_pred);
disp(['Mean Squared Error: ', num2str(mse)]);
در این کد ابتدا یک شبکه عصبی ساده با استفاده از feedforwardnet ایجاد شده و سپس یک لایه regressionLayer به عنوان لایهی output به شبکه اضافه شده است. سپس با دادههای تصادفی آموزش داده شده و مقدار خطا (Mean Squared Error) محاسبه شده و نمایش داده شده است.
دستور augmentedImageDatastore:
در محیط نرمافزار متلب، دستور augmentedImageDatastore برای ایجاد یک دستهداده تصویر با تصاویر ورودی افزوده شده به آن برای افزایش تعداد دادههای آموزش مناسب است. این دستور به شما این امکان را میدهد که تصاویر افزوده شده را با استفاده از تغییرات مختلفی مانند تغییر اندازه، چرخش، انعکاس، نویز و… ایجاد کنید.
استفاده از augmentedImageDatastore به شما کمک میکند که بتوانید مدلهای یادگیری عمیق بهتری را بدون نیاز به تعداد زیادی داده آموزشی تولید کنید و از بروز افزونه خارجی پیشگام بپرهیزید.
در زیر یک نمونه کد ساده برای استفاده از augmentedImageDatastore در متلب آمده است:
% مسیر دادههای تصویر
dataFolder = 'path_to_your_image_folder';
% ساخت دستهداده تصویر اصلی
imds = imageDatastore(dataFolder, 'LabelSource', 'foldernames');
% تعریف پارامترهای تغییرات
augmenter = imageDataAugmenter('RandXReflection',true,'RandXScale',[0.5 1.5]);
% ایجاد دستهداده تصویر افزوده شده
augImds = augmentedImageDatastore([224 224], imds, 'DataAugmentation', augmenter);
% نمایش تصویر تصادفی از دستهی داده
I = read(augImds);
imshow(I);
در این کد، ابتدا مسیر دادههای تصویر، سپس دستهداده تصویر اصلی با استفاده از imageDatastore ساخته میشود. سپس پارامترهای تغییرات مانند انعکاس افقی (RandXReflection) و مقیاسدهی افقی (RandXScale) برای تصاویر تعین میشود. در نهایت با استفاده از دستور augmentedImageDatastore دستهداده تصویر افزوده شده ساخته و یک تصویر تصادفی از این دستهداده نمایش داده میشود.
دستور layerGraph:
دستور layerGraph در متلب برای ساختاردهی یک شبکه عصبی عمیق (DNN) و تعریف لایههای مختلف در این شبکه استفاده میشود. این دستور به شما امکان میدهد تا یک شبکه عصبی پیچیده را با ترکیب لایههای مختلف مانند لایههای متصل کامل (fully connected layers)، لایههای پیچشی (convolutional layers)، لایههای درهمسازی (pooling layers) و… ایجاد کنید.
با استفاده از layerGraph میتوانید ساختار شبکه را به صورت محوری و قابل خواندن مشخص کنید و به راحتی به آن لایههای جدید اضافه یا حذف کنید. این کارتنیکه ساختن و پیکربندی مدلهای پیچیده عصبی را بسیار آسانتر و قابل فهمتر میکند.
در زیر یک نمونه ساده از استفاده از layerGraph در متلب را برای ساخت یک شبکه عصبی ساده به شما نشان میدهم:
% ساخت یک شبکه عصبی ساده
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3, 16, 'Padding', 1)
reluLayer
maxPooling2dLayer(2, 'Stride', 2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
lgraph = layerGraph(layers);
در این کد، یک شبکه عصبی ساده با ورودی یک تصویر به ابعاد 28*28 و یک لایه پیچشی، یک لایه ReLU، یک لایه درهمسازی و سپس تعدادی لایه دیگر برای کلاسبندی ایجاد شده است. این ساختار با استفاده از layerGraph تعریف و ساخته شده است.
دستور removeLayers:
دستور removeLayers در متلب به شما امکان حذف یک یا چند لایه از یک شبکه عصبی را میدهد. این دستور به شما این امکان را میدهد تا یک لایه از شبکه عصبی را به صورت پویا حذف کرده و شبکه را با لایههای کمتری تعریف کنید. این کار میتواند برای سازگاری و تغییرات سریع در ساختار شبکههای عصبی بسیار مفید واقع شود.
یک مثال کاربردی از دستور removeLayers در متلب:
% تعریف یک شبکه عصبی با 3 لایه
layers = [
imageInputLayer([28 28 1])
fullyConnectedLayer(300)
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
% ساخت یک شبکه عصبی از لایههای تعریف شده
net = SeriesNetwork(layers);
disp("قبل از حذف لایه:");
disp(net.Layers);
% حذف لایه میانی (لایه relu)
net = removeLayers(net, 'reluLayer');
disp("بعد از حذف لایه:");
disp(net.Layers);
در این مثال، ابتدا یک شبکه عصبی با یک لایه ورودی، دو لایه مخفی و یک لایه خروجی تعریف میشود. سپس از دستور removeLayers برای حذف یک لایه میانی (relu) استفاده میشود. نتیجه حاصل این است که لایه میانی حذف شده و تنها لایههای ورودی و خروجی در شبکه باقی میمانند.
دستور DAGNetwork:
کلاس DAGNetwork در متلب، یک نوع مدل عصبی است که به شما امکان میدهد یک شبکه عصبی با ساختار گراف دگراف (Directed Acyclic Graph) ایجاد کنید. این مدل از ساختار گراف استفاده میکند تا معماری شبکه عصبی خود را تعریف کند که به شما امکان میدهد ساختار پیچیدهتری را ایجاد کنید که میتواند شامل لایههای مختلفی باشد.
با استفاده از DAGNetwork میتوانید ساختار شبکه عصبی خود را به صورت گرافیکی تعریف کنید و به راحتی لایهها و اتصالات بین آنها را تنظیم کنید.
در زیر یک نمونه کد متلب برای ساخت یک مدل DAGNetwork برای یادگیری عمیق ارائه شده است:
layers = [
imageInputLayer([28 28 1], 'Name', 'input')
convolution2dLayer(5, 20, 'Name', 'conv1')
reluLayer('Name', 'relu1')
fullyConnectedLayer(10, 'Name', 'fc')
softmaxLayer('Name', 'softmax')
classificationLayer('Name', 'output')
];
lgraph = layerGraph(layers);
lgraph = connectLayers(lgraph, 'conv1', 'relu1');
lgraph = connectLayers(lgraph, 'relu1', 'fc');
net = DAGNetwork(lgraph);
در این کد، یک ساختار layerGraph با لایههای مختلف مانند ورودی تصویر، لایههای کانولوشن و متصل کامل ایجاد شده و سپس این ساختار به یک شی DAGNetwork تبدیل شده است.
با استفاده از DAGNetwork، میتوانید از ویژگیهای مختلف شبکههای عصبی برای مسائل یادگیری عمیق استفاده کنید و ساختار پیچیدهتری از مدل را ارائه دهید.
دستور classify:
در محیط نرمافزاری متلب، دستور classify برای طبقهبندی دادهها استفاده میشود. این دستور برای ایجاد مدلهای طبقهبندی از روشهای مختلفی نظیر تحلیل تفسیری، ماشینهای بردار پشتیبان (SVM)، شبکههای عصبی، درخت تصمیم و… استفاده میشود. با استفاده از این دستور، میتوانید دادههای ورودی را بر اساس ویژگیهای موجود به دستهبندی کنید.
برای استفاده از دستور classify به طور کلی نیاز به دادههای ورودی (در ماتریس X)، برچسبهای کلاسهای مربوطه (در ماتریس Y)، و سپس تعیین مدل طبقهبندی مورد نظر دارید.
اینجا یک مثال ساده برای استفاده از دستور classify برای طبقهبندی دادههای تصادفی با استفاده از SVM در متلب است:
% تولید دادههای تصادفی
X = rand(100, 2); % دو ویژگی برای هر نمونه
Y = ones(100, 1); % برچسب همه دادهها را یک خواهد کرد
% تقسیم دادهها به دادههای آموزشی و تست
idx = randperm(100);
X_train = X(idx(1:70), :);
Y_train = Y(idx(1:70));
X_test = X(idx(71:end), :);
Y_test = Y(idx(71:end));
% ایجاد یک مدل طبقهبند SVM
Mdl = fitcsvm(X_train, Y_train);
% برآورد عملکرد مدل با استفاده از دادههای تست
Y_pred = predict(Mdl, X_test);
% نمایش دقت مدل
accuracy = sum(Y_pred == Y_test) / numel(Y_test);
disp(['دقت مدل: ', num2str(accuracy * 100), '%']);
در این کد، ابتدا دادههای تصادفی تولید شده و سپس به دادههای آموزشی و تست تقسیم میشوند. سپس یک مدل SVM بر روی دادههای آموزشی آموزش داده میشود و دقت مدل بر روی دادههای تست محاسبه و نمایش داده میشود.
دستور predict:
دستور predict در متلب برای پیشبینی مقادیر بهوسیلهٔ مدلهای آموزش دیده میباشد. این دستور به شما امکان میدهد تا با استفاده از مدلی که قبلاً با الگوریتمهای یادگیری ماشین در متلب آموزش دادهاید، مقداری را پیشبینی کنید.
به طور کلی، برای استفاده از دستور predict در متلب، ابتدا باید یک مدل آموزش دیده، مانند مدل Regression یا Classification، داشته باشید و سپس با ورودیهای موردنیاز به این مدل، از دستور predict برای پیشبینی خروجی استفاده میکنید.
برای نمونه، اینجا یک کد ساده در متلب آمده است که از دستور predict برای پیشبینی خروجی استفاده میکند. در این مثال، یک مدل Linear Regression ساده آموزش داده شده است و سپس با دادن یک ورودی، مقدار خروجی پیشبینی میشود.
% ایجاد دادههای آموزشی
X = [1; 2; 3; 4; 5];
y = [2; 4; 6; 8; 10];
% آموزش مدل Linear Regression
mdl = fitlm(X, y);
% ورودی جدید برای پیشبینی
newX = 6;
% پیشبینی مقدار خروجی
predictedY = predict(mdl, newX);
disp(predictedY);
در این کد، ابتدا دادههای آموزشی X و y ایجاد شده و سپس یک مدل Linear Regression با استفاده از fitlm آموزش داده شده است. سپس یک ورودی جدید برای پیشبینی (newX) وارد شده و با استفاده از دستور predict، مقدار خروجی پیشبینی شده و در نهایت چاپ میشود.
دستور activations:
در محیط نرمافزار متلب، دستور activations در فرایند آموزش شبکههای عصبی (Neural Networks) استفاده میشود. این دستور به کمک الگوریتمهای بهینهسازی، وزنها و biasهای شبکه عصبی را بهروزرسانی میکند تا خطا در پیشبینیهای شبکه کمینه شود.
نمونهای از استفاده از دستور activations در متلب میتواند به صورت زیر باشد:
% تعریف معماری شبکه عصبی
layers = [
fullyConnectedLayer(10)
reluLayer
fullyConnectedLayer(5)
reluLayer
fullyConnectedLayer(1)
regressionLayer
];
% تنظیمات شبکه عصبی
options = trainingOptions('sgdm', 'MaxEpochs', 20);
% آموزش شبکه عصبی
net = trainNetwork(XTrain, YTrain, layers, options);
% بهروزرسانی وزنها و biasها
activations = predict(net, XValidation);
در این کد، شبکه عصبی تعریف شده، با تنظیمات مشخص، آموزش داده میشود. سپس با استفاده از دستور activations، خروجی مراحل مختلف شبکه برای دادههای اعتبارسنجی XValidation محاسبه میشود.
دستور confusionchart:
در محیط نرمافزار متلب، تابع confusionchart برای نمایش ماتریس گیجافتابی (Confusion Matrix) و گرافیکیسازی آن استفاده میشود. این تابع به صورت گرافیکی روشنی بر پیشبینیهای صحیح و غلط یک مدل ماشین یادگیری نشان میدهد. این نمودار به تحلیل عملکرد مدل در زمان آموزش بر اساس دادههای تست کمک میکند.
برای استفاده از تابع confusionchart در متلب، ابتدا باید یک مدل آموزشی بسازید و سپس دادههای تست خود را به مدل بدهید. سپس میتوانید با استفاده از تابع confusionchart، ماتریس گیجافتابی را نمایش دهید.
در زیر یک نمونه کد در متلب آمده است که یک مدل ساده را آموزش میدهد، دادهها را پیشبینی کرده و سپس ماتریس گیجافتابی را با استفاده از confusionchart نمایش میدهد:
% تولید دادههای آموزشی و تست
X_train = rand(100,2); % دادههای آموزشی
y_train = randi([0 1], 100, 1); % برچسبهای دادههای آموزشی
X_test = rand(50,2); % دادههای تست
y_test = randi([0 1], 50, 1); % برچسبهای دادههای تست
% تولید مدل
mdl = fitcsvm(X_train, y_train);
% پیشبینی برچسبها
y_pred = predict(mdl, X_test);
% نمایش ماتریس گیجافتابی
confusionchart(y_test, y_pred);
استفاده از این تابع باعث میشود که به صورت واضحتر و قابل مقایسهتر، عملکرد مدل ماشین یادگیری شما در تشخیص دادهها نمایش داده شود.
دستور sortClasses:
دستور sortClasses در متلب برای مرتبسازی آرایهای از شیءهای کلاسی از یک یا چند کلاس مختلف استفاده میشود. این دستور بر روی ویژگی (متد) مقایسهپذیری که برای مقایسه اعضای کلاسها استفاده میشود، معتبر است. اگر کلاس مورد نظر شیئی خارجی تعریف شده باشد، آنگاه نام کلاس باید همچنین ارسال شود.
یک مثال کاربردی از دستور sortClasses در متلب به صورت زیر میباشد:
classdef MyClass
properties
Value
end
end
% تعریف یک آرایه از شیءهای MyClass با مقدارهای مختلف
obj1 = MyClass;
obj1.Value = 10;
obj2 = MyClass;
obj2.Value = 5;
obj3 = MyClass;
obj3.Value = 8;
% ترتیببندی شیءهای MyClass بر اساس مقدار Value آنها
sortedObjs = sortClasses([obj1, obj2, obj3], 'Value');
% نمایش مقادیر مرتبشده شیءها
for i = 1:length(sortedObjs)
disp(sortedObjs(i).Value);
end
در این مثال، ابتدا یک کلاس به نام MyClass با یک ویژگی به نام Value تعریف شده است. سپس سه شیء از این کلاس ایجاد شده و مقادیر Value آنها مشخص شده است. در نهایت، شیءهای ایجاد شده بر اساس مقدار Value آنها مرتب شده و مقادیر آنها نمایش داده میشود.
دستور TrainingOptionsSGDM:
دستور TrainingOptionsSGDM در محیط نرمافزار MATLAB برای تنظیم تنظیمات آموزش الگوریتم Stochastic Gradient Descent with Momentum (SGDM) استفاده میشود. این دستور به شما امکان میدهد که پارامترهای مختلفی مانند نرخ یادگیری، میزان momentum، حداکثر تعداد دورههای آموزش و غیره را تنظیم کنید.
مزایای استفاده از الگوریتم SGDM شامل سرعت و کارایی بالا در آموزش مدلهای یادگیری عمیق میباشد.
در زیر یک نمونه کد MATLAB برای استفاده از TrainingOptionsSGDM آمده است:
% تعریف مدل شبکه عصبی
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3, 16, 'Padding', 1)
reluLayer
maxPooling2dLayer(2, 'Stride', 2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
% تعریف تنظیمات آموزش با SGDM
options = trainingOptions('sgdm', ...
'MaxEpochs', 10, ...
'MiniBatchSize', 128, ...
'InitialLearnRate', 0.01, ...
'LearnRateSchedule', 'piecewise', ...
'LearnRateDropFactor', 0.1, ...
'LearnRateDropPeriod', 5, ...
'Shuffle', 'every-epoch', ...
'Plots', 'training-progress');
% آموزش مدل
net = trainNetwork(trainImages, trainLabels, layers, options);
در این کد، یک شبکه عصبی ساده با لایههای مختلف تعریف شده است. سپس با استفاده از TrainingOptionsSGDM تنظیمات مربوط به آموزش شبکه تعیین شده و مدل با فراخوانی trainNetwork آموزش داده میشود.
دستور TrainingOptionsRMSProp:
دستور TrainingOptionsRMSProp در محیط نرم افزار MATLAB برای تنظیم تنظیمات مربوط به فرآیند آموزش یک شبکه عصبی با استفاده از الگوریتم بهینهسازی RMSProp مورد استفاده قرار میگیرد. الگوریتم RMSProp یک الگوریتم بهینهسازی گرادیان است که برای بهبود عملکرد آموزش شبکههای عصبی استفاده میشود. این الگوریتم تطبیقی میباشد که سرعت یادگیری را بر اساس فرکانس گذشته گرادیانها تعیین میکند.
کاربرد این دستور در MATLAB این است که شما میتوانید با استفاده از TrainingOptionsRMSProp پارامترهای مهمی مانند نرخ یادگیری، معیار اختلاف، مومنتوم و سایر تنظیمات مربوط به آموزش شبکه عصبی خود را تعیین کنید.
در زیر یک نمونه کد MATLAB ارئه شده است که از TrainingOptionsRMSProp استفاده میکند:
layers = [
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
options = trainingOptions('rmsprop', ...
'MaxEpochs', 10, ...
'InitialLearnRate', 0.001, ...
'MiniBatchSize', 32, ...
'Plots', 'training-progress');
net = trainNetwork(data, layers, options);
در این کد، ابتدا یک ساختار لایههای شبکه عصبی تعیین شده است. سپس با استفاده از TrainingOptionsRMSProp، تنظیمات مربوط به آموزش شبکه شامل تعداد حلقات آموزش، نرخ یادگیری اولیه، اندازه دسته، نمایش پیشرفت آموزش و… تعیین شده است. سرانجام با استفاده از trainNetwork، شبکه عصبی با استفاده از داده و تنظیمات مورد نظر آموزش میبیند.
لازم به ذکر است که این کد فقط یک مثال است و برای استفاده کامل از TrainingOptionsRMSProp باید تنظیمات مورد نیاز بر اساس وظیفه و داده مورد استفاده تنظیم شوند.
دستور layer:
دستور layer در محیط نرمافزار MATLAB برای ایجاد یک لایه (layer) در یک مدل شبکه عصبی کانولوشنال (Convolutional Neural Network) استفاده میشود. این دستور به شما این امکان را میدهد که ویژگیهای مختلف شبکه عصبی خود را سفارشی کنید، از جمله تنظیمات مربوط به وزنها (weights)، توابع فعالسازی (activation functions)، محاسبهٔ گرادیان (gradients) و غیره.
برای استفاده از دستور layer در MATLAB و استفاده از یک مثال، میتوانید به کد زیر مراجعه کنید که یک شبکه عصبی کانولوشنال ساده را تعریف میکند و از دستور layer برای ایجاد دو لایه Convolutional و یک لایه Fully Connected استفاده میکند:
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3,16,'Padding','same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,32,'Padding','same')
batchNormalizationLayer
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
options = trainingOptions('sgdm');
net = trainNetwork(trainingImages, trainingLabels, layers, options);
در این کد، ابتدا تعدادی لایه (layer) مانند imageInputLayer, convolution2dLayer, batchNormalizationLayer, reluLayer, maxPooling2dLayer, fullyConnectedLayer, softmaxLayer, classificationLayer تعریف شده است. سپس این لایهها در مدل شبکه عصبی با استفاده از تابع trainNetwork و trainingOptions به همراه دادههای آموزشی (مثل trainingImages و trainingLabels) مورد استفاده قرار میگیرند.
دستور SeriesNetwork:
در متلب، دستور SeriesNetwork یک شبکه عصبی مصنوعی از نوع عمیق (deep neural network) را ایجاد میکند. این دستور از پکیج Deep Learning Toolbox پشتیبانی میکند و امکان ساختاردهی سریع و آسان شبکههای عصبی را فراهم میکند. این دستور برای ساختن شبکههای عصبی با معماریهای مختلف مانند شبکههای تغذیه معکوس (feedforward neural networks) مثل MLP (Multi-Layer Perceptron) و CNN (Convolutional Neural Networks) استفاده میشود.
برای ساخت یک شبکه عصبی از جنس SeriesNetwork، ابتدا لازم است لایههای مختلف شبکه را با استفاده از توابع مختلفی مانند fullyConnectedLayer بسازید، سپس این لایهها را به عنوان ورودی به SeriesNetwork بدهید تا یک شبکه عصبی تکراری ایجاد شود.
در زیر یک نمونه کد MATLAB برای ساخت یک MLP سه لایه با SeriesNetwork آمده است:
% ساخت لایههای مورد نیاز برای شبکه عصبی
inputLayer = imageInputLayer([28 28 1]);
hiddenLayer1 = fullyConnectedLayer(300);
hiddenLayer2 = fullyConnectedLayer(100);
outputLayer = fullyConnectedLayer(10);
% ساخت یک اکتشاف 'SeriesNetwork'
layers = [
inputLayer
hiddenLayer1
reluLayer
hiddenLayer2
reluLayer
outputLayer
softmaxLayer
classificationLayer
];
net = SeriesNetwork(layers);
در این کد، ابتدا لایههای ورودی، پنهان و خروجی برای یک MLP سه لایه ساخته شده، سپس تمامی لایهها به جز لایهی اول با استفاده از reluLayer و در نهایت softmaxLayer به SeriesNetwork اضافه شدهاند. این شبکه دقیقاً همان شبکه عصبی مصنوعی است که با استفاده از SeriesNetwork ایجاد شده است.
دستور ClassificationOutputLayer:
در متلب، دستور ClassificationOutputLayer به شما کمک میکند تا یک لایه خروجی برای شبکههای عصبی عمیق که برای مسائل دستهبندی استفاده میشود، تعریف کنید. این دستور به طور خاص برای استفاده در شبکههای عصبی استفاده میشود که باید توانایی دستهبندی اطلاعات را داشته باشند.
ClassificationOutputLayer پارامترهای مختلفی دارد که به منظور تنظیم دقیق خروجی شبکه مورد استفاده قرار میگیرند مانند تنظیم تابع هزینه و نوع تابع فعالسازی. این دستور بهینهسازی شبکه را برای دستهبندی بهبود میدهد.
در زیر یک مثال ساده از استفاده از دستور ClassificationOutputLayer در متلب آورده شده است:
inputSize = 100;
numClasses = 5;
layers = [
imageInputLayer([inputSize 1])
fullyConnectedLayer(50)
reluLayer
fullyConnectedLayer(numClasses)
ClassificationOutputLayer
];
options = trainingOptions('sgdm', 'MaxEpochs', 10);
net = trainNetwork(data, labels, layers, options);
در این مثال، یک شبکه عصبی با ورودی 100 تایی، یک لایه متصل کامل 50 نورونی، یک لایه فعالسازی ReLU، یک لایه متصل کامل برای تعداد کلاسهای مورد نظر و در نهایت یک ClassificationOutputLayer تعریف شده است. سپس شبکه با استفاده از توابع مشخصشده و دیتای ورودی آموزش داده میشود.
دستور RegressionOutputLayer:
دستور RegressionOutputLayer در محیط نرمافزار متلب برای تعریف یک لایه خروجی به منظور انجام یک مسأله رگرسیون استفاده میشود. این لایه خروجی به طور معمول برای آموزش شبکههای عصبی برای پیشبینیهای پیوسته (مانند پیشبینی یک مقدار عددی مانند قیمت یک محصول) استفاده میشود.
مزایای استفاده از RegressionOutputLayer شامل انعطاف پذیری بالا برای تغییرات در شبکههای عصبی، امکان انجام محاسبات سریع بر روی دادههای پیوسته و امکان آموزش سریعتر شبکههای عصبی برای مسائل رگرسیونی است.
در زیر یک مثال ساده از استفاده از RegressionOutputLayer در متلب آمده است:
layers = [
fullyConnectedLayer(10)
regressionLayer
];
options = trainingOptions('adam', 'MaxEpochs',10);
XTrain = randn(100,10);
YTrain = randn(100,1);
net = trainNetwork(XTrain,YTrain,layers,options);
در این مثال، یک مدل ساده شبکهی عصبی با یک لایه fully connected و یک لایه RegressionOutputLayer ایجاد میشود و سپس بر روی دادههای تصادفی XTrain و YTrain آموزش داده میشود.
دستور TransposedConvolution2DLayer:
دستور TransposedConvolution2DLayer در محیط برنامهنویسی متلب یک لایه شبکه عصبی برای انجام عملیات کانولوشن معکوس یا همان کانولوشن ترانسپوز از یک ورودی دو بعدی به یک خروجی دو بعدی استفاده میشود. از این لایه برای ایجاد یک لایه ترانسپوزد کانولوشن در شبکه عصبی عمیق و یا شبکه های مولد مانند شبکههای GAN (شبکه های مولد تقابلی) استفاده میشود.
تفاوت اصلی بین کانولوشن و کانولوشن ترانسپوز این است که در کانولوشن معمولی ابعاد ورودی به خروجی کاهش میابد، در حالی که در کانولوشن ترانسپوز ابعاد خروجی از ورودی بیشتر میشود. این لایه به طور معمول برای انتقال اطلاعات از یک لایه پنهان به لایهای با ابعاد بزرگتر استفاده میشود.
برای استفاده از TransposedConvolution2DLayer در متلب، ابتدا باید یک شبکه عصبی را ایجاد کرده و سپس به آن لایههای مورد نیاز را اضافه کنید.
اینجا یک کد ساده برای استفاده از TransposedConvolution2DLayer در متلب آورده شده است:
% تعریف شبکه عصبی
net = [
imageInputLayer([28 28 1]) % لایه ورودی
transposedConv2dLayer(4, 32, 'Stride', 2, 'Name', 'transposed_conv') % لایه ترانسپوزد کانولوشن
reluLayer % لایه تابع فعالسازی ReLU
fullyConnectedLayer(10) % لایه کاملا متصل
softmaxLayer % لایه softmax
classificationLayer % لایه طبقهبندی
];
% تنظیمات شبکه عصبی
options = trainingOptions('sgdm', 'MaxEpochs', 10, 'InitialLearnRate', 0.001);
% آموزش شبکه عصبی
net = trainNetwork(XTrain, YTrain, net, options);
این کد یک معماری ساده از یک شبکه عصبی که شامل یک TransposedConvolution2DLayer با فیلترهای 4×4 و 32 فیلتر است را نشان میدهد. این لایه ترانسپوزد کانولوشن با گام حرکت (“Stride”) برابر با ۲ و نام “transposed_conv” تعریف شده است. سپس معماری شبکه، تنظیمات آموزش و دادههای ورودی و خروجی آماده میشود و شبکه آموزش داده میشود.
در صورت نیاز به سفارشیسازی بیشتر یا تنظیمات دقیقتر، میتوانید پارامترهای لایه TransposedConvolution2DLayer را تغییر دهید یا لایههای دیگری از جمله BatchNormalizationLayer، DropoutLayer و غیره به معماری شبکه اضافه کنید.
دستور readByIndex:
دستور readByIndex در محیط نرمافزار متلب، یک تابع است که برای خواندن یا دسترسی به یک المان یا مقدار از یک آرایه (مثلاً یک بردار یا یک ماتریس) بر اساس شماره ایندکس (اندیس) آن المان در آرایه استفاده میشود. این دستور به شما امکان میدهد تا بتوانید به سرعت و به راحتی به المانهای خاص آرایه دسترسی پیدا کنید.
برای استفاده از دستور readByIndex بهتر است ابتدا یک آرایه (بردار یا ماتریس) ایجاد کنید و سپس از این دستور برای دسترسی به عناصر آن آرایه استفاده کنید.
در زیر یک نمونه کد متلب برای استفاده از دستور readByIndex آورده شده است:
% ایجاد یک بردار به عنوان مثال
vector = [10, 20, 30, 40, 50];
% خواندن عنصر با اندیس 3 از بردار و چاپ مقدار آن
index = 3;
element = readByIndex(vector, index);
disp(['عنصر با اندیس ', num2str(index), ' برابر با ', num2str(element), ' است.']);
در این کد، یک بردار با اعضای [10, 20, 30, 40, 50] ایجاد شده است. سپس از دستور readByIndex برای خواندن عنصر با اندیس 3 از این بردار استفاده شده و مقدار این عنصر چاپ شده است.
در اینجا ما از readByIndex برای دسترسی به عنصر مورد نظر از بردار استفاده کردهایم.
دستور shuffle:
در MATLAB، دستور shuffle برای تصادفی کردن ترتیب عناصر یک آرایه (vector) یا ماتریس استفاده میشود. این دستور به شما این امکان را میدهد که اجازه دهید عناصر یک بردار یا ماتریس به صورت تصادفی با یکدیگر مخلوط شود.
این کار بسیار مفید است زمانی که نیاز دارید ترتیب اولیه دادههای خود را تغییر دهید، مثلاً برای ایجاد دادههای تصادفی یا بخواهید یک آرایه را به صورت رندم (تصادفی) نمایش دهید.
برای استفاده از دستور shuffle در MATLAB، ابتدا باید بردار یا ماتریس مورد نظر خود را ایجاد کرده و سپس از دستور shuffle برای تصادفی کردن ترتیب آن استفاده کنید.
به عنوان مثال، کد زیر یک بردار ۱ تا ۱۰ ایجاد کرده، ترتیب آن را تصادفی میکند و سپس نمایش میدهد:
% ایجاد بردار از ۱ تا ۱۰
vector = 1:10;
% تصادفی کردن ترتیب بردار
shuffled_vector = shuffle(vector);
% نمایش بردار اصلی و بردار تصادفی شده
disp('بردار اصلی:');
disp(vector);
disp('بردار تصادفی شده:');
disp(shuffled_vector);
با اجرای این کد، شما باید نتیجهٔ بردار اولیه و بردار با ترتیب تصادفی شده را مشاهده کنید.

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