طارق بن جعبل طعيمان

مهندس ذكاء اصطناعي

0%

العودة للمدونة
15 نوفمبر 202518 دقيقة قراءة

كيف تدرّب أول نموذج AI خاص بك؟

دليل عملي خطوة بخطوة لتدريب نموذج تصنيف صور باستخدام PyTorch

المشروع: تصنيف الصور (قطط 🐱 vs كلاب 🐶)

سنبني نموذج CNN بسيط يميّز بين صور القطط والكلاب. هذا مشروع مثالي للمبتدئين!

ما تحتاجه:

  • ✓ Python 3.8+
  • ✓ PyTorch
  • ✓ Google Colab (مجاني)

ما ستتعلمه:

  • ✓ تحضير البيانات
  • ✓ بناء CNN
  • ✓ التدريب والتقييم

الخطوة 1: إعداد البيئة

تثبيت المكتبات

# في Google Colab أو Terminal
!pip install torch torchvision

استيراد المكتبات

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

الخطوة 2: تحضير البيانات

Data Augmentation

نطبق تحويلات على الصور لزيادة تنوع البيانات ومنع Overfitting

# تحويلات للصور
transform = transforms.Compose([
transforms.Resize((128, 128)), # تصغير الصورة
transforms.RandomHorizontalFlip(), # قلب عشوائي
transforms.ToTensor(), # تحويل لـ Tensor
transforms.Normalize((0.5,0.5,0.5), (0.5,0.5,0.5))
])

تحميل Dataset

# مثال: استخدام CIFAR-10 (10 categories)
train_data = datasets.CIFAR10(
root='./data',
train=True,
transform=transform,
download=True
)
train_loader = DataLoader(train_data, batch_size=32, shuffle=True)

الخطوة 3: بناء النموذج (CNN)

معمارية CNN بسيطة

class SimpleCNN(nn.Module):
def __init__(self):
super().__init__()
# Convolutional Layers
self.conv1 = nn.Conv2d(3, 32, 3) # 3 channels → 32
self.conv2 = nn.Conv2d(32, 64, 3)
self.pool = nn.MaxPool2d(2, 2)
# Fully Connected Layers
self.fc1 = nn.Linear(64*30*30, 128)
self.fc2 = nn.Linear(128, 10) # 10 classes
self.relu = nn.ReLU()
def forward(self, x):
x = self.pool(self.relu(self.conv1(x)))
x = self.pool(self.relu(self.conv2(x)))
x = x.view(-1, 64*30*30) # Flatten
x = self.relu(self.fc1(x))
x = self.fc2(x)
return x

شرح المعمارية:

  • Conv1: 3→32 filters (استخراج features بسيطة)
  • Conv2: 32→64 filters (features أعمق)
  • MaxPool: تقليل الحجم بعد كل conv
  • FC Layers: التصنيف النهائي

الخطوة 4: التدريب

إعداد النموذج والـ Optimizer

model = SimpleCNN()
criterion = nn.CrossEntropyLoss() # Loss function
optimizer = optim.Adam(model.parameters(), lr=0.001)

Training Loop

epochs = 10
for epoch in range(epochs):
running_loss = 0.0
for images, labels in train_loader:
# 1. Forward pass
outputs = model(images)
loss = criterion(outputs, labels)
# 2. Backward pass
optimizer.zero_grad() # صفّر gradients
loss.backward() # احسب gradients
optimizer.step() # حدّث الأوزان
running_loss += loss.item()
print(f'Epoch {epoch+1}, Loss: {running_loss/len(train_loader):.3f}')

ما يحدث في كل Epoch:

  1. 1. Forward Pass: مرر الصور عبر الشبكة
  2. 2. Calculate Loss: قارن Output بالـ Labels الحقيقية
  3. 3. Backward Pass: احسب gradients
  4. 4. Update Weights: حسّن الأوزان

الخطوة 5: التقييم

اختبار النموذج

model.eval() # وضع Evaluation
correct = 0
total = 0
with torch.no_grad(): # لا نحتاج gradients
for images, labels in test_loader:
outputs = model(images)
_, predicted = torch.max(outputs, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
accuracy = 100 * correct / total
print(f'Test Accuracy: {accuracy:.2f}%')

حفظ النموذج

torch.save(model.state_dict(), 'my_first_model.pth')
# لتحميله لاحقاً:
model.load_state_dict(torch.load('my_first_model.pth'))

نصائح لتحسين النموذج

📊

زِد البيانات

أكثر بيانات = دقة أعلى

🔧

جرّب Learning Rates مختلفة

0.001, 0.0001, 0.01 - جرّب!

🏗️

استخدم Pre-trained Models

ResNet, VGG مع Transfer Learning

⏱️

راقب Overfitting

استخدم Dropout و Early Stopping

🎉 مبروك! درّبت أول نموذج AI!

الآن أنت تفهم:

  • ✅ كيف تحضّر البيانات
  • ✅ كيف تبني CNN
  • ✅ Forward/Backward Pass
  • ✅ التدريب والتقييم

المشاريع القادمة: جرّب Object Detection، NLP، أو Generative AI!