Как генератор пользовательских данных возвращает составленную метку - PullRequest
0 голосов
/ 04 ноября 2019

Я реализую подклассы генератора данных tf.keras.utils.Sequence. Его getitem возвращает составную метку вместе с данными, например

def __getitem__(self, idx):
    ......
    return image_batch, [label_batch_part1, label_batch_part2]

label_batch_part1 и label_batch_part2 имеют различную форму. Я передал экземпляр генератора (train_gen) в model.fit_generator tf.keras, например

model.compile(optimizer = Adam(lr = 1e-4), loss = my_cost_func, metrics = ['accuracy'])
model.fit_generator(train_gen,
                    steps_per_epoch=50,
                    epochs=100,
                    callbacks=[model_checkpoint])

У меня также есть пользовательская функция потерь, например

def my_cost_func(y_true, y_pred, **kwargs):
    y_true_part1, y_true_part2 = y_true[0], y_true[1]
    cost = y_true_part1 - op(y_true_part2, y_pred)
    ... ...

, где я ожидаю, что y_true_part1это label_batch_part1, а y_true_part2 это label_batch_part2.

Пока что я получил ошибку времени выполнения:

File "/home/chris/hdd2nd/dev/mlenv/lib/python3.6/site-packages / tenorflow / python / keras / engine / training_utils.py ", строка 346, в standardize_input_data ValueError: Ошибка при проверке цели модели: список массивов Numpy, передаваемых в вашу модель, не соответствует размеру, ожидаемому моделью. Ожидается увидеть 1 массив (ов), но вместо этого получил следующий список из 2 массивов

Мне интересно, как правильно это сделать?

Спасибо

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