我的输出是一个包含 5 个元素的一维数组,它在模型中看起来像这样:
out_vector = Dense(out_count, activation='relu', name='out_vector')(network_layer_3)
哪里out_count
是 5(这并不重要)。当我将它与 true_out_vector
进行比较时,另一个 5D 数组,我希望损失是“元素绝对差的最大值”。
简单的例子我的意思:
v1 = [94, 1000, 50, 85, 23]
v2 = [100, 430, 88, 12, 90]
我希望我的损失等于最大的绝对差值,即 |1000 - 430| = 570
显然,因为元素 2 具有最大的差异。我在 Keras 中无法实现此目的。这是我尝试过的:
def customLoss(yTrue,yPred):
return K.maximum(K.abs(yTrue - yPred))
但我收到错误:
File "C:\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py", line 609, in ndim
dims = x.get_shape()._dims
AttributeError: 'int' object has no attribute 'get_shape'
我确信应该有一种简单的方法来完成我想要的事情。
最佳答案
这个怎么样:
from keras import backend as K
v1 = K.constant([94, 1000, 50, 85, 23])
v2 = K.constant([100, 430, 88, 12, 90])
def customLoss(yTrue, yPred):
return K.max(K.abs(yTrue - yPred))
result = customLoss(v1, v2)
sess = K.get_session()
print(sess.run(result))
输出是:
570.0
注意:方法 K.maximum
需要两个张量,而您只传递一个张量
关于python - Keras Python自定义损失函数给出张量(绝对差)的最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58163571/