Aan de slagGa gratis aan de slag

De decoder van het inferentiemodel definiëren

Het inferentiemodel is het model dat je in de praktijk gebruikt om vertalingen te maken wanneer een gebruiker dat vraagt. In deze oefening ga je de decoder van het inferentiemodel implementeren.

De decoder van het inferentiemodel verschilt van de decoder van het trainingsmodel. We kunnen de decoder niet voeden met Franse woorden, want die willen we juist voorspellen. Gelukkig is er een oplossing: we kunnen het voorspelde Franse woord van de vorige tijdstap gebruiken als input voor de decoder van het inferentiemodel. Daarom moet de decoder, wanneer je een vertaling wilt genereren, telkens één woord tegelijk genereren, terwijl hij de vorige output als input gebruikt.

Voor deze oefening zijn de variabelen hsize (hidden size van de GRU-laag), fr_len en fr_vocab geïmporteerd. Onthoud dat de prefix de wordt gebruikt om naar de decoder te verwijzen.

Deze oefening maakt deel uit van de cursus

Machine Translation met Keras

Cursus bekijken

Oefeninstructies

  • Definieer een Input-laag die een batch one-hot-gecodeerde Franse woordsequenties accepteert (sequentielengte 1).
  • Definieer nog een Input-laag die een batch hsize-toestanden accepteert, waarmee je de vorige toestand aan de decoder doorgeeft.
  • Haal de output en de toestand van de decoder-GRU op.
  • Definieer een model dat de Input met Franse woorden en de Input met de vorige toestand accepteert, en dat de uiteindelijke voorspelling en de nieuwe GRU-toestand uitgeeft.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

import tensorflow.keras.layers as layers
from tensorflow.keras.models import Model
# Define an input layer that accepts a single onehot encoded word
de_inputs = layers.____(shape=(____, ____))
# Define an input to accept the t-1 state
de_state_in = layers.____(shape=(____,))
de_gru = layers.GRU(hsize, return_state=True)
# Get the output and state from the GRU layer
de_out, de_state_out = ____(de_inputs, initial_state=____)
de_dense = layers.Dense(fr_vocab, activation='softmax')
de_pred = de_dense(de_out)

# Define a model
decoder = Model(inputs=[____, ____], outputs=[____, ____])
print(decoder.summary())
Code bewerken en uitvoeren