Het embeddingmodel definiëren
Je gaat een Keras-model definiëren dat:
Embedding-lagen gebruikt- Getraind wordt met Teacher Forcing
Dit model heeft twee embedding-lagen: een encoder-embeddinglaag en een decoder-embeddinglaag. Omdat het model wordt getraind met Teacher Forcing, gebruikt het in de decoder-Input-laag een sequentielengte van fr_len-1.
Voor deze oefening zijn alle vereiste keras.layers en Model al geïmporteerd. Daarnaast zijn de variabelen en_len (Engelse sequentielengte), fr_len (Franse sequentielengte), en_vocab (omvang van de Engelse woordenschat), fr_vocab (omvang van de Franse woordenschat) en hsize (hidden size) gedefinieerd.
Deze oefening maakt deel uit van de cursus
Machine Translation met Keras
Oefeninstructies
- Definieer een
Input-laag die een sequentie van woord-ID's accepteert. - Definieer een
Embedding-laag dieen_vocabwoorden embedt, lengte 96 heeft en een sequentie van ID's kan accepteren (de sequentielengte geef je op met het argumentinput_length). - Definieer een
Embedding-laag diefr_vocabwoorden embedt, lengte 96 heeft en een sequentie vanfr_len-1ID's kan accepteren. - Definieer een model dat een input van de encoder en een input van de decoder (in die volgorde) neemt en de woordvoorspellingen als output geeft.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# Define an input layer which accepts a sequence of word IDs
en_inputs = Input(____=(____,))
# Define an Embedding layer which accepts en_inputs
en_emb = ____(____, ____, input_length=____)(en_inputs)
en_out, en_state = GRU(hsize, return_state=True)(en_emb)
de_inputs = Input(shape=(fr_len-1,))
# Define an Embedding layer which accepts de_inputs
de_emb = Embedding(____, 96, input_length=____)(____)
de_out, _ = GRU(hsize, return_sequences=True, return_state=True)(de_emb, initial_state=en_state)
de_pred = TimeDistributed(Dense(fr_vocab, activation='softmax'))(de_out)
# Define the Model which accepts encoder/decoder inputs and outputs predictions
nmt_emb = Model([____, ____], ____)
nmt_emb.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])