.. _sec_mlp_concise: Thực hiện ngắn gọn của Multilayer Perceptrons ============================================= Như bạn có thể mong đợi, bằng cách dựa vào các API cấp cao, chúng tôi có thể triển khai MLP thậm chí còn ngắn gọn hơn. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. code:: python from mxnet import gluon, init, npx from mxnet.gluon import nn from d2l import mxnet as d2l npx.set_np() .. raw:: html
.. raw:: html
.. code:: python import torch from torch import nn from d2l import torch as d2l .. raw:: html
.. raw:: html
.. code:: python import tensorflow as tf from d2l import tensorflow as d2l .. raw:: html
.. raw:: html
Mô hình ------- So với việc thực hiện súc tích của chúng tôi về triển khai hồi quy softmax (:numref:`sec_softmax_concise`), sự khác biệt duy nhất là chúng tôi thêm *hai* lớp được kết nối hoàn toàn (trước đây, chúng tôi đã thêm \* một\*). Đầu tiên là lớp ẩn của chúng tôi, chứa 256 đơn vị ẩn và áp dụng chức năng kích hoạt ReLU. Thứ hai là lớp đầu ra của chúng tôi. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. 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
.. 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
.. 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
Vòng đào tạo chính xác giống như khi chúng tôi thực hiện hồi quy softmax. Mô đun này cho phép chúng ta tách các vấn đề liên quan đến kiến trúc mô hình khỏi các cân nhắc trực giao. .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
.. 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
.. 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
.. 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
Tóm tắt ------- - Sử dụng API cấp cao, chúng ta có thể triển khai MLP chính xác hơn nhiều. - Đối với bài toán phân loại tương tự, việc thực hiện một MLP giống như của hồi quy softmax ngoại trừ các lớp ẩn bổ sung có hàm kích hoạt. Bài tập ------- 1. Hãy thử thêm các số lớp ẩn khác nhau (bạn cũng có thể sửa đổi tốc độ học tập). Cài đặt nào hoạt động tốt nhất? 2. Hãy thử các chức năng kích hoạt khác nhau. Cái nào hoạt động tốt nhất? 3. Hãy thử các sơ đồ khác nhau để khởi tạo các trọng lượng. Phương pháp nào hoạt động tốt nhất? .. raw:: html
mxnetpytorchtensorflow
.. raw:: html
`Discussions `__ .. raw:: html
.. raw:: html
`Discussions `__ .. raw:: html
.. raw:: html
`Discussions `__ .. raw:: html
.. raw:: html