سلام دوستان! امروز میخوایم یک سیستم هوش مصنوعی (AI) رو با استفاده از PyTorch بسازیم و سپس اون رو در یک برنامه پایتون تلفیق کنیم. این آموزش برای کسانی که میخوان اصول پیادهسازی و استفاده از هوش مصنوعی در برنامههای کاربردی رو بفهمند بسیار مناسب هست.
1. تنظیمات اولیه 🛠️
نصب PyTorch
برای نصب PyTorch از دستور زیر استفاده کنید:
pip install torch torchvision
2. آمادهسازی دادهها 📋
در این آموزش از مجموعه دادههای MNIST استفاده میکنیم که شامل تصاویر دستنویس اعداد 0 تا 9 است.
import torch
import torchvision
import torchvision.transforms as transforms
# تعریف تبدیلها
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
# دانلود و بارگذاری مجموعه دادههای آموزشی و تست
trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=True)
testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=32, shuffle=False)
3. تعریف مدل AI 📈
یک شبکه عصبی پیچیده برای تشخیص اعداد دستنویس تعریف میکنیم.
import torch.nn as nn
import torch.nn.functional as F
class ComplexNN(nn.Module):
def __init__(self):
super(ComplexNN, self).__init__()
self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)
self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)
self.fc1 = nn.Linear(64 * 7 * 7, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 64 * 7 * 7)
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
net = ComplexNN()
4. تعریف تابع هزینه و بهینهساز 📉
ما از تابع هزینه CrossEntropy و بهینهساز Adam استفاده میکنیم.
import torch.optim as optim
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(net.parameters(), lr=0.001)
5. آموزش مدل AI 📊
شبکه عصبی رو برای چندین ایپاک (epoch) آموزش میدهیم.
for epoch in range(5): # تعداد ایپاکها
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
inputs, labels = data
optimizer.zero_grad()
outputs = net(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
if i % 100 == 99:
print(f'[Epoch {epoch + 1}, Batch {i + 1}] loss: {running_loss / 100:.3f}')
running_loss = 0.0
print('آموزش تمام شد')
6. ذخیره مدل آموزشدیده شده 💾
مدل آموزشدیده شده رو ذخیره میکنیم تا در برنامه کاربردی از آن استفاده کنیم.
torch.save(net.state_dict(), 'model.pth')
7. بارگذاری مدل و استفاده از آن در برنامه کاربردی 📱
حالا یک برنامه پایتون جدید ایجاد میکنیم که شامل یک رابط کاربری ساده برای استفاده از مدل AI است. این برنامه با استفاده از کتابخانه
tkinter یک رابط کاربری گرافیکی (GUI) ایجاد میکند.ساخت رابط کاربری با tkinter👇
🆔 @Python4all_pro