В моем случае я использую набор последовательных функций, а также непоследовательных функций для обучения модели. Ниже приведена архитектура моей модели
Sequential features -> LSTM -> Dense(1) --->>
\
\
-- Dense -> Dense -> Dense(1) ->output
/
Non-sequential features---/
Я использую генератор данных для генерации пакетов для последовательных данных. Здесь размер партии варьируется для каждой партии. Для одной партии я фиксирую непоследовательную функцию. Ниже приведен мой генератор данных.
def training_data_generator(raw_data):
while True:
for index, row in raw_data.iterrows():
x_train, y_train = list(), list()
feature1 = row['xxx']
x_current_batch = []
y_current_batch = []
for j in range(yyy):
x_current_batch.append(row['zz1'])
y_current_batch.append(row['zz2'])
x_train.append(x_current_batch)
y_train.append(y_current_batch)
x_train = array(x_train)
y_train = array(y_train)
yield [x_train, np.reshape(feature1,1)], y_train
Примечание : x_train y_train размеры варьируются.
Ниже приведена моя модель реализации.
seq_input = Input(shape=(None, 3))
lstm_layer = LSTM(50)(seq_input)
dense_layer1 = Dense(1)(lstm_layer)
non_seq_input = Input(shape=(1,))
hybrid_model = concatenate([dense_layer1, non_seq_input])
hidden1 = Dense(10, activation = 'relu')(hybrid_model)
hidden2 = Dense(10, activation='relu')(hidden1)
final_output = Dense(1, activation='sigmoid')(hidden2)
model = Model(inputs = [seq_input, non_seq_input], outputs = final_output)
model.compile(loss='mse',optimizer='adam')
model.fit_generator(training_data_generator(flatten), steps_per_epoch= 5017,
epochs = const.NUMBER_OF_EPOCHS, verbose=1)
Я получаю ошибку на выходе плотного слоя
ValueError: Error when checking target:
expected dense_4 to have shape (1,) but got array with shape (4,)
Я думаю, что последний слой получает всю мощность генератора, но не как один за другим.
В чем причина этой проблемы. Цените ваши идеи по этому вопросу.