Я пытаюсь обучить архитектуру условного кодирования, используя 2 LSTM. Однако, когда я передаю свое вложение в качестве ввода в модуль fit
, я получаю сообщение об ошибке. Это в основном модель с несколькими входами.
sequence_length = X_train.shape[1]
sequence_lengthP = Xprev.shape[1]
embedding_layerP = Embedding(vocab_sizeP, 300, weights=[embedding_matrixP], input_length=maxlen, trainable=False)
inputsP = Input(shape=(sequence_lengthP,))
embeddingP = embedding_layerP(inputsP)
reshapeP = Reshape((sequence_lengthP, EMBEDDING_DIM, 1))(embeddingP)
embedding_layer = Embedding(vocab_size, 300, weights=[embedding_matrix], input_length=maxlen, trainable=False)
inputs = Input(shape=(sequence_length,))
embedding = embedding_layer(inputs)
reshape = Reshape((sequence_length, EMBEDDING_DIM, 1))(embedding)
prev_input = Input(shape=(sequence_lengthP,300,),name='prev_input')
prev_lstm = LSTM(64, name='prev_lstm', return_state=True)
prev_output, state_h, state_c = prev_lstm(prev_input)
final_prev_states = [state_h, state_c]
main_input = Input(shape=(sequence_length,300,),name='main_input')
main_lstm = LSTM(64, name='main_lstm', return_state=True)
main_outputs, _, _ = main_lstm(main_input, initial_state=final_prev_states)
dense = Dense(100, activation='relu', name='dense')(main_outputs)
output = Dense(3, activation='softmax', name='output')(dense)
model_cond = Model(inputs=[prev_input, main_input], outputs=output)
model_cond.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
history = model_cond.fit([embeddingP, embedding], y_train, epochs=150, verbose=1, validation_data=(X_val, y_val), shuffle=False) # starts training
Ошибка:
ValueError: When feeding symbolic tensors to a model, we expect the tensors to have a static batch size. Got tensor with shape: (None, 27, 300)
Мои embedding
и embeddingP
имеют форму (?, 27, 300). Есть ли у вас какие-либо идеи, что я должен передать в качестве входных данных для модуля fit
?