python - Keras Python自定义损失函数给出张量(绝对差)的最大值?

标签 python tensorflow keras

我的输出是一个包含 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/

相关文章:

python - 在 Tensorflow 图中查找所需的占位符

python - 如何提取 Keras 层权重作为可训练参数?

python - 在keras中弹出上层

python - 使用 MD5 和 SQL 进行服务器授权

python - 如果它们具有相同列的值,如何更新 pandas 列?

tensorflow - 在 TensorFlow 中将 2D 卷积转换为 1D 卷积 + 仿射变换?

python - GradientTape : LookupError: No gradient defined for operation 'IteratorGetNext' (op type: IteratorGetNext) 中的简单 Keras 网络

python - 如何以编程方式向 pdf 添加背景?

python - 我如何让模块认为它的名字是 __main__?

python - Tensorflow ValueError : Shapes (? , 1) 和 (?,) 不兼容