Keras 自定义损失函数:tf.function-装饰中的 ValueError
Keras custom loss function: ValueError in a tf.function-decorated
我正在尝试在 TF 2.2 中实现来自 this paper (an existing version in TensorFlow 1.10.1, made by the author of the paper can be found here) 的损失函数。
然而,损失函数的理论细节与我的问题无关。
我的损失函数:
def z_score_based_deviation_loss(y_true, y_pred):
confidence_margin = 5.0
ref = K.variable(np.random.normal(loc=0., scale=1.0, size=5000), dtype='float32')
dev = (y_pred - K.mean(ref)) / K.std(ref)
inlier_loss = K.abs(dev)
outlier_loss = K.abs(K.maximum(confidence_margin - dev, 0.))
return K.mean((1 - y_true) * inlier_loss + y_true * outlier_loss)
调用者:
model.compile(optimizer='adam', loss=z_score_based_deviation_loss)
我收到这个错误:
ValueError: tf.function-decorated function tried to create variables on non-first call.
我知道关于这个主题还有其他问题,但我没有发现任何与 Keras 中的自定义损失函数相关的问题。
我不知道如何适应它。
此外,根据我的阅读,当函数被标记为 @tf.function
时应该存在问题(无论如何推荐以加快计算速度),但我没有添加它.. .
这样试试
def z_score_based_deviation_loss(y_true, y_pred):
confidence_margin = 5.0
ref = tf.random.normal([5000], mean=0., stddev=1.)
dev = (y_pred - K.mean(ref)) / K.std(ref)
inlier_loss = K.abs(dev)
outlier_loss = K.abs(K.maximum(confidence_margin - dev, 0.))
return K.mean((1 - y_true) * inlier_loss + y_true * outlier_loss)
X = np.random.uniform(0,1, (100,10))
y = np.random.uniform(0,1, 100)
x_input = Input((10,))
intermediate = Dense(1, activation='linear', name = 'score')(x_input)
model = Model(x_input, intermediate)
model.compile('adam', z_score_based_deviation_loss)
model.fit(X, y, epochs=10)
我正在尝试在 TF 2.2 中实现来自 this paper (an existing version in TensorFlow 1.10.1, made by the author of the paper can be found here) 的损失函数。
然而,损失函数的理论细节与我的问题无关。
我的损失函数:
def z_score_based_deviation_loss(y_true, y_pred):
confidence_margin = 5.0
ref = K.variable(np.random.normal(loc=0., scale=1.0, size=5000), dtype='float32')
dev = (y_pred - K.mean(ref)) / K.std(ref)
inlier_loss = K.abs(dev)
outlier_loss = K.abs(K.maximum(confidence_margin - dev, 0.))
return K.mean((1 - y_true) * inlier_loss + y_true * outlier_loss)
调用者:
model.compile(optimizer='adam', loss=z_score_based_deviation_loss)
我收到这个错误:
ValueError: tf.function-decorated function tried to create variables on non-first call.
我知道关于这个主题还有其他问题,但我没有发现任何与 Keras 中的自定义损失函数相关的问题。 我不知道如何适应它。
此外,根据我的阅读,当函数被标记为 @tf.function
时应该存在问题(无论如何推荐以加快计算速度),但我没有添加它.. .
这样试试
def z_score_based_deviation_loss(y_true, y_pred):
confidence_margin = 5.0
ref = tf.random.normal([5000], mean=0., stddev=1.)
dev = (y_pred - K.mean(ref)) / K.std(ref)
inlier_loss = K.abs(dev)
outlier_loss = K.abs(K.maximum(confidence_margin - dev, 0.))
return K.mean((1 - y_true) * inlier_loss + y_true * outlier_loss)
X = np.random.uniform(0,1, (100,10))
y = np.random.uniform(0,1, 100)
x_input = Input((10,))
intermediate = Dense(1, activation='linear', name = 'score')(x_input)
model = Model(x_input, intermediate)
model.compile('adam', z_score_based_deviation_loss)
model.fit(X, y, epochs=10)