4.3. Çok Katmanlı Algılayıcıların Kısa Uygulaması¶ Open the notebook in SageMaker Studio Lab
Tahmin edebileceğiniz gibi, yüksek seviye API’lere güvenerek, MLP’leri daha da kısaca uygulayabiliriz.
from d2l import mxnet as d2l
from mxnet import gluon, init, npx
from mxnet.gluon import nn
npx.set_np()
import torch
from torch import nn
from d2l import torch as d2l
import tensorflow as tf
from d2l import tensorflow as d2l
4.3.1. Model¶
Kısa softmaks bağlanım uygulamamızla karşılaştırıldığında (Section 3.7), tek fark iki tam bağlı katman eklememizdir (önceden bir tane ekledik). İlki, 256 gizli birim içeren ve ReLU etkinleştirme fonksiyonunu uygulayan gizli katmanımızdır. İkincisi, çıktı katmanımızdır.
net = nn.Sequential()
net.add(nn.Dense(256, activation='relu'),
nn.Dense(10))
net.initialize(init.Normal(sigma=0.01))
net = nn.Sequential(nn.Flatten(),
nn.Linear(784, 256),
nn.ReLU(),
nn.Linear(256, 10))
def init_weights(m):
if type(m) == nn.Linear:
nn.init.normal_(m.weight, std=0.01)
net.apply(init_weights);
net = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(256, activation='relu'),
tf.keras.layers.Dense(10)])
Eğitim döngüsü, softmaks bağlanımını uyguladığımız zamanki ile tamamen aynıdır. Bu modülerlik, model mimarisiyle ilgili konuları dikey düşünmelerden ayırmamızı sağlar.
batch_size, lr, num_epochs = 256, 0.1, 10
loss = gluon.loss.SoftmaxCrossEntropyLoss()
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': lr})
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
batch_size, lr, num_epochs = 256, 0.1, 10
loss = nn.CrossEntropyLoss(reduction='none')
trainer = torch.optim.SGD(net.parameters(), lr=lr)
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
batch_size, lr, num_epochs = 256, 0.1, 10
loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
trainer = tf.keras.optimizers.SGD(learning_rate=lr)
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
4.3.2. Özet¶
Yüksek seviye API’leri kullanarak MLP’leri çok daha kısaca uygulayabiliriz.
Aynı sınıflandırma problemi için, bir MLP’nin uygulanması, etkinleştirme fonksiyonlarına sahip ek gizli katmanlar haricinde softmaks bağlanımının uygulanmasıyla aynıdır.
4.3.3. Alıştırmalar¶
Farklı sayıda gizli katman eklemeyi deneyiniz (öğrenme oranını da değiştirebilirsiniz). Hangi ayar en iyi sonucu verir?
Farklı etkinleştirme işlevlerini deneyin. Hangisi en iyi çalışır?
Ağırlıkları ilkletmek için farklı tertipler deneyiniz. En iyi hangi yöntem işe yarar?