آموزش دیتاساینس و ماشینلرنینگ
Audio
@DSLanders | دیاسلندرز
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥2
شبکههای عصبی پیچشی (Convolutional Neural Networks یا CNNs) با الهام از ساختار بینایی موجودات زنده طراحی شدن و توانایی شگفتانگیزی در استخراج ویژگیهای مهم از تصاویر با حداقل پیشپردازش دارن.
ایدهی اصلی پشت شبکههای عصبی پیچشی به مطالعهی چگونگی پردازش اطلاعات تصویری توسط مغز انسان و سایر موجودات زنده برمیگرده.
این کشف انگیزهای شد برای طراحی مدلهای مصنوعی که میتونن الگوهای مشابهی از دادهها رو با استفاده از فیلترهای پیچشی تشخیص بدن.
یکی از اولین کاربردهای عملی این ایده در شبکه نورونی لایه پیچشی (LeNet) توسط یان لیکان در دهه ۱۹۹۰ معرفی شد.
از نوآوریهای مهم در این حوزه، معرفی تکنیکهایی مثل انتقال یادگیری (Transfer Learning)، تکنیکهای افزایش داده (Data Augmentation) و شبکههای پیچشی عمیق با لایههای باقیمانده (Residual Networks) بود که توانایی مدلها در آموزش عمیقتر و کارآمدتر کردن فرآیند یادگیری رو افزایش داد.
با پیچیدهتر شدن شبکهها، مسائل جدیدی مثل بیشبرازش، نیاز به دادههای آموزشی زیاد و محدودیتهای محاسباتی به وجود اومد.
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👌5❤4👍3👨💻1
❓کوییز شماره ۹۷: در یک شبکهی CNN، اصطلاح کرنل (Kernel) به چه معنی هست و کدوم یک از موارد زیر توصیفکنندهی عملکرد کرنل سوبل (Sobel Kernel) در تصاویره؟
Anonymous Quiz
51%
وزنهایی که به طور تصادفی اولیهسازی شده و در طول آموزش بهروزرسانی میشن. تشخیص لبههای عمودی تصویر
20%
تابع فعالسازی که روی خروجی هر لایه اعمال میشه. تشخیص تغییرات رنگ در سراسر تصویر
8%
مقدار خطای محاسبه شده در هر دور از آموزش. تخمین زاویههای موجود در تصویر
20%
الگوهای اولیه که شبکه قبل از آموزش شناسایی میکنه. ایجاد نقشهی حرارتی از ویژگیهای تصویر
😎5👍3❤2👨💻1
CNN
نوید حقوقی
حوزه بینایی ماشین یکی از حوزههای پرطرفدار هوش مصنوعیه و شبکه عصبی کانولوشنی یا CNN یکی از الگوریتمهای معروفیه که تو این حوزه خیلی استفاده میشه.
#Machine_Learning
#Podcast
@DSLanders | دیاسلندرز
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2🔥2
فیلترها، هستههایی هستن که روی تصاویر ورودی اعمال میشن تا ویژگیهای خاصی رو استخراج کنن. هر فیلتر، یک آرایهای از وزنها (مقادیر) هست که با حرکت روی همه نقاط تصویر، یک نقشه ویژگی (feature map) تولید میکنه. این فرآیند، کانولوشن نام داره و به ما امکان میده تا ویژگیهایی مثل لبهها، بافتها و شکلها رو در تصویر شناسایی کنیم.
- فیلتر Sobel: برای تشخیص لبهها در تصاویر استفاده میشه. این فیلتر از ماتریسهای 3x3 تشکیل شده و لبههای عمودی، افقی و مورب رو در تصویر تشخیص میده.
- فیلتر Gaussian: برای تار کردن تصاویر و حذف نویز استفاده میشه. این فیلتر از ماتریسهای گاوسی تشکیل شده و نویز رو در تصویر با حفظ جزئیات مهم، حذف میکنه.
در طول فرآیند آموزش شبکه، شبکه با دریافت تصاویر ورودی و برچسبهای مربوطه، به طور خودکار فیلترهایی رو یاد میگیره که ویژگیهای مهم تصاویر رو برای تشخیص اشیاء یا طبقهبندی تصاویر استخراج کنن.
استراید، تعداد پیکسلهایی هست که فیلتر بین هر اعمال کانولوشن حرکت میکنه. اگه Stride برابر ۱ باشه، فیلتر بعد از هر اعمال، یک پیکسل حرکت میکنه.
اگه Stride بزرگتر باشه، فیلتر فواصل بیشتری رو پوشش میده، که منجر به کاهش ابعاد نقشه ویژگی میشه؛ در نتیجه به کاهش پیچیدگی محاسباتی و حافظه شبکه کمک شده.
پدینگ، فرآیندیه که در اون حاشیههای اطراف تصویر ورودی با مقادیر خاصی (معمولاً صفر) پر میشن تا ابعاد نقشه ویژگی نهایی تنظیم یا از کاهش شدید ابعاد جلوگیری شه.
- تکنیک Dilated Padding امکان افزایش فیلد دید فیلترها بدون افزایش تعداد پارامترها رو فراهم میکنه. این تکنیک به شبکهها اجازه میده که ویژگیهای موجود در دادهها رو بهتر استخراج کنن.
- در روش پدینگ انعطافپذیر یا Adaptive Padding، پدینگ بر اساس ویژگیهای خاص دادهها یا لایههای شبکه تنظیم میشه تا بهترین نحوه استفاده از پدینگ رو برای استخراج ویژگیها انتخاب کنه.
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👌4👨💻2❤1
❓کوییز شماره ۹۸: استفاده از پدینگ Same در یک لایه کانولوشنی با استراید ۱ چه تاثیری روی ابعاد نقشه ویژگی خروجی داره؟
Anonymous Quiz
13%
ابعاد نقشه ویژگی خروجی کاهش پیدا میکنه.
73%
ابعاد نقشه ویژگی خروجی نسبت به تصویر ورودی بدون تغییر باقی میمونه.
7%
ابعاد نقشه ویژگی خروجی پیدا میکنه.
7%
تنها تعداد کانالهای نقشه ویژگی خروجی تغییر میکنه.
😎4👌2❤1👍1🤔1
آموزش دیتاساینس و ماشینلرنینگ
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥2
ابتدا باید کتابخانههای لازم رو نصب و وارد کنیم. Keras بخشی از TensorFlow هست و با نصب TensorFlow به Keras هم دسترسی داریم.
import tensorflow as tf
from tensorflow.keras import layers, models
یک CNN ساده معمولا شامل لایههای کانولوشن، لایههای فعالساز (Activation)، لایههای ادغام (Pooling) و در نهایت لایههای کاملا متصل (Dense) میشه. برای مثال یک CNN برای شناسایی اعداد دستنویس (MNIST) ایجاد کردیم.
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
مدل بعد از ایجاد باید کامپایل شه و آموزش ببینه. این مرحله شامل تعیین optimizer، تابع هزینه و معیارهایی برای ارزیابی مدله.
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
mnist = tf.keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
train_images, test_images = train_images / 255.0, test_images / 255.0
model.fit(train_images, train_labels, epochs=5)
بعد از آموزش، مدل با دادههای تست ارزیابی و برای پیشبینیهای جدید استفاده میشه.
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('\nTest accuracy:', test_acc)
predictions = model.predict(test_images)
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👌2❤1
کدوم تابع فعالساز معمولاً برای لایههای کانولوشن در CNN استفاده میشه؟
Anonymous Quiz
19%
Sigmoid
6%
Tanh
71%
ReLU
4%
Linear
😎7👍3❤1🤔1
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👌2👍1👨💻1
شبکههای CNN از لایههای مختلفی تشکیل شدن که هر کدوم ویژگیهایی از دادههای ورودی رو استخراج میکنن.
این لایهها عبارتند از لایههای پیچشی (Convolutional Layers)، لایههای تجمعی (Pooling Layers) و لایههای کاملا متصل (Fully Connected Layers).
تعداد پارامترها در یک شبکه CNN تاثیر مستقیمی روی ظرفیت یادگیری و تعداد محاسبات لازم برای آموزش و اجرا دارن. برای محاسبه تعداد پارامترها در یک لایه پیچشی، میشه از فرمول زیر استفاده کرد:
برای مثال، اگه یک لایه کانولوشنی 32 فیلتر با ابعاد 3x3x3 داشته باشه، تعداد کل پارامترها به این صورت میشه: 32×(3×3×3+1)
این فرمول شامل وزنهای فیلترها و یک بایاس برای هر فیلتره. "+1" در فرمول نشوندهنده بایاس اضافه شده به هر فیلتره.
import torch
import torch.nn as nn
conv_layer = nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3, stride=1, padding=1)
print(f"تعداد پارامترها: {sum(p.numel() for p in conv_layer.parameters() if p.requires_grad)}")
با پیشرفت در زمینه یادگیری عمیق، معماریهای پیچیدهتری مثل ResNet، Inception و DenseNet طراحی شدن که با استفاده از روشهایی مثل Skip Connections و ماژولهای پیچیده، دقت و کارایی شبکههای CNN رو بهبود بخشیدن.
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👌6❤3👏2👍1👨💻1
❓کوییز شماره ۱۰۰: فرض کنید یک لایه کانولوشنی در یک شبکه CNN دارای فیلترهایی با اندازه 3x3 هست، تعداد کانالهای ورودی 3 (برای تصاویر RGB) و تعداد فیلترها 64 باشه. تعداد کل پارامترها در این لایه کانولوشنی چنده؟
Anonymous Quiz
25%
576
33%
1792
31%
1728
11%
640
❤4😎3🤔2👍1👌1
در لایههای کانولوشنی، اشتراکگذاری پارامتر (Parameter Sharing) به این معنی هست که یک فیلتر (یا کرنل) وزنهای یکسانی رو در همه موقعیتهایی که روی تصویر ورودی حرکت میکنه به کار میبره.
به جای داشتن وزنهای منحصر به فرد برای هر پیکسل یا منطقه از تصویر، یک مجموعه وزن (یعنی یک فیلتر) به صورت مکرر برای استخراج ویژگیهای محلی از ورودیهای مختلف استفاده میشه.
این رویکرد به شدت تعداد پارامترهای مورد نیاز رو کاهش میده و باعث میشه تا شبکه بتونه از دادههای آموزشی به شکل موثرتری یاد بگیره و همچنین مقاومت بیشتری در برابر بیشبرازش داشته باشه.
مزیت اشتراکگذاری پارامتر همچنین اجازه میده تا ویژگیهای استخراج شده توسط یک فیلتر، به مکان خاصی وابستگی نداشته باشن. یعنی ویژگیهای مشابه در نقاط مختلف تصویر توسط همون فیلتر شناسایی میشن.
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👌1👨💻1
تجسم یا مصورسازی لایههای پنهان (Hidden Layers Visualization)، فرآیندیه که از طریقش میتونیم فعالیتهای داخل شبکه رو مشاهده کنیم.
لایههای پنهان در CNNها شامل مجموعهای از فیلترها یا کرنلها هستن که ویژگیهای مختلفی از تصاویر ورودی استخراج میکنن. در لایههای اولیه، این ویژگیها معمولاً ساده هستن مثل لبهها یا زوایا. در لایههای نهایی، ویژگیهای پیچیدهتر و انتزاعیتری شناسایی میشن.
برای تجسم فعالیت لایهها، روشهای مختلفی وجود داره. یکی از روشهای اولیه، نمایش نقشه ویژگیه (Feature Map) که در این نقشه خروجیهای فعالیت لایههای مختلف برای یک تصویر ورودی نشون داده میشه. در نتیجه میتونیم ببینیم کدوم ویژگیها در هر لایه فعال شدن.
از چالشهای این روش میشه به درک دقیق این مصورسازیها و تفسیرشون اشاره کرد. همچنین، تجسم لایههای عمیقتر که ویژگیهای بسیار انتزاعیتری رو استخراج میکنن، سختتره.
یکی از راهکارها برای حل این چالشها، استفاده از تکنیکهای یادگیری عمیق توضیحپذیر (Explainable AI) هست که تلاش میکنه تا تصمیمات و فرآیندهای داخلی شبکههای عصبی رو قابل فهمتر و شفافتر کنه.
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👌3👍2👨💻1
❓کوییز شماره ۱۰۱: در تکنیک تجسم فیلترها برای درک عملکرد شبکههای کانولوشنی، چگونه میتوان تعیین کرد که یک فیلتر خاص به دنبال چه نوع ویژگیای است؟
Anonymous Quiz
48%
با مقایسه فعالسازهای قبل و بعد از اعمال فیلتر
12%
تنها با تحلیل مقادیر وزندهی داخل فیلتر
32%
با تولید تصاویری که فعالساز مشخصی در اونها فیلتر رو به حداکثر میرسونن
8%
فیلترها تنها در مصورسازیهای سهبعدی قابل تحلیل هستن
😎4❤2👍2🤔2
یادگیری عمیق توضیحپذیر یا Explainable AI رویکردهایی برای افزایش شفافیت و فهمپذیری مدلهای یادگیری ماشین ارائه میده تا تصمیماتشون قابل درک و قابل اعتماد باشن.
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👏1👌1
کتابخانه PyTorch برپایه Tensorهاست که معادلات چندبعدی رو با سرعت بالا روی سختافزارهای مختلف اجرا میکنن. علاوه بر این، PyTorch یک اتوگراد (autograd) قدرتمند برای محاسبهی خودکار گرادیانها ارائه میده که یکی از اجزای مهم در آموزش شبکههای عصبیه.
برای پیادهسازی یک CNN ساده با PyTorch، اول باید ماژولهای مورد نیاز رو وارد کنیم:
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
nn.Module
ارثبری میکنه:class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(1, 20, 5, 1) # پیچشی لایه با 20 کانال خروجی و فیلتر 5x5
self.conv2 = nn.Conv2d(20, 50, 5, 1) # دومین لایه پیچشی
self.fc1 = nn.Linear(4*4*50, 500) # لایه کاملاً متصل با 500 نورون
self.fc2 = nn.Linear(500, 10) # لایه خروجی با 10 نورون برای 10 کلاس
def forward(self, x):
x = F.relu(self.conv1(x))
x = F.max_pool2d(x, 2, 2) # استفاده از Max Pooling
x = F.relu(self.conv2(x))
x = F.max_pool2d(x, 2, 2)
x = x.view(-1, 4*4*50) # تغییر شکل تنسور برای ورودی به لایه کاملاً متصل
x = F.relu(self.fc1(x))
x = self.fc2(x)
return F.log_softmax(x, dim=1)
برای آموزش شبکه، اول یک نمونه از شبکهی عصبی تعریف شده ایجاد و یک بهینهساز مثل Adam یا SGD تنظیم میشه:
model = SimpleCNN()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)
for epoch in range(num_epochs):
for batch_idx, (data, target) in enumerate(train_loader):
optimizer.zero_grad() # پاک کردن گرادیانهای موجود
output = model(data) # محاسبه خروجی شبکه
loss = F.nll_loss(output, target) # محاسبه خطا
loss.backward() # محاسبه گرادیانها
optimizer.step() # بهروزرسانی وزنها
در این مثال،
train_loader
یک تابع بارگذاری دادهست که دادههای آموزشی رو در دستههایی با اندازه مشخص فراهم میکنه. num_epochs
تعداد دفعاتیه که میخوایم دادههای آموزشی رو برای آموزش شبکه عبور بدیم.#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3👨💻1
❓کوییز شماره ۱۰۲: در PyTorch، کدومیک از موارد زیر به درستی توصیف میکنه که چطور یک تصویر RGB 32x32 با استفاده از مدلهای CNN پردازش میشه؟
Anonymous Quiz
14%
تبدیل به یک آرایه یک بعدی 1024 عنصری و بعد اعمال یک لایه Fully Connected
11%
استفاده مستقیم از تصویر به عنوان ورودی برای لایههای Convolutional بدون هیچگونه پیش پردازش
47%
تبدیل تصویر به تنسور PyTorch و اعمال یک سلسله لایههای Convolutional و Pooling
28%
فشردهسازی تصویر به ابعاد کوچکتر برای کاهش پیچیدگی محاسباتی قبل از اعمال لایههای Convolutional
😎5👍4🤔2
#Deep_Learning
#CNNs
@Data_ML | دیتاساینس و ماشین لرنینگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2👌2