Çok girdili modeller

PyTorch ile Orta Düzey Deep Learning

Michal Oleszak

Machine Learning Engineer

Neden çok girdili?

Daha fazla bilgi kullanma

İki araba görüntüsünü girdi alıp tek çıktı veren model şeması.

Çok kipli modeller

Bir görüntü ve bir metni girdi alıp metin üreten model şeması.

Metrik öğrenme

İki yüz görüntüsünü girdi alıp aynı olup olmadıklarını tahmin eden model şeması.

Kendinden denetimli öğrenme

Aynı görüntünün iki artırılmış sürümünü girdi alıp bunların aynı olduğunu öğrenen model şeması.

PyTorch ile Orta Düzey Deep Learning

Omniglot veri kümesi

Omniglot veri kümesinden örnek görüntüler.

1 Lake, B. M., Salakhutdinov, R., and Tenenbaum, J. B. (2015). Human-level concept learning through probabilistic program induction. Science, 350(6266), 1332-1338.
PyTorch ile Orta Düzey Deep Learning

Karakter sınıflandırma

Model şeması: karakter görüntüleri bir sinir ağına verilir.

PyTorch ile Orta Düzey Deep Learning

Karakter sınıflandırma

Model şeması: tek-sıcak alfabet vektörü bir sinir ağına verilir.

PyTorch ile Orta Düzey Deep Learning

Karakter sınıflandırma

Model şeması: karakter ve alfabe gömmeleri birleştirilir.

PyTorch ile Orta Düzey Deep Learning

Karakter sınıflandırma

Model şeması: birleştirilen gömmelerden bir sınıflandırıcı karakteri tahmin eder.

PyTorch ile Orta Düzey Deep Learning

İki girdili Veri Kümesi

from PIL import Image

class OmniglotDataset(Dataset):

def __init__(self, transform, samples): self.transform = transform self.samples = samples
def __len__(self): return len(self.samples)
def __getitem__(self, idx): img_path, alphabet, label = self.samples[idx] img = Image.open(img_path).convert('L') img = self.transform(img) return img, alphabet, label
  • Örnekleri ve dönüşümleri atayın

    print(samples[0])
    
    [(
      'omniglot_train/.../0459_14.png',
       array([1., 0., 0., ..., 0., 0., 0.]),
       0
     )]
    
  • __len__() yöntemini uygulayın

  • Görüntüyü yükleyip dönüştürün

  • Her iki girdiyi ve etiketi döndürün
PyTorch ile Orta Düzey Deep Learning

Tenzör birleştirme

x = torch.tensor([
  [1, 2, 3],
])

y = torch.tensor([
  [4, 5, 6],
])

Eksen 0 boyunca birleştirme

torch.cat((x, y), dim=0)
[[1, 2, 3],
 [4, 5, 6]]

Eksen 1 boyunca birleştirme

torch.cat((x, y), dim=1)
[[1, 2, 3, 4, 5, 6]]
PyTorch ile Orta Düzey Deep Learning

İki girdili mimari

class Net(nn.Module):
    def __init__(self):
        super().__init__()

self.image_layer = nn.Sequential( nn.Conv2d(1, 16, kernel_size=3, padding=1), nn.MaxPool2d(kernel_size=2), nn.ELU(), nn.Flatten(), nn.Linear(16*32*32, 128) )
self.alphabet_layer = nn.Sequential( nn.Linear(30, 8), nn.ELU(), )
self.classifier = nn.Sequential( nn.Linear(128 + 8, 964), )
  • Görüntü işleme katmanını tanımlayın
  • Alfabe işleme katmanını tanımlayın
  • Sınıflandırıcı katmanını tanımlayın
PyTorch ile Orta Düzey Deep Learning

İki girdili mimari

def forward(self, x_image, x_alphabet):

x_image = self.image_layer(x_image)
x_alphabet = self.alphabet_layer(x_alphabet)
x = torch.cat((x_image, x_alphabet), dim=1)
return self.classifier(x)
  • Görüntüyü görüntü katmanından geçirin
  • Alfabeyi alfabe katmanından geçirin
  • Çıktıları birleştirin
  • Sonucu sınıflandırıcıdan geçirin
PyTorch ile Orta Düzey Deep Learning

Eğitim döngüsü

net = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)

for epoch in range(10):
    for img, alpha, labels in dataloader_train:
        optimizer.zero_grad()
        outputs = net(img, alpha)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
  • Eğitim verisi üç öğeden oluşur:
    • Görüntü
    • Alfabe vektörü
    • Etiketler
  • Modele görüntü ve alfabeleri veririz
PyTorch ile Orta Düzey Deep Learning

Hadi pratik yapalım!

PyTorch ile Orta Düzey Deep Learning

Preparing Video For Download...