Keras - K.print在Loss Function中不起作用

问题描述 投票:0回答:1

我写了一个自定义损失函数adjusted_r2。我试图在函数内部打印张量值,但是当打印日志时,我什么都看不到。有人可以帮助我。

def coeff_determination(y_true, y_pred):
    from keras import backend as K
    SS_res =  K.sum(K.square( y_true-y_pred ))
    SS_tot = K.sum(K.square( y_true - K.mean(y_true) ) )

    SS_res = K.print_tensor(SS_res, message='SS_res = ')
    SS_tot = K.print_tensor(SS_tot, message='SS_tot = ')

    r_squared = 1 - SS_res/(SS_tot + K.epsilon())

    r_squared = K.print_tensor(r_squared, message='r_squared = ')


    adj_r_squared = 1 -( (1-r_squared)*K.cast(K.shape(y_true)[0]-1,"float32")/K.cast((K.shape(y_true)[0]-n_features-1),"float32"))

    adj_r_squared = K.print_tensor(adj_r_squared, message='adj_r_squared = ')

    return -adj_r_squared

日志是:

1/250 [..............................] - ETA: 51:44 - loss: -6.7060 - coeff_determination: -6.7060 - mean_squared_error: 40.5785

 2/250 [..............................] - ETA: 42:56 - loss: -7.2036 - coeff_determination: -7.2036 - mean_squared_error: 48.8251

 3/250 [..............................] - ETA: 41:30 - loss: -8.0279 - coeff_determination: -8.0279 - mean_squared_error: 48.1565

 4/250 [..............................] - ETA: 40:48 - loss: -9.1016 - coeff_determination: -9.1016 - mean_squared_error: 51.9965
tensorflow keras
1个回答
0
投票

K.print_tensor()函数在评估张量时起作用(参见documentation here)。调用自定义丢失函数时,不会初始化张量。这就是为什么你不能从损失函数中评估张量值的原因。自定义丢失函数的参数是张量,它们用作占位符,而不附加实际数据。

这个thread也讨论过同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.