سامان براهویی
سامان براهویی
خواندن ۵ دقیقه·۳ سال پیش

تشخیص سگ از گربه با بایتورچ به سادگی

امروز قراره یاد بگیریم چطوری میشه که عکس های سگ و گربه رو بدیم به سیستم و اون تشخیصش بده مثل بچه ادمیزاد:)


اگه هیچ اطلاعاتی از هوش مصنوعی ندارین بازم به دردتون میخوره مبینید چطوری میشه که کامپیوتر ما یادمیگره گربه یا سگ رو از روی عکس تشخیص بده

برای اینکه بتونیم به یه بچه هم فرق این دوتا حیوون یاد بدیم اول باید عالمه سگ و گربه رو بشون نشون بدیم تا یاد بگیرن واسه هوش مصنوعی ما هم اینطوری هستش باید یه عالمه عکس سگ و گربه جمع کنیم نشونش بدیم تا بتونه تازه فرقشون بفهمه

خدارو شکر نیازی نیست ما بیفتیم دنبال عکس میتونیم از مجموعه های اماده استفاده کنیم(دیتاست) یکی از این معروف ها در سایت کگل وجود داره که راحت میتونین دانلودش کنید داخلشم فقط عکس که دسته بندی شده

ادرس دیتاست:Dogs vs. Cats | Kaggle

برین قسمت code  ودانلودش کنید
برین قسمت code ودانلودش کنید


دو تا فایل داریم train و test که داخل هرکدم عکسا سگ و گربه وجود داره چیز خاصی نیست

ازتون میخوام مثل این عکس فولدر ها رو درست کنید اینطوری کارتون خیلی راحتر میشه از خیلی از مشکلان جلوگیری میشه سعی کنید همیشه اول دیتاستتون تمیز کنید (اینارو بتون نمیگن شما حواستون باشه؛)

حالا شما باید یه جا کدتون بزنین میتونه سیستم خودتون باشه یا بریم از کولب(سیستم گوگل) یا کگل استفاه کنیم هر طور راحتین



import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
import matplotlib.pyplot as plt
import torch
from torch import nn
from torch import optim
import torch.nn.functional as F
from torchvision import datasets, transforms, models
import os
print(os.listdir(&quot../input&quot))
# import module we'll need to import our custom module
from shutil import copyfile
copyfile(src = &quot../input/view-class/view_helper.py&quot, dst = &quot../working/view_helper.py&quot)
import view_helper as helper

اینجا ما یه سری کتابخونه رو اضافه کردیم فعلا خودتون درگیرشون نکنین (هدف ما نقشه راه)از اول نوضیح نمیدم دیگه (تمام کد ها به زبان بایتون) بیشنهاد من اینه از کولب استفاده کنین(نمیدونی چیه باشو سرچ کن دیگه تنبل)

data_dir = '../input/dogs-vs-cats-for-pytorch/cat_dog_data/Cat_Dog_data'


# TODO: Define transforms for the training data and testing data
train_transforms = transforms.Compose([transforms.RandomRotation(30),
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406],
[0.229, 0.224, 0.225])])


test_transforms = transforms.Compose([transforms.Resize(255),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406],
[0.229, 0.224, 0.225])])

خوب کار این کدها اینه که عکسای ما رو یه سری تغیررات بده بشون مثلا اندازه عکسو تغییر بده وتبدیل به تنسور کنه که تقریبا همون ماتریس خودمونه (هدفم این نیست بیام به شما کامل توضیح بدم تمام این کد هارو فقظ دارم این که چجوری انجام میشه رو نشون میدم)

train_data = datasets.ImageFolder(data_dir + '/train', transform=train_transforms)
test_data = datasets.ImageFolder(data_dir + '/test', transform=test_transforms)

یادتونه گفتم فولدار های دیتاست رو دسته بندی کنیم اینجا به درد میخوره که میام از ایمج فولدر استفاده میکنیم و ترنسفرم ها رو بشون میدم(همون کدهایی که باعث میشد یه سری تغیرات عکسو بدیم) و ادرس فولدرامونو که train وtest بود ؛اینو بگم ایمیج فولدر خودش میاد خیلی از کارا رو انجام میده عکسارو انتخاب میکنه

trainloader = torch.utils.data.DataLoader(train_data, batch_size=64, shuffle=True)
testloader = torch.utils.data.DataLoader(test_data, batch_size=64)

حالا میام دیتالودرامونو تعریف میکنیم کارشون اینه که عکسارو برای ما بر میداره و زمانی که بخوایمم به مدل هوش مصنوعی بدیم کارمونو راحتتر میکنه

data_iter = iter(trainloader)
images, labels = next(data_iter)
fig, axes = plt.subplots(figsize=(10,10), ncols=4)
for ii in range(4):
ax = axes[ii]
helper.imshow(images[ii], ax=ax, normalize=False)

این تیکه کد عکسایی که لود شده و ما میخوایمم بدیم مدلمون رو نشون میده (ماژول هلبر رو اخر میزارم کدشو)

اینم کده مدل هوش مصنوعی ما که امدیم از مدل densenet12 ااستفاده کردیم و لایه اخر مدل (کلسیفایر ) رو دست کاری کردیم برای اینکه تشخصی بده و لاس و ابتیمایزمونو انتخاب کردیم ایی خدا خستع شدم بقییه باشه تو قسمت بعدی که یاد میدم چجوری مدلمونو تمرین بدیم جاهای جالبش هنوز مونده:))))))


# Use GPU if it's available
device = torch.device(&quotcuda&quot if torch.cuda.is_available() else &quotcpu&quot)
model = models.densenet121(pretrained=True)
# Freeze parameters so we don't backprop through them
for param in model.parameters():
param.requires_grad = False
model.classifier = nn.Sequential(nn.Linear(1024, 256),
nn.ReLU(),
nn.Dropout(0.2),
nn.Linear(256, 2),
nn.LogSoftmax(dim=1))
criterion = nn.NLLLoss()
# Only train the classifier parameters, feature parameters are frozen
optimizer = optim.Adam(model.classifier.parameters(), lr=0.003)
model.to(device);


هوش مصنوعیPyTorchگوگل
شاید از این پست‌ها خوشتان بیاید