Definiera avkodaren för inferensmodellen
Inferensmodellen är den modell som används i praktiken för att utföra översättningar när användaren behöver det. I den här övningen ska du implementera avkodaren för inferensmodellen.
Inferensmodellens avkodare skiljer sig från avkodaren i träningsmodellen. Vi kan inte mata avkodaren med franska ord, eftersom det är just det vi vill förutsäga. Det finns dock en lösning: vi kan använda det förutsagda franska ordet från föregående tidssteg som indata till inferensmodellens avkodare. När du vill generera en översättning behöver avkodaren därför producera ett ord i taget och samtidigt ta emot föregående utdata som indata.
I den här övningen har variablerna hsize (den dolda storleken för GRU-lagret), fr_len och fr_vocab importerats. Kom ihåg att prefixet de används för att referera till avkodaren.
Den här övningen är en del av kursen
Maskinöversättning med Keras
Övningsinstruktioner
- Definiera ett
Input-lager som tar emot en batch av one-hot-kodade franska ordsekvenser (sekvensläng 1). - Definiera ytterligare ett
Input-lager som tar emot en batch avhsize-tillstånd, som du använder för att mata avkodaren med det tidigare tillståndet. - Hämta utdata och tillstånd från avkodarens
GRU. - Definiera en modell som tar emot
Inputför franska ord ochInputför det tidigare tillståndet, och som returnerar den slutliga förutsägelsen samt det nyaGRU-tillståndet.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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())