Форма ввода для языковой модели Keras LSTM/GRU

Я пытаюсь обучить языковой модели на уровне слов в Керасе.

У меня есть свои X и Y, оба с формой (90582L, 517L)

Когда я пытаюсь соответствовать этой модели:

print('Build model...')
model = Sequential()
model.add(GRU(512, return_sequences=True, input_shape=(90582, 517)))
model.add(Dropout(0.2))
model.add(GRU(512, return_sequences=True))
model.add(Dropout(0.2))
model.add(TimeDistributedDense(1))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
model.fit(x_pad, y_pad, batch_size=128, nb_epoch=2)

Я получаю ошибку:

Exception: Error when checking model input: 
expected gru_input_7 to have 3 dimensions, but got array with shape (90582L, 517L)

Мне нужно некоторое руководство относительно того, какой должна быть форма ввода? Я сделал метод проб и ошибок на всевозможных комбинациях, но, похоже, я неправильно понял нечто фундаментальное.

В примере генерации текста Keras матрица X имела 3 измерения. Я понятия не имею, каким должно быть третье измерение.

1 ответ

Это зависит от того, что вы пытаетесь сделать. Я предполагаю, что ваши данные формы (90582, 517) представляют собой набор из 90582 выборок по 517 слов в каждой. Если это так, вы должны преобразовать свои слова в векторы слов (= вложения), чтобы они имели смысл. Тогда у вас будет форма (90582, 517, embedding_dim), которая может быть обработана ГРУ.

Слой Keras Embedding может сделать это за вас. Добавьте его в качестве первого слоя вашей нейронной сети перед первым слоем GRU.

vocabulary_size = XXXXX     # give your vocabulary size here (largest word ID in the input)
embedding_dim = XXXX        # give your embedding dimension here (e.g. 100)

print('Build model...')
model = Sequential()
model.add(Embedding(vocabulary_size, embedding_dim, input_shape=(90582, 517)))
model.add(GRU(512, return_sequences=True))
model.add(Dropout(0.2))
model.add(GRU(512, return_sequences=True))
model.add(Dropout(0.2))
model.add(TimeDistributedDense(1))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
model.fit(x_pad, y_pad, batch_size=128, nb_epoch=2)
Другие вопросы по тегам