ValueError: вход 0 несовместим со слоем batch_normalization_1: ожидаемый ndim = 3, найденный ndim = 2 - PullRequest
0 голосов
/ 24 марта 2019

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

В исходном коде они определяют свой подход "DBRNN-A: глубокая двунаправленная рекуррентная нейронная сеть с механизмом внимания и с модулями долговременной кратковременной памяти (LSTM)" с этой частью кода:

input = Input(shape=(max_sentence_len,), dtype='int32')
sequence_embed = Embedding(vocab_size, embed_size_word2vec, input_length=max_sentence_len)(input)

forwards_1 = LSTM(1024, return_sequences=True, dropout_U=0.2)(sequence_embed)
attention_1 = SoftAttentionConcat()(forwards_1)
after_dp_forward_5 = BatchNormalization()(attention_1)

backwards_1 = LSTM(1024, return_sequences=True, dropout_U=0.2, go_backwards=True)(sequence_embed)
attention_2 = SoftAttentionConcat()(backwards_1)
after_dp_backward_5 = BatchNormalization()(attention_2)

merged = merge([after_dp_forward_5, after_dp_backward_5], mode='concat', concat_axis=-1)
after_merge = Dense(1000, activation='relu')(merged)
after_dp = Dropout(0.4)(after_merge)
output = Dense(len(train_label), activation='softmax')(after_dp)                
model = Model(input=input, output=output)
model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=1e-4), metrics=['accuracy']) 

SoftAttentionConcat реализация от здесь .Остальные функции из keras.Кроме того, в бумаге они разделяют структуру следующим образом:

DBRNN-A

В первой строке нормализации партии выдается эта ошибка:

ValueError: Input 0 is incompatible with layer batch_normalization_1: expected ndim=3, found ndim=2

Когда я использую max_sentence_len=50 и max_sentence_len=200, я смотрю на размер до точки ошибки, я вижу следующие формы:

Input               -> (None, 50)
Embedding           -> (None, 50, 200)
LSTM                -> (None, None, 1024)
SoftAttentionConcat -> (None, 2048) 

Итак, кто-нибудь видитпроблема здесь?

1 Ответ

0 голосов
/ 19 июня 2019

Полагаю, проблема в использовании кода тензорного потока в структуре Keras или в некоторых проблемах с версией.

Используя вопрос и ответы здесь , я реализовал механизм внимания в Keras следующим образом:

attention_1 = Dense(1, activation="tanh")(forwards_1)
attention_1 = Flatten()(attention_1)  # squeeze (None,50,1)->(None,50)
attention_1 = Activation("softmax")(attention_1)
attention_1 = RepeatVector(num_rnn_unit)(attention_1)
attention_1 = Permute([2, 1])(attention_1)
attention_1 = multiply([forwards_1, attention_1])
attention_1 = Lambda(lambda xin: K.sum(xin, axis=1), output_shape=(num_rnn_unit,))(attention_1)

last_out_1 = Lambda(lambda xin: xin[:, -1, :])(forwards_1)
sent_representation_1 = concatenate([last_out_1, attention_1])

Это работает довольно хорошо.Весь исходный код, который я использовал для реализации, доступен в GitHub .

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