.. _sec_mlp_concise:
Çok Katmanlı Algılayıcıların Kısa Uygulaması
============================================
Tahmin edebileceğiniz gibi, yüksek seviye API'lere güvenerek, MLP'leri
daha da kısaca uygulayabiliriz.
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
from d2l import mxnet as d2l
from mxnet import gluon, init, npx
from mxnet.gluon import nn
npx.set_np()
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
import torch
from torch import nn
from d2l import torch as d2l
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
import tensorflow as tf
from d2l import tensorflow as d2l
.. raw:: html
.. raw:: html
Model
-----
Kısa softmaks bağlanım uygulamamızla karşılaştırıldığında
(:numref:`sec_softmax_concise`), 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.
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
net = nn.Sequential()
net.add(nn.Dense(256, activation='relu'),
nn.Dense(10))
net.initialize(init.Normal(sigma=0.01))
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
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);
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
net = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(256, activation='relu'),
tf.keras.layers.Dense(10)])
.. raw:: html
.. raw:: html
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.
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
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)
.. figure:: output_mlp-concise_f87756_27_0.svg
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
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)
.. figure:: output_mlp-concise_f87756_30_0.svg
.. raw:: html
.. raw:: html
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
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)
.. figure:: output_mlp-concise_f87756_33_0.svg
.. raw:: html
.. raw:: html
Ö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.
Alıştırmalar
------------
1. Farklı sayıda gizli katman eklemeyi deneyiniz (öğrenme oranını da
değiştirebilirsiniz). Hangi ayar en iyi sonucu verir?
2. Farklı etkinleştirme işlevlerini deneyin. Hangisi en iyi çalışır?
3. Ağırlıkları ilkletmek için farklı tertipler deneyiniz. En iyi hangi
yöntem işe yarar?
.. raw:: html
.. raw:: html
`Tartışmalar `__
.. raw:: html
.. raw:: html
`Tartışmalar `__
.. raw:: html
.. raw:: html
`Tartışmalar `__
.. raw:: html
.. raw:: html