PyTorch ile Temel Kodlama

Kaan Uğurluoğlu
5 min readAug 3, 2021

--

Bir önceki yazımızda PyThorch’un ne olduğundan bahsetmiştik. Bu yazımda ise PyTorch kütüphanesini nasıl kullanacağımızdan ve neler yapabileceğimizden bahsedeceğiz.

Kodlamaya Giriş

PyTorch’da ilk olarak kullanılan kütüphanelerinden bahsedelim. Temelinde iki kütüphane bulunmaktadır. Bunlar ‘torch.utils.data.DataLoader’ ve ‘torch.utils.data.Dataset’tir. Öncelikle bu iki kütüphane eklenir.

Yazacağımız kod için aşağıdaki kütüphaneleri ekleyerek devam edelim. Bu çalışma da TorchVision kütüphanesi kullanılacaktır.

PyTorch’un içerisinde veri setlerini içeren kendilerine özgü kitaplıklar vardır. TorchVision kütüphanesi bunlardan biridir.

Daha sonrasında kullanacağımız verileri yüklüyoruz.

Bu aşamada verilerin indirilmesi sağlanmıştır. Sonraki aşamada bu verileri basitçe test edelim. Burada batch_size=64 yaparak her bir veri için 64'lük bir boyut tanımlıyoruz.Daha sonrasında bir test veri yükleyicisi oluşturarak ekrana bastırıyoruz. Buraya kadar olan kısım çalıştırıldığında veri setini indirmiş oluyoruz ve böylece bir grup döndürülüyor.

Model Oluşturma

PyTorch’da bir model oluşturulurken nn.Module komutundan yararlanılır.

Model oluştururken CPU veya GPU seçeneklerinden hangisini kullandığımızı önemlidir. GPU üzerinde yapılırsa haliyle işlemler daha hızlı gerçekleştirilecektir. __init__fonksiyonu ile fonksiyonda ağın katmanları tanımlanır. forward fonksiyonuyla ise verilerin ağ üzerinden nasıl geçeceği belirlenir. Ardından __init__ ile katmanlar yapılır.

Son olarakta eğer varsa oluşturulan modeli GPU’ya alıp bastırıyoruz. Bu aşamada sinir ağı modelimizi görebiliriz.

Model Kaydetme

Bu oluşturduğumuz modeli kaydetmek istersek torch kütüphanesi içerisindeki save parametresini kullanırız.

Kodları yazdığımız dosya içerisinde sıkıştırılmış bir dosya olarak kaydettiğimiz modeli görüntüleyebiliriz.

Model Yükleme

Yüklediğimiz model ile tahmin işlemini gerçekleştirebiliriz. Aşşağıda görüldüğü gibi önce sınıfları oluşturduk. Ardından test datasından aldığımız veriler ile tahmin işlemini gerçekleştirdik.

Tensörler

Tensörler, Python programlama dilinde kullandığımız dizilere benzeyen özel bir veri yapısıdır. NumPy dizileri ile oldukça benzerdirler. PyTorch’da bir modeli kodlamak için tensörler kullanılır.

Şimdi Tensörlere kütüphanelerini ekleyerek başlayalım.

Tensörler doğrudan verilerden veya NumPy dizilerinden oluşabilir.

Tensörleri direkt olarak verilerden oluşturulması:

NumPy dizilerinden oluşturulması:

Tensörler rastgele sayılardan ve ya belirli sabit sayılardan oluşaabilir.

Şimdi de bir tensör oluşturalım. Bu tensörde shape ile boyutları belirleyelim. İlkini random olarak, ikincisini 1'lerden oluşacak şekilde ve üçüncüsünü ise 0'lardan oluşacak şekilde kodladık.

Tensörün boyutunu, veri tipini ve nerede depolandığını aşağıdaki gibi öğrenebiliriz. .sahapeile boyutu, .dtype ile veri tipi, .device ile de kullanıldığı cihaz bulunur.

Tensörlerle işlemler de gerçekleştirebilmekteyiz. Yine CPU veya GPU üzerinde bu işlemleri gerçekleştirebilirsiniz. Önce tensörler CPU üzerinde varsayılan olarak oluşturulur. Bu tensörleri GPU’ya taşımamız gerekir. Bunu da aşağıdaki gibi yaparız. ’to’ komutunu kullanırız.

Birleştirmek için ise ‘.cat’ komutu kullanılır.

Bir tensörden bir numpy dizisine kolaylıkla geçiş yapılabilir ve sonrasında tensorda yapılan bir değişiklik numpy dizisine de etki eder.

Veri Seti Yükleme

Şimdi de Fashion-MNIST veri kümesnin TorchVision üzerinde yüklememiz gerekiyor. Fashion-MNIST, 60.000 eğitim örneği ve 10.000 eğitim seti örneğinden oluşan bir veri kümesidir.

Yükleme işlemi aşağıdaki parametreler yardımıyla gerçekleştirilir.

root parametresi ile eğitim ve test verileri depolanır.

train parametresi eğitim verilerini ifade eder.

download=True olduğunda eğer root parametresine ulaşılamıyorsa veriler online olarak indirilir.

transform ve target_transform verilerin özelliklerini ve etiket isimlerini belirtir.

Bunun için görselleştirmek istenilen verilerin etiketleri belirtilerek matplotlib kütüphanesi ise verileri görselleştirmek için kullanılır.

Aşağıda kodun farklı zamanlarda çalıştırıldığında alınan sonuçları görülmektedir. Görseller belli bir sıraya göre bastırılmamakta yazılan etiketlerdeki görseller random oalrak bastırılmaktadır.

Dönüşümler

Kullanılan veriler her zaman kullanıma hazır halde bulunmaz. Bazen verilerin işlemlerden geçirilerek eğitim için uygun hale getirilmesi sağlanır. Bunun için de dönüşümler kullanılır.

Yukarda da söylediğimiz iki parametre üzerinden dönüşümleri sağlarız.

* transform

*target_transform

Aşağıda FashionMNIST veri setinin nasıl dönüştürüldüğü verilmiştir.

Sinir Ağı Oluşturma

Sinir ağları katmanlardan oluşur. Şimdi de PyTorch ile kendi sinir ağımızı oluşturalım. Sinir ağları, veriler üzerinde işlemler gerçekleştiren katmanlardan oluşur. PyTorch’taki her bir modül nn.Module altsınıflarından oluşur. Aslında bir sinir ağı da modüllerden oluşan başka bir modüldür. Bu içi içe geçmiş ağlar, karmaşık mimarileri kolayca oluşturmaya ve yönetmeye izin verir.

Şimdi FashionMNIST için bir sinir ağı oluşturalım.

Şimdi verileri koda girelim.

Modelin katmanlarını ayırmak için ise aşağıdaki kodları kullanırız.

Şimdi de depolanmış verileri değiştirelim.

Bu yazımızda bu kadar. Sonraki yazılarda görüşmek üzere…

--

--

No responses yet