Использование fit_generator с несколькими входами дает ошибку на выходе плотного слоя - PullRequest
0 голосов
/ 29 мая 2019

В моем случае я использую набор последовательных функций, а также непоследовательных функций для обучения модели. Ниже приведена архитектура моей модели

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,)

Я думаю, что последний слой получает всю мощность генератора, но не как один за другим.

В чем причина этой проблемы. Цените ваши идеи по этому вопросу.

1 Ответ

0 голосов
/ 29 мая 2019

Выходные данные дают плотный слой с размером 4. Поскольку вы объявили свой выходной слой как плотный слой с размером 1, он падает.

Что вы можете сделать, это изменить плотность выходного сигналаСлой до 4. А затем вручную преобразовать это в одно значение.

Надеюсь, это ответит на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...