Ошибка значения: Фигуры (Нет, 12) и (Нет, нет, 12) несовместимы в Google Colab

#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.