ValueError: Ошибка при проверке цели: ожидалось, что плотность_2 имеет 2 измерения, но получен массив с формой (3306, 67, 1) - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь обучить нейронную сеть на Семанти c Задача «Ролевая маркировка» (задача классификации текста). Набор данных состоит из предложений, по которым нейронная сеть должна быть обучена, чтобы предсказать класс для каждого слова. Помимо использования матрицы встраивания, я также использую другие функции (meta_data_features). Число классов в Y_train - 61. Число 3306 представляет количество предложений в моем наборе данных (размер моего набора данных). MAX_LEN = 67. Код для архитектуры:

    embedding_layer = Embedding(67,
                                300,                                                                                                   
                                embeddings_initializer=Constant(embedding_matrix),                                                         
                                input_length=MAX_LEN,
                                trainable=False)

    sentence_input = Input(shape=(67,), dtype='int32')
    meta_input = Input(shape=(67,), name='meta_input')

    embedded_sequences = embedding_layer(sentence_input)

    x_1 = (SimpleRNN(256))(embedded_sequences) 

    x = concatenate([x_1, meta_input], axis=1)

    x = Dropout(0.3)(x)          

    x = Dense(32, activation='relu')(x)

    predictions = Dense(61, activation='softmax')(x)

    model = Model([sentence_input,meta_input], predictions)

    model.compile(loss='sparse_categorical_crossentropy',
                    optimizer='adam',
                     metrics=['sparse_categorical_accuracy'])    

    print(model.summary())

Снимок сводной информации о модели:

Layer (type)                    Output Shape         Param #     Connected to
==================================================================================================
input_1 (InputLayer)            (None, 67)           0
__________________________________________________________________________________________________
embedding_1 (Embedding)         (None, 67, 300)      1176000     input_1[0][0]
__________________________________________________________________________________________________
simple_rnn_1 (SimpleRNN)        (None, 256)          142592      embedding_1[0][0]
__________________________________________________________________________________________________
meta_input (InputLayer)         (None, 67)           0
__________________________________________________________________________________________________
concatenate_1 (Concatenate)     (None, 323)          0           simple_rnn_1[0][0]
                                                                 meta_input[0][0]
__________________________________________________________________________________________________
dropout_1 (Dropout)             (None, 323)          0           concatenate_1[0][0]
__________________________________________________________________________________________________
dense_1 (Dense)                 (None, 32)           10368       dropout_1[0][0]
__________________________________________________________________________________________________
dense_2 (Dense)                 (None, 61)           2013        dense_1[0][0]
==================================================================================================
Total params: 1,330,973
Trainable params: 154,973
Non-trainable params: 1,176,000
__________________________________________________________________________________________________

Вызов функции:

simple_RNN_model_trainable.fit([padded_sentences, meta_data_features], padded_verbs,batch_size=32,epochs=1)

X_train составляет [padded_sentences, meta_data_features] , а Y_train равно padded_verbs . Их формы:

padded_sentences - (3306, 67)

meta_data_features - (3306, 67)

padded_verbs - (3306, 67, 1)

Когда я пытаюсь соответствовать модели, я получаю сообщение об ошибке: «ValueError: Ошибка при проверке цели: ожидается, что плотность_2 имеет 2 измерения, но получен массив с формой (3306, 67, 1)» *

было бы здорово, если кто-нибудь может помочь мне в устранении ошибки. Спасибо!

...