У меня проблемы с выполнением пользовательских функций потерь в Керасе.
В нашей модели размер конечного слоя (y_pred
) равен [32, 365], что рассматривается как квантованная скорость дляследующие 365 таймфреймов.
Я хотел бы сделать пользовательскую функцию потерь, которая включает как перекрестную энтропию, так и RMSE.Таким образом, операции требуют 1) дополнительной предварительной обработки y_pred
для генерации логитов размера [32, 1] для вычисления кросс-энтропии с двоичными метками (y_true)
и 2) еще одной предварительной обработки y_pred
для генерации дополнительной [32,1] значения для вычисления RMSE с числовыми метками.
Насколько я знаю, y_true
и y_pred
должны иметь одинаковое измерение в пользовательской функции потерь Keras.Но в моем случае размер y_pred
равен [32, 365].Должен ли я сделать измерение y_true как [32, 365] или добавить вышеупомянутые этапы предварительной обработки в модель Keras до вычисления двух потерь?
В моем предыдущем решении я сделал пользовательскую функцию потерь таким образом, но теперь я сомневаюсь, что размерность y_true равна [32, 2].Если размерность [32, 365], какими будут значения данных ???
def losses(y_true, y_pred):
a = 0.2
loss1 = rmse_loss(y_true, preprocess1(y_pred))
loss2 = ce_loss(y_true, preprocess2(y_pred))
loss = 0.2*loss1 + 0.8*loss2
return loss
Дополнительная информация: Вывод train_generator
представляет собой кортеж размеров [32, 10], [32, 2], где 32 - размер мини-партиии 10 - число ковариат, а 2 - количество меток (двоичных, числовых)
train_data = self.train_data_generator()
ntd = next(train_data)
print(ntd[0].shape, ntd[1].shape)
>>> [32, 10], [32, 2]