Model multi-input

Deep Learning Lanjutan dengan PyTorch

Michal Oleszak

Machine Learning Engineer

Mengapa multi-input?

Menggunakan lebih banyak informasi

Skema model yang menerima dua gambar mobil sebagai input dan menghasilkan satu output.

Model multimodal

Skema model yang menerima sebuah gambar dan sepotong teks sebagai input lalu menghasilkan output teks.

Metric learning

Skema model yang menerima dua gambar wajah sebagai input dan memprediksi apakah sama.

Pembelajaran self-supervised

Skema model yang menerima dua versi augmentasi dari gambar yang sama sebagai input dan belajar bahwa keduanya sama.

Deep Learning Lanjutan dengan PyTorch

Dataset Omniglot

Contoh gambar dari dataset Omniglot.

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

Klasifikasi karakter

Skema model: gambar karakter dikirim ke jaringan saraf.

Deep Learning Lanjutan dengan PyTorch

Klasifikasi karakter

Skema model: vektor one-hot alfabet dikirim ke jaringan saraf.

Deep Learning Lanjutan dengan PyTorch

Klasifikasi karakter

Skema model: embedding karakter dan alfabet digabungkan.

Deep Learning Lanjutan dengan PyTorch

Klasifikasi karakter

Skema model: dari embedding gabungan, sebuah klasifier memprediksi karakter.

Deep Learning Lanjutan dengan PyTorch

Dataset dua input

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
  • Tetapkan sampel dan transformasi

    print(samples[0])
    
    [(
      'omniglot_train/.../0459_14.png',
       array([1., 0., 0., ..., 0., 0., 0.]),
       0
     )]
    
  • Implementasikan __len__()

  • Muat dan transformasi gambar

  • Kembalikan kedua input dan label
Deep Learning Lanjutan dengan PyTorch

Konkatenasi tensor

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

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

Konkatenasi sepanjang sumbu 0

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

Konkatenasi sepanjang sumbu 1

torch.cat((x, y), dim=1)
[[1, 2, 3, 4, 5, 6]]
Deep Learning Lanjutan dengan PyTorch

Arsitektur dua input

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), )
  • Definisikan layer pemrosesan gambar
  • Definisikan layer pemrosesan alfabet
  • Definisikan layer klasifier
Deep Learning Lanjutan dengan PyTorch

Arsitektur dua input

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)
  • Lewatkan gambar melalui layer gambar
  • Lewatkan alfabet melalui layer alfabet
  • Konkatenasi output gambar dan alfabet
  • Lewatkan hasilnya ke klasifier
Deep Learning Lanjutan dengan PyTorch

Loop pelatihan

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()
  • Data pelatihan berisi tiga item:
    • Gambar
    • Vektor alfabet
    • Label
  • Kita memberi model gambar dan alfabet
Deep Learning Lanjutan dengan PyTorch

Ayo berlatih!

Deep Learning Lanjutan dengan PyTorch

Preparing Video For Download...