#python #deep-learning #google-colaboratory
Вопрос:
Я попытался внедрить CNN BiLSTM Attn в Google Colab. Но я получаю следующие проблемы в форме модели.
Пожалуйста, ознакомьтесь с кодом модели ниже.
def get_cbilstm_attn_model(vocab_size, mode):
model = Sequential()
model.add(Embedding(vocab_size, EMBEDDING_DIM, weights=[embedding_matrix], input_length=MAX_SEQUENCE_LENGTH, trainable=True))
model.add(Conv1D(filters=300, kernel_size=3, activation='relu'))
model.add(Bidirectional(LSTM(128, recurrent_dropout=0.8, return_sequences=True)))
model.add(Dropout(0.8))
model.add(SeqSelfAttention(attention_activation='sigmoid', return_attention=False))
model.add(Dense(32, activation='relu'))
model.add(BatchNormalization())
model.add(Dense(12))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer=RMSprop(0.0001), metrics=['accuracy'])
print(model.summary())
return model
Модель подходит:
def train_model(model, vocab_size):
for _ in range(10):
hist=model.fit(X_train, y_train, batch_size=32, epochs=1, validation_data=[X_val, y_val], shuffle=True, callbacks=[EarlyStopping(monitor='val_loss', patience=1, min_delta=0.0001)], verbose=2)
Исполнение:
results = DataFrame()
vocab_size = len(tokenizer.word_index) 1
aspect_categories_model = get_cbilstm_attn_model(vocab_size, 'concat')
results['cbilstm_attn_valid'] = train_model(model, vocab_size)
Проблемы в Google Colab. Но это прекрасно работает в Spyder.
Model: "sequential_13"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding_13 (Embedding) (None, 50, 100) 370600
_________________________________________________________________
conv1d_13 (Conv1D) (None, 48, 300) 90300
_________________________________________________________________
bidirectional_26 (Bidirectio (None, 48, 256) 439296
_________________________________________________________________
dropout_39 (Dropout) (None, 48, 256) 0
_________________________________________________________________
seq_self_attention_12 (SeqSe (None, None, 256) 16449
_________________________________________________________________
dense_20 (Dense) (None, None, 32) 8224
_________________________________________________________________
batch_normalization_8 (Batch (None, None, 32) 128
_________________________________________________________________
dense_21 (Dense) (None, None, 12) 396
_________________________________________________________________
activation_8 (Activation) (None, None, 12) 0
=================================================================
Total params: 925,393
Trainable params: 925,329
Non-trainable params: 64
_________________________________________________________________
None
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-77-caf932d4333f> in <module>()
1 aspect_categories_model = get_bilstm_attn_model(vocab_size, 'concat')
----> 2 results['stack_bilstm_attn_valid'] = train_model(aspect_categories_model, vocab_size)
10 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
984 except Exception as e: # pylint:disable=broad-except
985 if hasattr(e, "ag_error_metadata"):
--> 986 raise e.ag_error_metadata.to_exception(e)
987 else:
988 raise
ValueError: in user code:
/usr/local/lib/python3.7/dist-packages/keras/engine/training.py:830 train_function *
return step_function(self, iterator)
/usr/local/lib/python3.7/dist-packages/keras/engine/training.py:813 run_step *
outputs = model.train_step(data)
/usr/local/lib/python3.7/dist-packages/keras/engine/training.py:771 train_step *
loss = self.compiled_loss(
/usr/local/lib/python3.7/dist-packages/keras/engine/compile_utils.py:201 __call__ *
loss_value = loss_obj(y_t, y_p, sample_weight=sw)
/usr/local/lib/python3.7/dist-packages/keras/losses.py:142 __call__ *
losses = call_fn(y_true, y_pred)
/usr/local/lib/python3.7/dist-packages/keras/losses.py:246 call *
return ag_fn(y_true, y_pred, **self._fn_kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:206 wrapper **
return target(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/keras/losses.py:1631 categorical_crossentropy
y_true, y_pred, from_logits=from_logits)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:206 wrapper
return target(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/keras/backend.py:4827 categorical_crossentropy
target.shape.assert_is_compatible_with(output.shape)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/tensor_shape.py:1161 assert_is_compatible_with
raise ValueError("Shapes %s and %s are incompatible" % (self, other))
ValueError: Shapes (None, 12) and (None, None, 12) are incompatible
Thanks in advance for your help.