CuDNNLSTM: не удалось вызвать ThenRnnForward - PullRequest
0 голосов
/ 29 декабря 2018

У меня возникла проблема при попытке использовать CuDNNLSTM вместо keras.layers.LSTM.

Это ошибка, которую я получаю:

Не удалось вызвать ThenRnnForward с конфигурацией модели: [rnn_mode, rnn_input_mode, rnn_direction_mode]: 2, 0, 0, [num_layers, input_size,num_units, dir_count, seq_length, batch_size]: [1, 300, 512, 1, 5521, 128] [[{{node двунаправленный_1 / CudnnRNN_1}} = CudnnRNN [T = DT_FLOAT, _class = ["loc: @train ...NNBackprop "], direction =" однонаправленный ", dropout = 0, input_mode =" linear_input ", is_training = true, rnn_mode =" lstm ", seed = 87654321, seed2 = 0, _device =" / job: localhost / replica: 0 /задача: 0 / устройство: GPU: 0 "] (двунаправленный_1 / transpose_1, двунаправленный_1 / ExpandDims_1, двунаправленный_1 / ExpandDims_1, двунаправленный_1 / concat_1)]] [[{{потеря узла / мул / _75}} = _Recvclient_terminated = false =" false ", false/ job: localhost / replica: 0 / task: 0 / device: CPU: 0 ", send_device =" / job: localhost / replica: 0 / task: 0 / device: GPU: 0 ", send_device_incarnation = 1, tenor_name ="edge_1209_loss / mul ", tenor_type = DT_FLOAT, _device =" / job: localhost / реплика: 0 / task: 0 / device: CPU: 0 "]]

Кроме того, я получил эту ошибку в одном из прогонов:

InternalError: сбой синхронизации GPU

И ядро ​​продолжало умирать после каждого запуска.

Я начал получать эту ошибку, только когда пытался запустить ее на экземпляре виртуальной машины в облаке Google с CuDNNLSTM.

мой код:

MAX_LEN = max(len(article) for article in X_train_tokens)
EMBEDDING_DIM=300
vocab_size = len(word_to_id)
classes = 2 
# Text input
text_input = Input(shape=(MAX_LEN,))
embedding = Embedding(vocab_size, EMBEDDING_DIM, input_length=MAX_LEN)(text_input)
x = Bidirectional(LSTM(512, return_sequences=False))(embedding)
pred = Dense(2, activation='softmax')(x)
model = Model(inputs=[text_input],outputs=pred)
model.compile(loss='categorical_crossentropy', optimizer='RMSprop',     metrics=['accuracy'])
batch_size = 128
generator = text_training_generator(batch_size)
steps = len(X_train)/ batch_size 

model.fit_generator(generator, steps_per_epoch=steps, verbose=True, epochs=10)

Краткое описание модели:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 5521)              0         
_________________________________________________________________
embedding_1 (Embedding)      (None, 5521, 300)         8099100   
_________________________________________________________________
bidirectional_1 (Bidirection (None, 1024)              3330048   
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 2050      
=================================================================
Total params: 11,431,198
Trainable params: 11,431,198
Non-trainable params: 0
_________________________________________________________________

1 Ответ

0 голосов
/ 30 декабря 2018

Возможно, вам не хватает памяти на GPU.Ваша сеть очень большая с 11 миллионами обучаемых параметров.Вам действительно нужен 512 * 2 выход вашего повторяющегося слоя?

Кроме того, ваш embedding_dim также довольно большой, в то время как ваш словарный запас довольно мал с 5k слов.Я полагаю, ваша сеть слишком сложна для вашей проблемы.Я бы предложил в качестве начала попробовать размер встраивания 32 и размер LSTM 32.Если ваша точность все еще плоха, вы можете увеличить сложность.

EMBEDDING_DIM = 32
Bidirectional(LSTM(32, return_sequences=False))(embedding)
...