Я пытаюсь построить модель CNN + RNN для своего проекта, но я получил ошибку после объединения слоев, чтобы передать ее в качестве входных данных для LSTM.
Модель, которую я пытаюсь построить: МОДЕЛЬ
Ошибка:
ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=2
со следующим кодом:
kernel_size1 = 3
kernel_size2 = 5
dropout = 0.2
learning_rate = 0.001
weights = initializers.TruncatedNormal(mean=0.0, stddev=0.1, seed=2)
nb_filter = 64
rnn_output_size = 128
hidden_dims = 512
wider = True
deeper = True
batch_size=128
def build_model():
input_news = Input(shape=(max_daily_length,), name='News_Input')
embedding = Embedding(input_dim=vocabulary_size, # size of the vocabulary
output_dim=embedding_dimension,
weights=[word_vectors],
trainable=False,
input_length=max_daily_length)(input_news)
input_price = Input(shape=(len(selected_features),),
name='Price_Input')
x = Dropout(dropout)(embedding)
x = Convolution1D(filters=nb_filter,
kernel_size=kernel_size1,
padding='same',
activation='relu')(x)
x = MaxPooling1D(pool_size=2)(x)
x = Convolution1D(filters=nb_filter,
kernel_size=kernel_size2,
padding='same',
activation='relu')(x)
x = MaxPooling1D(pool_size=2)(x)
x = Flatten(name='flate_0')(x)
x = Dense(units=1024,
activation='relu',
name='dense_0')(x)
x = Dense(units=1024,
activation='relu',
name='dense_1')(x)
model_concat = concatenate(inputs=[input_price, input_news], axis=-1)
lstm = LSTM(rnn_output_size,
activation=None,
kernel_initializer=weights,
batch_size=batch_size,
dropout=dropout)(model_concat)
model_concat = Dense(hidden_dims, kernel_initializer=weights)(lstm)
model_concat = Dropout(dropout)(model_concat)
if deeper == True:
model_concat = Dense(hidden_dims//2, kernel_initializer=weights)(model_concat)
model_concat = Dropout(dropout)(model_concat)
model_output = Dense(1, kernel_initializer=weights, name='output')(model_concat)
model = Model(inputs=[input_news, input_price], outputs=[model_output])