You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
from future import print_function
import argparse
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms
from torch.autograd import Variable
Terminal komutundan alınan bilginin işlenmesi:
parser = argparse.ArgumentParser(description='PyTorch MNIST Example')
parser.add_argument('--batch-size', type=int, default=64, metavar='N',
help='input batch size for training (default: 64)')
parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',
help='input batch size for testing (default: 1000)')
parser.add_argument('--epochs', type=int, default=10, metavar='N',
help='number of epochs to train (default: 10)')
parser.add_argument('--lr', type=float, default=0.01, metavar='LR',
help='learning rate (default: 0.01)')
parser.add_argument('--momentum', type=float, default=0.5, metavar='M',
help='SGD momentum (default: 0.5)')
parser.add_argument('--no-cuda', action='store_true', default=False,
help='disables CUDA training')
parser.add_argument('--seed', type=int, default=1, metavar='S',
help='random seed (default: 1)')
parser.add_argument('--log-interval', type=int, default=10, metavar='N',
help='how many batches to wait before logging training status')
args = parser.parse_args()
args.cuda = not args.no_cuda and torch.cuda.is_available() # Cuda var mı diye kontrol edilir.
Rastgele sayı üretmek için:
torch.manual_seed(args.seed)
if args.cuda:
torch.cuda.manual_seed(args.seed)
def train(epoch):
model.train() # Modelimizi eğitim moduna alıyoruz.
for batch_idx, (data, target) in enumerate(train_loader): # Verisetini batch'lere bölüyoruz.
if args.cuda:
data, target = data.cuda(), target.cuda() # Verileri GPU'ya taşır.
data, target = Variable(data), Variable(target) # Verilerimizi PyTorch değişkenlerine(Tensor) çeviriyoruz.
optimizer.zero_grad() # Tüm optimize edilmiş değişkenlerin verilerini temizler.
output = model(data) # Girdi verisini modelimizde işliyoruz ve çıktımızı alıyoruz.
# Çıkması gereken sonuç ile modelimizin ürettiği çıktıyı karşılaştırarak hata hesaplamamızı yapıyoruz:
loss = F.nll_loss(output, target) # Hata fonksiyonumuz: The negative log likelihood loss(NLLLoss)
loss.backward() # Bulduğumuz hata oranıyla geri-yayılım uyguluyoruz.
optimizer.step() # Modelimizi(ağırlıkları) daha optimize sonuç için güncelliyoruz.
def test():
model.eval() # Modeli test moduna alıyoruz.
test_loss = 0
correct = 0
for data, target in test_loader: # Test verimizi alıyoruz.
if args.cuda:
data, target = data.cuda(), target.cuda() # Verileri GPU'ya taşır.
data, target = Variable(data, volatile=True), Variable(target) # Verilerimizi PyTorch değişkenlerine(Tensor) çeviriyoruz.
output = model(data) # Girdi verisini modelimizde işliyoruz ve çıktımızı alıyoruz.
test_loss += F.nll_loss(output, target, size_average=False).data[0] # Batch hata oranının hesaplanması ve toplam hata oranına eklenmesi.
# Çıkması gereken sonuç ile modelimizin ürettiği çıktıyı karşılaştırarak hata hesaplamamızı yapıyoruz:
pred = output.data.max(1)[1] # Maksimim olasılık indeksi alınarak sonuç elde edilir.
correct += pred.eq(target.data.view_as(pred)).cpu().sum() # Modelin başarısı hesaplanır.
'''
Deep Learning Türkiye topluluğu tarafından hazırlanmıştır.
Amaç: El yazısı rakamların tanınması.
Veriseti: MNIST (http://yann.lecun.com/exdb/mnist/)
Algoritma: Evrişimli Sinir Ağları (Convolutional Neural Networks)
10 epoch sonunda testde 98% doğruluk oranı elde edilmiştir.
Nasıl çalıştırılır ?
python main.py
CUDA_VISIBLE_DEVICES=2 python main.py # İstenilen GPU'da çalıştırmak için.
'''
Gerekli kütüphanelerin dahil edilmesi:
from future import print_function
import argparse
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms
from torch.autograd import Variable
Terminal komutundan alınan bilginin işlenmesi:
parser = argparse.ArgumentParser(description='PyTorch MNIST Example')
parser.add_argument('--batch-size', type=int, default=64, metavar='N',
help='input batch size for training (default: 64)')
parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',
help='input batch size for testing (default: 1000)')
parser.add_argument('--epochs', type=int, default=10, metavar='N',
help='number of epochs to train (default: 10)')
parser.add_argument('--lr', type=float, default=0.01, metavar='LR',
help='learning rate (default: 0.01)')
parser.add_argument('--momentum', type=float, default=0.5, metavar='M',
help='SGD momentum (default: 0.5)')
parser.add_argument('--no-cuda', action='store_true', default=False,
help='disables CUDA training')
parser.add_argument('--seed', type=int, default=1, metavar='S',
help='random seed (default: 1)')
parser.add_argument('--log-interval', type=int, default=10, metavar='N',
help='how many batches to wait before logging training status')
args = parser.parse_args()
args.cuda = not args.no_cuda and torch.cuda.is_available() # Cuda var mı diye kontrol edilir.
Rastgele sayı üretmek için:
torch.manual_seed(args.seed)
if args.cuda:
torch.cuda.manual_seed(args.seed)
MNIST verisetini içe aktarılması:
kwargs = {'num_workers': 1, 'pin_memory': True} if args.cuda else {}
train_loader = torch.utils.data.DataLoader(
datasets.MNIST('../data', train=True, download=True,
transform=transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
])),
batch_size=args.batch_size, shuffle=True, **kwargs)
test_loader = torch.utils.data.DataLoader(
datasets.MNIST('../data', train=False, transform=transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
])),
batch_size=args.test_batch_size, shuffle=True, **kwargs)
Evrişimli Sinir Ağları modelinin oluşturulması:
class Net(nn.Module):
def init(self):
super(Net, self).init()
self.conv1 = nn.Conv2d(1, 10, kernel_size=5) # Giriş kanalı: 1, Çıkış kanalı: 10, Filtre boyutu: 5x5
self.conv2 = nn.Conv2d(10, 20, kernel_size=5) # Giriş kanalı: 10, Çıkış kanalı: 20, Filtre boyutu: 5x5
model = Net() # Modelimizi tanımlıyoruz.
if args.cuda:
model.cuda() # Verileri GPU'ya taşır.
"SGD" optimizasyon fonksiyonumuzu oluşturuyoruz:
optimizer = optim.SGD(model.parameters(), lr=args.lr, momentum=args.momentum)
Modeli eğitecek fonksiyonumuzu oluşturuyoruz:
def train(epoch):
model.train() # Modelimizi eğitim moduna alıyoruz.
for batch_idx, (data, target) in enumerate(train_loader): # Verisetini batch'lere bölüyoruz.
if args.cuda:
data, target = data.cuda(), target.cuda() # Verileri GPU'ya taşır.
data, target = Variable(data), Variable(target) # Verilerimizi PyTorch değişkenlerine(Tensor) çeviriyoruz.
optimizer.zero_grad() # Tüm optimize edilmiş değişkenlerin verilerini temizler.
output = model(data) # Girdi verisini modelimizde işliyoruz ve çıktımızı alıyoruz.
# Çıkması gereken sonuç ile modelimizin ürettiği çıktıyı karşılaştırarak hata hesaplamamızı yapıyoruz:
loss = F.nll_loss(output, target) # Hata fonksiyonumuz: The negative log likelihood loss(NLLLoss)
loss.backward() # Bulduğumuz hata oranıyla geri-yayılım uyguluyoruz.
optimizer.step() # Modelimizi(ağırlıkları) daha optimize sonuç için güncelliyoruz.
Modeli test edecek fonksiyonumuzu oluşturuyoruz:
def test():
model.eval() # Modeli test moduna alıyoruz.
test_loss = 0
correct = 0
for data, target in test_loader: # Test verimizi alıyoruz.
if args.cuda:
data, target = data.cuda(), target.cuda() # Verileri GPU'ya taşır.
data, target = Variable(data, volatile=True), Variable(target) # Verilerimizi PyTorch değişkenlerine(Tensor) çeviriyoruz.
output = model(data) # Girdi verisini modelimizde işliyoruz ve çıktımızı alıyoruz.
test_loss += F.nll_loss(output, target, size_average=False).data[0] # Batch hata oranının hesaplanması ve toplam hata oranına eklenmesi.
# Çıkması gereken sonuç ile modelimizin ürettiği çıktıyı karşılaştırarak hata hesaplamamızı yapıyoruz:
pred = output.data.max(1)[1] # Maksimim olasılık indeksi alınarak sonuç elde edilir.
correct += pred.eq(target.data.view_as(pred)).cpu().sum() # Modelin başarısı hesaplanır.
Eğitimi başlatıyoruz:
for epoch in range(1, args.epochs + 1):
train(epoch) # Model eğitilir.
test() # Model test edilir.
The text was updated successfully, but these errors were encountered: