Предположим, что я хотел бы обучить генеративную сеть, эта сеть должна поддерживать обратный ход на основе двух функций потерь. Второй (input_XB )
- это потеря преобразования Image (A -> A´), только с использованием MSE. Первая потеря должна быть чем-то другим, в случае если это, например, расстояние канала оттенка HSV между двумя изображениями (difference A(Hue)/A´(Hue))
или полностью другое. Это отличается от того, что мне потребуется внешняя предварительная обработка вывода генератора (g_model_1)
, например, с помощью opencv, прежде чем вычислять потери.
Как мне этого добиться? Я знаю, что использование tenorflow с gradient-tape
и API низкого уровня может помочь мне в этом. Но есть ли какая-либо комбинация, потому что мой подход не строит правильный граф, потому что я не передаю все входы по модели генератора.
def define_composite_model_B(g_model_1, image_shape,image_shape2):
g_model_1.trainable = True
# discriminator outsorced
input_A = Input(shape=image_shape2)
# transformation loss
input_XB = Input(shape=image_shape)
B_fake=g_model_1(input_XB)
model = Model([input_A,input_XB],[input_A,B_fake])
opt = Adam(lr=0.0002, beta_1=0.5)
model.compile(loss=['binary_crossentropy','mse'], optimizer=opt)
model.summary()
return model