¿Cómo codificar una secuencia para secuenciar RNN en keras?

Estoy tratando de escribir una secuencia para secuenciar RNN en keras. Codifiqué este progtwig usando lo que entendí de la web. Primero tokenicé el texto, luego convertí el texto en secuencia y lo rellené para formar la variable de función X. La variable de destino Y se obtuvo primero desplazando x a la izquierda y luego rellenándola. Por último, introduje mi característica y variable objective a mi modelo LSTM.

Este es mi código que escribí en keras para ese propósito.

from keras.preprocessing.text import Tokenizer,base_filter from keras.preprocessing.sequence import pad_sequences from keras.models import Sequential from keras.layers import Dense, Activation,Dropout,Embedding from keras.layers import LSTM def shift(seq, n): n = n % len(seq) return seq[n:] + seq[:n] txt="abcdefghijklmn"*100 tk = Tokenizer(nb_words=2000, filters=base_filter(), lower=True, split=" ") tk.fit_on_texts(txt) x = tk.texts_to_sequences(txt) #shifing to left y = shift(x,1) #padding sequence max_len = 100 max_features=len(tk.word_counts) X = pad_sequences(x, maxlen=max_len) Y = pad_sequences(y, maxlen=max_len) #lstm model model = Sequential() model.add(Embedding(max_features, 128, input_length=max_len, dropout=0.2)) model.add(LSTM(128, dropout_W=0.2, dropout_U=0.2)) model.add(Dense(max_len)) model.add(Activation('softmax')) model.compile(loss='binary_crossentropy', optimizer='rmsprop') model.fit(X, Y, batch_size=200, nb_epoch=10) 

El problema es que está mostrando un error.

 Epoch 1/10 IndexError: index 14 is out of bounds for size 14 Apply node that caused the error: AdvancedSubtensor1(if{inplace}.0, Reshape{1}.0) Toposort index: 80 

    El problema radica en:

     model.add(Embedding(max_features, 128, input_length=max_len, dropout=0.2)) 

    En la documentación de Incrustación puede ver que el primer argumento que se le proporcionó debe configurarse al tamaño del vocabulario + 1. Es porque siempre debe haber un lugar para una palabra null cuyo índice es 0 . Por eso necesitas cambiar esta línea a:

     model.add(Embedding(max_features + 1, 128, input_length=max_len, dropout=0.2))