.. raw:: html
.. code:: python
loss = gluon.loss.SoftmaxCrossEntropyLoss()
.. raw:: html
.. raw:: html
.. code:: python
loss = nn.CrossEntropyLoss()
.. raw:: html
.. raw:: html
.. code:: python
loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
.. raw:: html
.. raw:: html
Otimização do Algoritmo
-----------------------
Aqui, nós usamos gradiente descendente estocástico de *minibatch* com
uma taxa de aprendizado de 0,1 como o algoritmo de otimização. Observe
que este é o mesmo que aplicamos no exemplo de regressão linear e
ilustra a aplicabilidade geral dos otimizadores.
.. raw:: html
.. raw:: html
.. code:: python
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.1})
.. raw:: html
.. raw:: html
.. code:: python
trainer = torch.optim.SGD(net.parameters(), lr=0.1)
.. raw:: html
.. raw:: html
.. code:: python
trainer = tf.keras.optimizers.SGD(learning_rate=.1)
.. raw:: html
.. raw:: html
Trainamento
-----------
Em seguida, chamamos a função de treinamento definida em
:numref:`sec_softmax_scratch` para treinar o modelo.
.. raw:: html
.. raw:: html
.. code:: python
num_epochs = 10
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
.. figure:: output_softmax-regression-concise_75d138_51_0.svg
.. raw:: html
.. raw:: html
.. code:: python
num_epochs = 10
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
.. figure:: output_softmax-regression-concise_75d138_54_0.svg
.. raw:: html
.. raw:: html
.. code:: python
num_epochs = 10
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
.. figure:: output_softmax-regression-concise_75d138_57_0.svg
.. raw:: html
.. raw:: html
Como antes, este algoritmo converge para uma solução que atinge uma
precisão decente, embora desta vez com menos linhas de código do que
antes.
Resumo
------
- Usando APIs de alto nível, podemos implementar a regressão *softmax*
de forma muito mais concisa.
- De uma perspectiva computacional, a implementação da regressão
*softmax* tem complexidades. Observe que, em muitos casos, uma
estrutura de *deep learning* toma precauções adicionais além desses
truques mais conhecidos para garantir a estabilidade numérica,
salvando-nos de ainda mais armadilhas que encontraríamos se
tentássemos codificar todos os nossos modelos do zero na prática.
Exercícios
----------
1. Tente ajustar os hiperparâmetros, como *batch size*, número de épocas
e taxa de aprendizado, para ver quais são os resultados.
2. Aumente o número de épocas de treinamento. Por que a precisão do
teste pode diminuir depois de um tempo? Como poderíamos consertar
isso?
3.
.. raw:: html
.. raw:: html
`Discussions `__
.. raw:: html
.. raw:: html
`Discussions `__
.. raw:: html
.. raw:: html
`Discussions `__
.. raw:: html
.. raw:: html
.. raw:: html