Застрял в первой эпохе при обучении CNN-LSTM с использованием Keras - PullRequest
1 голос
/ 19 января 2020

Я использую Keras для построения модели CNN-LSTM для классификации твитов. Модель имеет два входа, и задача состоит из трех классов. Код, который я использую для построения модели, приведен ниже:

def conv2d_lstm_with_author():

    # Get the input information - author & tweet
    author_repre_input = Input(shape=(100,), name='author_input')
    tweet_input = Input(shape=(13, 100, 1), name='tweet_input')

    # Create the convolutional layer and lstm layer
    conv2d = Conv2D(filters = 200, kernel_size = (2, 100), padding='same', activation='relu', 
                    use_bias=True, name='conv_1')(tweet_input)
    flat = Flatten(name='flatten_1')(conv2d)
    reshape_flat = Reshape((260000, 1), name='reshape_1')(flat)
    lstm = LSTM(100, return_state=False, activation='tanh', recurrent_activation='hard_sigmoid', name='lstm_1')(reshape_flat)
    concatenate_layer = concatenate([lstm, author_repre_input], axis=1, name='concat_1')
    dense_1 = Dense(10, activation='relu', name='dense_1')(concatenate_layer)
    output = Dense(3, activation='softmax', kernel_regularizer=regularizers.l2(0.01), name='output_dense')(dense_1)

    # Build the model
    model = Model(inputs=[author_repre_input, tweet_input], outputs=output)
    return model

model = conv2d_lstm_with_author()
model.summary()

optimizer = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])

Форма моих двух входов и метки:

author_repre_input: (40942, 100)
tweet_input: (40942, 13, 100, 1)
my label Train_Y: (40942, 3)

Снимок сводки модели:

enter image description here

Когда я использую следующий код для обучения данных:

model.fit([author_repre_input, tweet_input], [Train_Y], epochs=20, batch_size=32, validation_split=0.2, 
          shuffle=False, verbose=2)

Результат продолжает зависать в первой эпохе и журнале ничего полезного не показывает, просто:

Epoch 1/20

Мне интересно, почему это происходит. Используемая мной версия tenorflow и keras:

tensorflow - 1.14.0
keras - 2.2.0

Большое спасибо за потраченное время!


Обновление 20 января ...

Я пытаюсь использовать Google Colab для обучения модели. Я проверяю оперативную память при запуске модели. Colab выделяет для меня 25G RAM. Однако после нескольких секунд обучения сеанс завершился сбоем из-за занятия всей доступной оперативной памяти ...

enter image description here

Я думаю, что-то не так с часть модели ... Любые предложения и идеи будут оценены!

Ответы [ 2 ]

3 голосов
/ 19 января 2020

К счастью для вас, вы не застряли.

Проблема заключается в том, что в вашем model.fit вы указали параметр verbose=2.

Это означает, что ваш код будут выводить только сообщения в конце эпохи, но не информативные во время обучения.

Чтобы решить вашу проблему и увидеть прогресс обучения, установите verbose=1.

0 голосов
/ 05 февраля 2020

Я думаю, что нашел ответ ...

Проблема в сверточном слое. Размер ядра слишком мал, что приводит к слишком высокой размерности выходного слоя. Чтобы решить эту проблему, я изменил размер ядра с (2, 100) на (3, 100). Кроме того, я также добавляю отсев в мою модель. Краткое описание модели, которую я сейчас использую, приведено ниже:

enter image description here

Теперь модель может работать гладко в Google Colab.

Следовательно , я думаю, если возникает подобная проблема, пожалуйста, проверьте выходной размер каждого слоя. API Keras может остановиться в эпоху обучения, если модель создает очень большой размерный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...