Я хочу иметь две потери в моей модели кеора тензорного потока, и один из них принимает промежуточный слой в качестве входных данных. Этот код работает, когда я использую keras, но когда дело доходит до tenorflow.keras, я сталкиваюсь со следующей ошибкой:
def loss_VAE(input_shape, z_mean, z_var, weight_L2=0.1, weight_KL=0.1):
def loss_VAE_(y_true, y_pred):
c, H, W, D = input_shape
n = c * H * W * D
loss_L2 = K.mean(K.square(y_true - y_pred), axis=(1, 2, 3, 4)) # original axis value is (1,2,3,4).
loss_KL = (1 / n) * K.sum(
K.exp(z_var) + K.square(z_mean) - 1. - z_var,
axis=-1
)
return weight_L2 * loss_L2 + weight_KL * loss_KL
return loss_VAE_
def loss_gt(e=1e-8):
def loss_gt_(y_true, y_pred):
intersection = K.sum(K.abs(y_true * y_pred), axis=[-3,-2,-1])
dn = K.sum(K.square(y_true) + K.square(y_pred), axis=[-3,-2,-1]) + e
return - K.mean(2 * intersection / dn, axis=[0,1])
return loss_gt_
model.compile(
adam(lr=1e-4),
[loss_gt(dice_e), loss_VAE(input_shape, z_mean, z_var, weight_L2=weight_L2, weight_KL=weight_KL)],
# metrics=[dice_coefficient]
)
Ошибка:
_SymbolicException: Inputs to eager execution function cannot be Keras symbolic tensors, but found [<tf.Tensor 'Dec_VAE_VDraw_Var/Identity:0' shape=(None, 128) dtype=float32>, <tf.Tensor 'Dec_VAE_VDraw_Mean/Identity:0' shape=(None, 128) dtype=float32>]
Это ошибка? пожалуйста, найдите полный код в этом NOTEBOOK .
и ЭТОМ является ссылкой на данные.