Clever coders 💻
#learn_pytorch خب برای بارگزاری داده ها باید از تابع Torchvision.datasets.MNIST() استفاده کنیم خب برای مثال باید این کار را انجام بدهیم Import torch import torchvision train_dataset = torchvision.datasets.MNIST(root="~/torch_datasets",train=True,transform=transform…
#learn_pytorch
خب حالا که کد را دیدی بیاییم کد را تحلیل کنیم
اول اجزای آن را توضیح میدهم=》
root=مسیری که قرار است دیتاست آنجا نصب شود الزامی است
=====================
train=یک بولین هست و نشان میدهد که در آنجا داده ها به انواع آموزش دانلود شود یا نه که اگر True باشد فقط داده های آموزش را دانلود میکند و اگر هم False باشد داده های آزمایشی را دانلود میکند
اجباری نیست ولی اگر باشد بهتر هست.
===========================
transform=برای تنظیم عکس ها به داده و تنسور است
الزامی هست تا باشد.
===========================
download=برای آن هست که داده ها دانلود شود و بارگزار شود
الزامی هست و بولین هست
@torchino_vision
خب حالا که کد را دیدی بیاییم کد را تحلیل کنیم
اول اجزای آن را توضیح میدهم=》
root=مسیری که قرار است دیتاست آنجا نصب شود الزامی است
=====================
train=یک بولین هست و نشان میدهد که در آنجا داده ها به انواع آموزش دانلود شود یا نه که اگر True باشد فقط داده های آموزش را دانلود میکند و اگر هم False باشد داده های آزمایشی را دانلود میکند
اجباری نیست ولی اگر باشد بهتر هست.
===========================
transform=برای تنظیم عکس ها به داده و تنسور است
الزامی هست تا باشد.
===========================
download=برای آن هست که داده ها دانلود شود و بارگزار شود
الزامی هست و بولین هست
@torchino_vision
#learn_pytorch
خب حالا زمانی که ما داریم transform را مساوی با transform میگزاریم یعنی چه؟
اون اولی یکی از توابع داخل بارگزاری داده ها هست
ولی خب چطوری transform را درست کنیم
این گونه است
خب همون طوری که قبلا گفتم با transform آشنا هستین
@torchino_vision
خب حالا زمانی که ما داریم transform را مساوی با transform میگزاریم یعنی چه؟
اون اولی یکی از توابع داخل بارگزاری داده ها هست
ولی خب چطوری transform را درست کنیم
این گونه است
transform = torchvision.transforms.Compose([ torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize((0.5,), (0.5,))])
خب همون طوری که قبلا گفتم با transform آشنا هستین
@torchino_vision
Clever coders 💻
#learn_pytorch خب حالا زمانی که ما داریم transform را مساوی با transform میگزاریم یعنی چه؟ اون اولی یکی از توابع داخل بارگزاری داده ها هست ولی خب چطوری transform را درست کنیم این گونه است transform = torchvision.transforms.Compose([ torchvision.tran…
#learn_pytorch
Normalize باعث میشه که مدل بهتر کار کنه
و این normalize باید بین ۰ تا ۱ باشد
چرا؟
چون تصاویر دیتاست mnist سیاه و سفید هست و مقادیر آنها بین ۰ تا ۱ هست و ما ۰.۵ را انتخاب میکنیم
و زمانی که ما ۰.۵ را انتخاب میکنیم یعنی در اصل داریم مقادیر اعداد پیکسل -۱ تا ۱ هست
خلاصه=》اعدادی که شما ارائه میدهید باید میانگین و انحراف استاندارد مجموعه داده شما باشد
@torchino_vision
Normalize باعث میشه که مدل بهتر کار کنه
و این normalize باید بین ۰ تا ۱ باشد
چرا؟
چون تصاویر دیتاست mnist سیاه و سفید هست و مقادیر آنها بین ۰ تا ۱ هست و ما ۰.۵ را انتخاب میکنیم
و زمانی که ما ۰.۵ را انتخاب میکنیم یعنی در اصل داریم مقادیر اعداد پیکسل -۱ تا ۱ هست
خلاصه=》اعدادی که شما ارائه میدهید باید میانگین و انحراف استاندارد مجموعه داده شما باشد
@torchino_vision
#learn_pytorch
💻
خب به ادامه بحث پروژه میپیوندیم
●این مرحله باید یک دیتا لویدر بسازیم(DataLoader)
●ما در آن مرحله داشتیم داده ها را دانلود میکردیم و اکنون هم میخواهیم که داده ها در دسترس باشند
●برای این کار شما باید از تابع torch.utils.data.DataLoader استفاده کنید
●اینم از کدش
■توضیحات کد
batch_size = 128: این خط کد اندازه دستههای داده را تعیین میکند.
shuffle = True: تعیین میکند که آیا دادهها باید قبل از هر تکرار از حلقه for مخلوط شوند یا خیر
@torchino_vision
💻
خب به ادامه بحث پروژه میپیوندیم
●این مرحله باید یک دیتا لویدر بسازیم(DataLoader)
●ما در آن مرحله داشتیم داده ها را دانلود میکردیم و اکنون هم میخواهیم که داده ها در دسترس باشند
●برای این کار شما باید از تابع torch.utils.data.DataLoader استفاده کنید
●اینم از کدش
import torch
batch_size = 128
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
■توضیحات کد
batch_size = 128: این خط کد اندازه دستههای داده را تعیین میکند.
shuffle = True: تعیین میکند که آیا دادهها باید قبل از هر تکرار از حلقه for مخلوط شوند یا خیر
@torchino_vision
🔥2
#learn_pytorch
●اول کار باید بیاییم و درکی از مدل ها در پایتورچ داشته باشیم
■مدل سازی فرایند خیلی مهم و همین طور هم جالب در پایتورچ است
●از آنجایی که پایتورچ پایتونیک هست و همان طور هم پایتون یک زبان برنامه نویسی شی گرایی است، و بنا بر این هم پایتورچ یک کتابخانه ی شی گرایی است
●برای اول بیایید یک ساختار ساده از مدل در پایتورچ داشته باشیم
این یک نمایی از یک مدل است
اما صبر کنید
پس شبکه های عصبی این مدل کجاست؟
خب دیگه این فقط اسکلت هست و در واقع هیچ کاری انجام نمیدهد🙃
@torchino_vision
●اول کار باید بیاییم و درکی از مدل ها در پایتورچ داشته باشیم
■مدل سازی فرایند خیلی مهم و همین طور هم جالب در پایتورچ است
●از آنجایی که پایتورچ پایتونیک هست و همان طور هم پایتون یک زبان برنامه نویسی شی گرایی است، و بنا بر این هم پایتورچ یک کتابخانه ی شی گرایی است
●برای اول بیایید یک ساختار ساده از مدل در پایتورچ داشته باشیم
import torch
Class Net():
def init(self):
super(Net, self).init()
def forward(self,x):
Pass
این یک نمایی از یک مدل است
اما صبر کنید
پس شبکه های عصبی این مدل کجاست؟
خب دیگه این فقط اسکلت هست و در واقع هیچ کاری انجام نمیدهد🙃
@torchino_vision
#learn_pytorch
چگونه شبکه های عصبی را در مدل قرار دهیم؟
●ما انواع شبکه های عصبی را داریم
که در این جا چندین مثال از چندین شبکه عصبی میگوییم
👇
شبکه های عصبی کاملاً متصل (FCN): ساده ترین نوع شبکه عصبی، که از یک سری لایه های کاملاً متصل تشکیل شده است
این شبکه ها برای حل طیف گسترده ای از مسائل از جمله طبقه بندی، رگرسیون و یادگیری ماشین تقویتی استفاده می شوند.
شبکه های عصبی بازگشتی (RNN): شبکه هایی که می توانند اطلاعات را در طول زمان پردازش کنند. این شبکه ها برای حل مسائلی مانند پردازش زبان طبیعی، تشخیص گفتار و ترجمه ماشینی استفاده می شوند.
شبکه های عصبی کانولوشنی (CNN): شبکه هایی که برای پردازش داده های تصویری طراحی شده اند. این شبکه ها برای مسائلی مانند طبقه بندی تصویر، تشخیص شیء و بازیابی تصویر استفاده می شوند.
شبکه های عصبی عمیق (DNN): شبکه هایی که از چندین لایه تشکیل شده اند. این شبکه ها برای حل مسائل پیچیده ای که با شبکه های عصبی ساده قابل حل نیستند، استفاده می شوند
■خب ما در این پروژه از شبکه ی cnnاستفاده میکنیم
●شما باید بدانید که چطوری و کی و کجا از چه شبکه ای استفاده کنین
@torchino_vision
چگونه شبکه های عصبی را در مدل قرار دهیم؟
●ما انواع شبکه های عصبی را داریم
که در این جا چندین مثال از چندین شبکه عصبی میگوییم
👇
شبکه های عصبی کاملاً متصل (FCN): ساده ترین نوع شبکه عصبی، که از یک سری لایه های کاملاً متصل تشکیل شده است
این شبکه ها برای حل طیف گسترده ای از مسائل از جمله طبقه بندی، رگرسیون و یادگیری ماشین تقویتی استفاده می شوند.
شبکه های عصبی بازگشتی (RNN): شبکه هایی که می توانند اطلاعات را در طول زمان پردازش کنند. این شبکه ها برای حل مسائلی مانند پردازش زبان طبیعی، تشخیص گفتار و ترجمه ماشینی استفاده می شوند.
شبکه های عصبی کانولوشنی (CNN): شبکه هایی که برای پردازش داده های تصویری طراحی شده اند. این شبکه ها برای مسائلی مانند طبقه بندی تصویر، تشخیص شیء و بازیابی تصویر استفاده می شوند.
شبکه های عصبی عمیق (DNN): شبکه هایی که از چندین لایه تشکیل شده اند. این شبکه ها برای حل مسائل پیچیده ای که با شبکه های عصبی ساده قابل حل نیستند، استفاده می شوند
■خب ما در این پروژه از شبکه ی cnnاستفاده میکنیم
●شما باید بدانید که چطوری و کی و کجا از چه شبکه ای استفاده کنین
@torchino_vision
#learn_pytorch
خب پس مدل ما هم باید همچین کدی داشته باشد
خب پس مدل ما هم باید همچین کدی داشته باشد
class SimpleNN(nn.Module):@torchino_vision
def __init__(self):
super(SimpleNN, self).__init__()
self.flatten = nn.Flatten()
self.fc1 = nn.Linear(28 * 28, 128)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = self.flatten(x)
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
Clever coders 💻
#learn_pytorch خب پس مدل ما هم باید همچین کدی داشته باشد class SimpleNN(nn.Module): def __init__(self): super(SimpleNN, self).__init__() self.flatten = nn.Flatten() self.fc1 = nn.Linear(28 * 28, 128) self.relu = nn.ReLU()…
#learn_pytorch
توضیح کد
کلاس SimpleNN: این کلاس یک کلاس شبکه عصبی ساده را تعریف می کند.
init(self):
این تابع سازنده کلاس است. این تابع دو لایه کاملاً متصل را ایجاد می کند:
self.flatten:
این لایه ورودی را به یک بردار یک بعدی تبدیل می کند.
self.fc1:
این لایه یک تابع خطی را اعمال می کند.
self.relu:
این لایه یک تابع فعال سازی ReLU را اعمال می کند.
self.fc2:
این لایه یک تابع خطی دیگر را اعمال می کند.
forward(self, x):** این تابع خروجی شبکه را برای یک ورودی خاص محاسبه می کند. این تابع به ترتیب لایه های شبکه را اعمال می کند.
لایه ورودی: این لایه ورودی را به یک بردار یک بعدی تبدیل می کند.
لایه کاملاً متصل: این لایه یک تابع خطی را اعمال می کند. تابع خطی یک تابع ریاضی است که یک بردار ورودی را به یک بردار خروجی تبدیل می کند.
تابع فعال سازی: تابع فعال سازی یک تابع ریاضی است که به هر گره در شبکه اجازه می دهد تا فقط یک مقدار بین 0 و 1 را داشته باشد. این برای جلوگیری از اشباع شدن شبکه و بهبود عملکرد آن استفاده می شود.
@torchino_vision
توضیح کد
کلاس SimpleNN: این کلاس یک کلاس شبکه عصبی ساده را تعریف می کند.
init(self):
این تابع سازنده کلاس است. این تابع دو لایه کاملاً متصل را ایجاد می کند:
self.flatten:
این لایه ورودی را به یک بردار یک بعدی تبدیل می کند.
self.fc1:
این لایه یک تابع خطی را اعمال می کند.
self.relu:
این لایه یک تابع فعال سازی ReLU را اعمال می کند.
self.fc2:
این لایه یک تابع خطی دیگر را اعمال می کند.
forward(self, x):** این تابع خروجی شبکه را برای یک ورودی خاص محاسبه می کند. این تابع به ترتیب لایه های شبکه را اعمال می کند.
لایه ورودی: این لایه ورودی را به یک بردار یک بعدی تبدیل می کند.
لایه کاملاً متصل: این لایه یک تابع خطی را اعمال می کند. تابع خطی یک تابع ریاضی است که یک بردار ورودی را به یک بردار خروجی تبدیل می کند.
تابع فعال سازی: تابع فعال سازی یک تابع ریاضی است که به هر گره در شبکه اجازه می دهد تا فقط یک مقدار بین 0 و 1 را داشته باشد. این برای جلوگیری از اشباع شدن شبکه و بهبود عملکرد آن استفاده می شود.
@torchino_vision
#learn_pytorch
مفاهیم مهم
nn.Linear(28 * 28, 128):
این لایه یک لایه خطی است که تعداد ورودیها 28*28 است (چون تصاویر MNIST ابعاد 28x28 دارند) و تعداد نورونها (یا واحدهای خروجی) در این لایه برابر با 128 است.
اگر نیاز دارید که این تعدادها تغییر کند، میتوانید آنها را با مقادیر دلخواه خود جایگزین کنید. به عنوان مثال، اگر میخواهید تعداد نورونها در این لایه 256 باشد، میتوانید خط را به شکل زیر تغییر دهید:
پس همیشه برای هر دیتاستی هر عدد و هر تعداد نورون جواب گو نیست و شاید به مشکل بر بخوريد
@torchino_vision
مفاهیم مهم
nn.Linear(28 * 28, 128):
این لایه یک لایه خطی است که تعداد ورودیها 28*28 است (چون تصاویر MNIST ابعاد 28x28 دارند) و تعداد نورونها (یا واحدهای خروجی) در این لایه برابر با 128 است.
اگر نیاز دارید که این تعدادها تغییر کند، میتوانید آنها را با مقادیر دلخواه خود جایگزین کنید. به عنوان مثال، اگر میخواهید تعداد نورونها در این لایه 256 باشد، میتوانید خط را به شکل زیر تغییر دهید:
nn.Linear(28 * 28, 256)
پس همیشه برای هر دیتاستی هر عدد و هر تعداد نورون جواب گو نیست و شاید به مشکل بر بخوريد
@torchino_vision
#learn_pytorch
خب دوستان ادامه پروژه
●حالا که مدل را ساختیم باید یک تابع خطا و بهینه سازی بسازیم
■اصلا تابع خطا و بهینه سازی چیه؟
■تابع خطا و بهینه ساز دو مفهوم مهم در یادگیری عمیق هستند. تابع خطا یا تابع هزینه یک معیار برای اندازه گیری عملکرد مدل است. تابع خطا مقداری را محاسبه می کند که نشان می دهد که چقدر پیش بینی مدل با داده های واقعی متفاوت است. هدف از آموزش مدل کاهش مقدار تابع خطا است. بهینه ساز یک الگوریتم است که پارامترهای مدل را به روز می کند تا تابع خطا را کمینه کند. بهینه ساز می تواند از روش های مختلفی مانند گرادیان نزولی، مومنتوم، آدام و غیره استفاده کند.
=============================
خب حالا برای این مدل چگونه همچین تابعی بسازیم
@torchino_vision
خب دوستان ادامه پروژه
●حالا که مدل را ساختیم باید یک تابع خطا و بهینه سازی بسازیم
■اصلا تابع خطا و بهینه سازی چیه؟
■تابع خطا و بهینه ساز دو مفهوم مهم در یادگیری عمیق هستند. تابع خطا یا تابع هزینه یک معیار برای اندازه گیری عملکرد مدل است. تابع خطا مقداری را محاسبه می کند که نشان می دهد که چقدر پیش بینی مدل با داده های واقعی متفاوت است. هدف از آموزش مدل کاهش مقدار تابع خطا است. بهینه ساز یک الگوریتم است که پارامترهای مدل را به روز می کند تا تابع خطا را کمینه کند. بهینه ساز می تواند از روش های مختلفی مانند گرادیان نزولی، مومنتوم، آدام و غیره استفاده کند.
=============================
خب حالا برای این مدل چگونه همچین تابعی بسازیم
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
@torchino_vision
Clever coders 💻
#learn_pytorch خب دوستان ادامه پروژه ●حالا که مدل را ساختیم باید یک تابع خطا و بهینه سازی بسازیم ■اصلا تابع خطا و بهینه سازی چیه؟ ■تابع خطا و بهینه ساز دو مفهوم مهم در یادگیری عمیق هستند. تابع خطا یا تابع هزینه یک معیار برای اندازه گیری عملکرد مدل است.…
#learn_pytorch
توضیحات کد
■step 1
criterion = nn.CrossEntropyLoss()
یک شیء از کلاس
nn.CrossEntropyLoss
را ایجاد می کند و آن را به متغیر criterion اختصاص می دهد. این کلاس یک تابع خطا است که برای مسائل طبقه بندی چند کلاسه مناسب است. این تابع خطا مقداری را محاسبه می کند که نشان می دهد که چقدر پیش بینی مدل با داده های واقعی متفاوت است. هدف از آموزش مدل کاهش مقدار تابع خطا است.
■step 2
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
یک شیء از کلاس
torch.optim.SGD
را ایجاد می کند و آن را به متغیر optimizer اختصاص می دهد. این کلاس یک بهینه ساز است که از روش گرادیان نزولی با مومنتوم استفاده می کند. گرادیان نزولی یک الگوریتم است که پارامترهای مدل را به روز می کند تا تابع خطا را کمینه کند. مومنتوم یک تکنیک است که به الگوریتم کمک می کند تا از گیر کردن در نقاط ثابت یا حداقل محلی جلوگیری کند و سرعت یادگیری را افزایش دهد. پارامترهای این کلاس عبارتند از:👇👇👇
model.parameters() که یک تکرار شونده از پارامترهای مدل است که قرار است به روز شوند.
lr=0.01 که نرخ یادگیری را مشخص می کند. نرخ یادگیری یک عدد مثبت کوچک است که تعیین می کند که چقدر پارامترهای مدل در هر گام بهینه سازی تغییر کنند.
momentum=0.9 که مقدار مومنتوم را مشخص می کند. مومنتوم یک عدد بین صفر و یک است که تعیین می کند که چقدر گرادیان های قبلی در محاسبه گرادیان فعلی تاثیر دارند.
نکته
قبل از این کد شما بایستی مدل خود را تعریف کنید =》model = SimpleNN
@torchino_vision
توضیحات کد
■step 1
criterion = nn.CrossEntropyLoss()
یک شیء از کلاس
nn.CrossEntropyLoss
را ایجاد می کند و آن را به متغیر criterion اختصاص می دهد. این کلاس یک تابع خطا است که برای مسائل طبقه بندی چند کلاسه مناسب است. این تابع خطا مقداری را محاسبه می کند که نشان می دهد که چقدر پیش بینی مدل با داده های واقعی متفاوت است. هدف از آموزش مدل کاهش مقدار تابع خطا است.
■step 2
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
یک شیء از کلاس
torch.optim.SGD
را ایجاد می کند و آن را به متغیر optimizer اختصاص می دهد. این کلاس یک بهینه ساز است که از روش گرادیان نزولی با مومنتوم استفاده می کند. گرادیان نزولی یک الگوریتم است که پارامترهای مدل را به روز می کند تا تابع خطا را کمینه کند. مومنتوم یک تکنیک است که به الگوریتم کمک می کند تا از گیر کردن در نقاط ثابت یا حداقل محلی جلوگیری کند و سرعت یادگیری را افزایش دهد. پارامترهای این کلاس عبارتند از:👇👇👇
model.parameters() که یک تکرار شونده از پارامترهای مدل است که قرار است به روز شوند.
lr=0.01 که نرخ یادگیری را مشخص می کند. نرخ یادگیری یک عدد مثبت کوچک است که تعیین می کند که چقدر پارامترهای مدل در هر گام بهینه سازی تغییر کنند.
momentum=0.9 که مقدار مومنتوم را مشخص می کند. مومنتوم یک عدد بین صفر و یک است که تعیین می کند که چقدر گرادیان های قبلی در محاسبه گرادیان فعلی تاثیر دارند.
نکته
قبل از این کد شما بایستی مدل خود را تعریف کنید =》model = SimpleNN
@torchino_vision
🔥2
#learn_pytorch
■آموزش مدل یکی از جالب ترین قسمت ها است
خب اول کد را ببینیم و بعد هم توضیحات را کامل کنیم
■آموزش مدل یکی از جالب ترین قسمت ها است
خب اول کد را ببینیم و بعد هم توضیحات را کامل کنیم
epochs = 10@torchino_vision
# حلقه آموزشی
for epoch in range(epochs):
# مقداردهی اولیه خطا و دقت
train_loss = 0.0
train_acc = 0.0
# حالت آموزشی مدل
model.train()
# برای هر دسته از داده های آموزشی
for images, labels in train_loader:
# صفر کردن گرادیان ها
optimizer.zero_grad()
# پیش بینی مدل
outputs = model(images)
# محاسبه خطا
loss = criterion(outputs, labels)
# محاسبه گرادیان ها
loss.backward()
# به روز رسانی پارامترها
optimizer.step()
# اضافه کردن خطا به مجموع خطا
train_loss += loss.item()
# محاسبه دقت
_, preds = torch.max(outputs, 1)
train_acc += torch.sum(preds == labels).item()
# محاسبه میانگین خطا و دقت
train_loss = train_loss / len(train_loader)
train_acc = train_acc / len(train_dataset)
# چاپ نتایج
print(f"Epoch {epoch+1}, Train Loss: {train_loss:.4f}, Train Accuracy: {train_acc:.4f}")
🔥2
Clever coders 💻
#learn_pytorch ■آموزش مدل یکی از جالب ترین قسمت ها است خب اول کد را ببینیم و بعد هم توضیحات را کامل کنیم epochs = 10 # حلقه آموزشی for epoch in range(epochs): # مقداردهی اولیه خطا و دقت train_loss = 0.0 train_acc = 0.0 # حالت آموزشی مدل…
#learn_pytorch
■توضیحات کد
-
یک متغیر را با مقدار 10 ایجاد می کند و آن را به نام
=====================
-
یک حلقه for را شروع می کند که برای هر مقدار از 0 تا 9 (که 10 عدد هستند) یک بار اجرا می شود. این حلقه برای اجرای مدل بر روی داده های آموزشی به تعداد دوره های آموزشی است. متغیر
=======================
-
یک متغیر را با مقدار 0.0 ایجاد می کند و آن را به نام
=======================
-
یک متغیر را با مقدار 0.0 ایجاد می کند و آن را به نام
=======================
-
یک متد را از شیء
=======================
-
یک حلقه for دیگر را شروع می کند که برای هر دسته از داده های آموزشی یک بار اجرا می شود. این حلقه برای اجرای مدل بر روی هر دسته از داده های آموزشی است. متغیرهای
=======================
-
یک متد را از شیء
========================
-
یک متد را از شیء
=======================
-
یک متد را از شیء
=======================
-
یک متد را از شیء
=======================
-
یک متد را از شیء
=======================
-
یک عبارت را اجرا می کند که مقدار خطا را به مجموع خطا اضافه می کند. متد
یک متد از شیء
است که مقدار عددی اسکالر را از تانسور خطا استخراج می کند.
=======================
-
یک عبارت را اجرا می کند که پیش بینی های مدل را به برچسب های عددی تبدیل می کند. تابع
یک تابع از کتابخانه
اگر جایی را کم و زیاد یا اشتباه گفتم بگید🌺
@torchino_vision
■توضیحات کد
-
epochs = 10
یک متغیر را با مقدار 10 ایجاد می کند و آن را به نام
epochs
می نامد. این متغیر تعداد دوره های آموزشی را مشخص می کند. یک دوره آموزشی به معنای اجرای مدل بر روی تمام داده های آموزشی است.=====================
-
for epoch in range(epochs):
یک حلقه for را شروع می کند که برای هر مقدار از 0 تا 9 (که 10 عدد هستند) یک بار اجرا می شود. این حلقه برای اجرای مدل بر روی داده های آموزشی به تعداد دوره های آموزشی است. متغیر
epoch
شمارنده حلقه است که نشان می دهد که چندمین دوره آموزشی در حال اجرا است.=======================
-
train_loss = 0.0
یک متغیر را با مقدار 0.0 ایجاد می کند و آن را به نام
train_loss
می نامد. این متغیر مجموع خطای مدل بر روی داده های آموزشی را نگه می دارد.=======================
-
train_acc = 0.0
یک متغیر را با مقدار 0.0 ایجاد می کند و آن را به نام
train_acc
می نامد. این متغیر مجموع دقت مدل بر روی داده های آموزشی را نگه می دارد.=======================
-
model.train()
یک متد را از شیء
model
فراخوانی می کند که حالت مدل را به حالت آموزشی تغییر می دهد. این متد باعث می شود که مدل از برخی تکنیک های مانند دراپ آوت که برای جلوگیری از بیش برازش مفید هستند استفاده کند.=======================
-
for images, labels in train_loader:
یک حلقه for دیگر را شروع می کند که برای هر دسته از داده های آموزشی یک بار اجرا می شود. این حلقه برای اجرای مدل بر روی هر دسته از داده های آموزشی است. متغیرهای
images
و labels
داده های ورودی و خروجی مورد نظر مدل را نگه می دارند.=======================
-
optimizer.zero_grad()
یک متد را از شیء
optimizer
فراخوانی می کند که گرادیان های پارامترهای مدل را صفر می کند. این متد باعث می شود که گرادیان های قبلی در محاسبه گرادیان های فعلی تاثیر نگذارند.========================
-
outputs = model(images)
یک متد را از شیء
model
فراخوانی می کند که داده های ورودی را به عنوان پارامتر می گیرد و پیش بینی مدل را به عنوان خروجی می دهد. این متد مدل را بر روی داده های ورودی اجرا می کند و یک تانسور از احتمالات هر کلاس را بر می گرداند. متغیر outputs
این تانسور را نگه می دارد.=======================
-
loss = criterion(outputs, labels)
یک متد را از شیء
criterion
فراخوانی می کند که پیش بینی مدل و داده های واقعی را به عنوان پارامترها می گیرد و مقدار خطا را به عنوان خروجی می دهد. این متد تابع خطا را بر روی پیش بینی مدل و داده های واقعی محاسبه می کند و یک عدد اسکالر را بر می گرداند. متغیر loss
این عدد را نگه می دارد.=======================
-
loss.backward()
یک متد را از شیء
loss
فراخوانی می کند که گرادیان های پارامترهای مدل را محاسبه می کند. این متد با استفاده از قاعده زنجیره ای گرادیان های مربوط به هر پارامتر مدل را بر اساس تابع خطا مشتق می کند و آن ها را در خاصیت grad
هر پارامتر ذخیره می کند.=======================
-
optimizer.step()
یک متد را از شیء
optimizer
فراخوانی می کند که پارامترهای مدل را به روز می کند. این متد با استفاده از گرادیان های محاسبه شده و نرخ یادگیری و مومنتوم، پارامترهای مدل را به سمت جهتی که تابع خطا را کمینه می کند حرکت می دهد.=======================
-
train_loss += loss.item()
یک عبارت را اجرا می کند که مقدار خطا را به مجموع خطا اضافه می کند. متد
item()
یک متد از شیء
loss
است که مقدار عددی اسکالر را از تانسور خطا استخراج می کند.
=======================
-
_, preds = torch.max(outputs, 1)
یک عبارت را اجرا می کند که پیش بینی های مدل را به برچسب های عددی تبدیل می کند. تابع
torch.max()
یک تابع از کتابخانه
torch
است که بیشترین مقدار و شاخص آن را در یک تانسور بر می گرداند. پارامتر 1
نشان می دهد که بیشترین مقدار در بعد دوم تانسور (که نشان دهنده کلاس هاست) محاسبه شاگر جایی را کم و زیاد یا اشتباه گفتم بگید🌺
@torchino_vision
🔥3
#learn_pytorch
دیگر آخرین قدم را باید برای اتمام پروژه برداریم😉
■خب ما تا کنون کلی کار انجام دادیم و حالا الان نوبت میرسه به ارزیابی مدل
■ارزیابی مدل به قسمتی میگویند که مدل خودمان را چک میکنیم تا ببین درصد خطا و یا بازدهی آن چه قدر است و آیا توانسته است که بخوبی مدل را آموزش دهد یا خیر.
مثل همیشه اول نمایی از کد را داشته باشیم و بعد هم بریم سراغ توضیحات کد
=========================
correct = 0
total = 0
این متغیرها برای حساب دقت نهایی مدل استفاده میشوند. correct تعداد پیشبینیهای صحیح و total کل تعداد نمونهها را نگه میدارند
==========================
==========================
torch.max(outputs.data, 1)
برچسب پیشبینی شده توسط مدل را برمیگرداند. سپس با مقایسه آن با برچسبهای واقعی، تعداد پیشبینیهای صحیح و کل تعداد نمونهها آپدیت میشوند
==========================
=========================
@Torchino_vision
دیگر آخرین قدم را باید برای اتمام پروژه برداریم😉
■خب ما تا کنون کلی کار انجام دادیم و حالا الان نوبت میرسه به ارزیابی مدل
■ارزیابی مدل به قسمتی میگویند که مدل خودمان را چک میکنیم تا ببین درصد خطا و یا بازدهی آن چه قدر است و آیا توانسته است که بخوبی مدل را آموزش دهد یا خیر.
مثل همیشه اول نمایی از کد را داشته باشیم و بعد هم بریم سراغ توضیحات کد
# ارزیابی مدلخب حالا ببینیم که این کد چطوری کار میکند👇👇
model.eval()
correct = 0
total = 0
with torch.no_grad():
for batch in test_loader:
images, labels = batch
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
accuracy = correct / total
print(f'Test Accuracy: {accuracy * 100:.2f}%')
model.eval()با این دستور، مدل به حالت ارزیابی تنظیم میشود. این حالت تأثیری در عملکرد لایههای مختلف مدل دارد (برای مثال، برخی از لایهها مانند Dropout در حالت ارزیابی غیرفعال میشوند).
=========================
correct = 0
total = 0
این متغیرها برای حساب دقت نهایی مدل استفاده میشوند. correct تعداد پیشبینیهای صحیح و total کل تعداد نمونهها را نگه میدارند
==========================
with torch.no_grad():در اینجا، با استفاده از اطمینان حاصل میشود که محاسبات گرادیان برای این مرحله انجام نمیشود (زیرا در حالت ارزیابی نیازی به آپدیت گرادیان نیست). برای هر دسته از دادههای تست، مدل پیشبینیهای خود را ایجاد میکند
for batch in test_loader:
images, labels = batch
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
==========================
_, predicted = torch.max(outputs.data, 1)این مراحل برای هر دسته از دادههای تست اجرا میشوند.
total += labels.size(0)
correct += (predicted == labels).sum().item()
torch.max(outputs.data, 1)
برچسب پیشبینی شده توسط مدل را برمیگرداند. سپس با مقایسه آن با برچسبهای واقعی، تعداد پیشبینیهای صحیح و کل تعداد نمونهها آپدیت میشوند
==========================
accuracy = correct / totalدر انتها، با تقسیم تعداد پیشبینیهای صحیح بر کل تعداد نمونهها، دقت نهایی مدل محاسبه میشود
=========================
accuracy = correct / totalو اینقطعهکد دقت نهایی ارزیابی مدل را چاپ میکند
print(f'Test Accuracy: {accuracy * 100:.2f}%')
@Torchino_vision
🔥3❤1👍1
#learn_pytorch
اگه شما میخواید که روند پردازش تصویر ساده که با لایه های کانولوشن اجرا میشه را ببینید و درک کلی از لایه های کانولوشن داشته باشین
میتونید به این وب سایت سر بزنید 👇
CNN Explanier
🔥@Clevercoders
اگه شما میخواید که روند پردازش تصویر ساده که با لایه های کانولوشن اجرا میشه را ببینید و درک کلی از لایه های کانولوشن داشته باشین
میتونید به این وب سایت سر بزنید 👇
CNN Explanier
🔥@Clevercoders
poloclub.github.io
CNN Explainer
An interactive visualization system designed to help non-experts learn about Convolutional Neural Networks (CNNs).
⚡2🔥1👌1
یکسری دستورات هستن که کمتر توی آموزشها درموردشون صحبت میشه، چون رایج نیستن. ولی وقتی موقعش برسه میتونن کارمون رو خیلی راحت کنن.
تصور کن یک آرایه دو بعدی داری که یکسری درایههاش nan هستن. حالا تو میخوای میانگین و انحراف معیار این آرایه دوبعدی رو حساب کنی. به نظرت باید چیکار کرد؟ اول درموردش فکر کن و بعد بخش اسپویلر رو ببین...
اگه به این فکر میکنی که مقادیر nan رو پیدا کنی و با صفر جایگزین کنی، متاسفانه اشتباه کردی. باید جوری میانگین و انحراف بگیریم که انگار اصلا nan وجود نداره. وقتی صفر کنیم یعنی اونها رو آدم حساب کردیم! 😁
خب به نظر میرسه که باید دو تا تابع برای محاسبه میانگین و انحراف بنویسیم که احتمالا سه چهار خطی کد و یکم هم فکر کردن نیاز داره...
اما این موقعیت همون موقعیتی هست که دستورهای آماده نهچندان رایج میتونن کمکمون کنن. دستورهای np.nanmean و np.nanstd به راحتی میانگین و انحراف رو بدون nan حساب میکنن. به همین سادگی! 😉
#AI
#learn_pytorch
#method
💻@Clevercoders
تصور کن یک آرایه دو بعدی داری که یکسری درایههاش nan هستن. حالا تو میخوای میانگین و انحراف معیار این آرایه دوبعدی رو حساب کنی. به نظرت باید چیکار کرد؟ اول درموردش فکر کن و بعد بخش اسپویلر رو ببین...
خب به نظر میرسه که باید دو تا تابع برای محاسبه میانگین و انحراف بنویسیم که احتمالا سه چهار خطی کد و یکم هم فکر کردن نیاز داره...
اما این موقعیت همون موقعیتی هست که دستورهای آماده نهچندان رایج میتونن کمکمون کنن. دستورهای np.nanmean و np.nanstd به راحتی میانگین و انحراف رو بدون nan حساب میکنن. به همین سادگی! 😉
#AI
#learn_pytorch
#method
💻@Clevercoders
👏4❤1😢1
کمبود GPU RAM؟!
بیایید یک راهکار ساده و فوقالعاد کارآمد به شما یاد بدهیم...
کم بودن GPU RAM میتواند شما را در انتخاب سایز شبکه عصبی و همچنین بچساز محدود کند. اما راهکارهای مختلفی وجود دارد که شما از همان RAM کم نهایت استفاده را ببرید. یکی از راهکارها آموزش مدل با Float16 هست!
بهصورت پیشفرض، در پایتورچ دادهها و مدلها بر پایه Float32 هستند. اما با تغییراتی کوچک در کد، میتوان دادهها و مدلها را بر پایه Float16 تعریف کرد و تا 50 درصد از مصرف RAM صرفهجویی کرد! شاید باورتان نشود! این راهکار هم مصرف RAM را کاهش میدهد و هم در بسیاری از مسائل افت قابل توجهی در عملکرد (مثلا دقت) ایجاد نمیکند. حالا که مصرف RAM کمتر شده، میتوانید هم مدل بزرگتری داشته باشید و هم بچسایز را بزرگتر کنید.
در پایتورچ چگونه میتوان از این ترفند استفاده کرد؟
در لینک زیر، خیلی ساده این ترفند توضیح داده شده است:
https://pytorch.org/tutorials/recipes/recipes/amp_recipe.html
#learn_pytorch
#pytorch
#AI
💻@Clevercoders
بیایید یک راهکار ساده و فوقالعاد کارآمد به شما یاد بدهیم...
کم بودن GPU RAM میتواند شما را در انتخاب سایز شبکه عصبی و همچنین بچساز محدود کند. اما راهکارهای مختلفی وجود دارد که شما از همان RAM کم نهایت استفاده را ببرید. یکی از راهکارها آموزش مدل با Float16 هست!
بهصورت پیشفرض، در پایتورچ دادهها و مدلها بر پایه Float32 هستند. اما با تغییراتی کوچک در کد، میتوان دادهها و مدلها را بر پایه Float16 تعریف کرد و تا 50 درصد از مصرف RAM صرفهجویی کرد! شاید باورتان نشود! این راهکار هم مصرف RAM را کاهش میدهد و هم در بسیاری از مسائل افت قابل توجهی در عملکرد (مثلا دقت) ایجاد نمیکند. حالا که مصرف RAM کمتر شده، میتوانید هم مدل بزرگتری داشته باشید و هم بچسایز را بزرگتر کنید.
در پایتورچ چگونه میتوان از این ترفند استفاده کرد؟
در لینک زیر، خیلی ساده این ترفند توضیح داده شده است:
https://pytorch.org/tutorials/recipes/recipes/amp_recipe.html
#learn_pytorch
#pytorch
#AI
💻@Clevercoders
👌4👍1👏1
سلام به دوستان عزیز
امید وارم حالتون خوب باشه
یک کتابخانه ی دیگه آوردم مخصوص افرادی که داخل پایتورچ کار میکنن
اسمش torchinfo هست
که میتونی با دستور زیر در ترمینال خودت نصب کنید
خب حالا میپرسید که چی کار میکنه؟
#learn_pytorch
🔥@Clevercoders
امید وارم حالتون خوب باشه
یک کتابخانه ی دیگه آوردم مخصوص افرادی که داخل پایتورچ کار میکنن
اسمش torchinfo هست
که میتونی با دستور زیر در ترمینال خودت نصب کنید
pip install torchinfo
خب حالا میپرسید که چی کار میکنه؟
این کتابخانه تقریبا تمام اطلاعات را در رابطه با مدلی که در پایتورچ ساخته شده میده
مثل تعداد پارامتر ها و ...
#learn_pytorch
🔥@Clevercoders
❤5🔥1
Udemy – PyTorch for Deep Learning in 2023: Zero to Mastery 2023-6
دوره آوردم براتون چه دوره ای
اینو بخونی تقریبا برای خودت متخصصی میشی داخل پایتورچ (به شرطی که تلاش و اراده خودت را کنی و فقط به دیدن فیلم اکتفا نکنید )
آنچه در این دوره آموزشی فرا خواهید گرفت:
نصب، راه اندازی و پیکربندی اولیه PyTorch
توسعه اولین مدل های یادگیری عمیق با PyTorch
مزیت ها و پتانسیل های کتابخانه پای تورچ در حوزه های هوش مصنوعی، یادگیری ماشین و یادگیری عمیق
استفاده از یادگیری عمیق در اپلیکیشن ها و سیستم های مختلف به صورت یکپارچه
طراحی، توسعه و بهره برداری از الگوریتم های یادگیری ماشین با زبان برنامه نویسی پایتون
و......
سطح آموزش: متوسط
تعداد دروس: 358
مدت زمان آموزش: 52 ساعت و 14 دقیقه 😵💫
دارای زیرنویس انگلیسی
پ.ن : این دوره جز BestSeller های یودمی هست .
از طریق لینک زیر میتونی ببینیش
تازه رایگان هم هست
دیگه چی میخوای🌱
Learn_pyrorch_zero_to_mastry_free_course
#pytorch
#learn_pytorch
💻@Clevercoders
دوره آوردم براتون چه دوره ای
اینو بخونی تقریبا برای خودت متخصصی میشی داخل پایتورچ (به شرطی که تلاش و اراده خودت را کنی و فقط به دیدن فیلم اکتفا نکنید )
آنچه در این دوره آموزشی فرا خواهید گرفت:
نصب، راه اندازی و پیکربندی اولیه PyTorch
توسعه اولین مدل های یادگیری عمیق با PyTorch
مزیت ها و پتانسیل های کتابخانه پای تورچ در حوزه های هوش مصنوعی، یادگیری ماشین و یادگیری عمیق
استفاده از یادگیری عمیق در اپلیکیشن ها و سیستم های مختلف به صورت یکپارچه
طراحی، توسعه و بهره برداری از الگوریتم های یادگیری ماشین با زبان برنامه نویسی پایتون
و......
سطح آموزش: متوسط
تعداد دروس: 358
مدت زمان آموزش: 52 ساعت و 14 دقیقه 😵💫
دارای زیرنویس انگلیسی
پ.ن : این دوره جز BestSeller های یودمی هست .
از طریق لینک زیر میتونی ببینیش
تازه رایگان هم هست
دیگه چی میخوای🌱
Learn_pyrorch_zero_to_mastry_free_course
#pytorch
#learn_pytorch
💻@Clevercoders
دانلود رایگان نرم افزار
دانلود Udemy - PyTorch for Deep Learning in 2023: Zero to Mastery 2023-6
دانلود Udemy - PyTorch for Deep Learning in 2023: Zero to Mastery 2023-6 . دوره آموزش عملی و قدم به قدم کتابخانه پایتورچ برای یادگیری عمیق
❤4🙏2👍1
سلام به علاقه مندان ریاضی و هوش مصنوعی🌱
امروز میخوام در رابطه با گرادیان (در هوش مصنوعی) صحبت کنمکه اصلا چیه؟🧐
خب ساده ترین توضیح برای گرادیان اینجاست😉👇
خب فرض کن که داخل هوای مه آلود که فقط میتونی یک سانتیمتر از اطرافت را ببینی میخوای به قله ی یک کوه برسی
خبحالا گرادیان میاد و ارتفاع را محاسبه میکنه و میکه که در کدوم جهت حرکت کن
و شما میتونید یک متر حرکت کنید و یا اینکه ۱۰ متر حرکت کنید.
ولی اگه ۱۰۰ متر حرکت کنید ممکنه قله را رد کنی و اصلا برید اونطرف کوه
ولی بازم اگه یک سانت یک سانت حرکت کنی ممکنه خیلی طول بکشه تا به قله برسی
اینم از اهمیت learning rate(نرخ یادگیری) در گرادیان
و حالا کاربردش در هوش مصنوعی چیه؟🤨
کاربردش در هوش مصنوعی اینه که
تابع بهینه ساز از گرادیان برای بروزرسانی پارامتر های مدل استفاده میکنه .
گرادیان در آموزش شبکه های عصبی خیلی کاربرد داره
چطوری؟
اینجوری : گرادیان میاد به پارامتر های مدل میگه در چه سمتی حرکت کنن تا ضرر کمتر بشه (دقیقا مثل مثال بالا)
#AI #mathematics
#Deep_learning #learn_pytorch
💻@Clevercoders
امروز میخوام در رابطه با گرادیان (در هوش مصنوعی) صحبت کنمکه اصلا چیه؟🧐
خب ساده ترین توضیح برای گرادیان اینجاست😉👇
خبحالا گرادیان میاد و ارتفاع را محاسبه میکنه و میکه که در کدوم جهت حرکت کن
و شما میتونید یک متر حرکت کنید و یا اینکه ۱۰ متر حرکت کنید.
ولی اگه ۱۰۰ متر حرکت کنید ممکنه قله را رد کنی و اصلا برید اونطرف کوه
ولی بازم اگه یک سانت یک سانت حرکت کنی ممکنه خیلی طول بکشه تا به قله برسی
اینم از اهمیت
و حالا کاربردش در هوش مصنوعی چیه؟🤨
تابع بهینه ساز از گرادیان برای بروزرسانی پارامتر های مدل استفاده میکنه .
گرادیان در آموزش شبکه های عصبی خیلی کاربرد داره
چطوری؟
اینجوری : گرادیان میاد به پارامتر های مدل میگه در چه سمتی حرکت کنن تا ضرر کمتر بشه (دقیقا مثل مثال بالا)
#AI #mathematics
#Deep_learning #learn_pytorch
💻@Clevercoders
👏5⚡2