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

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

我的输出是由5个元素组成的一维数组,在模型中看起来像这样:

out_vector = Dense(out_count, activation='relu', name='out_vector')(network_layer_3)

其中out_count为5(不是很重要)。当我将其与另一个5D数组true_out_vector比较时,我希望损失是“元素绝对差的最大值”。

简单的例子,我的意思是:

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'

我确定应该有一种简单的方法来执行我要执行的操作。在此先感谢您的帮助。

python tensorflow keras
1个回答
0
投票

怎么样:

import tensorflow as tf
from keras import backend as K
v1 = tf.constant([94, 1000, 50, 85, 23])
v2 = tf.constant([100, 430, 88, 12, 90])
print(type(v1))

def customLoss(yTrue, yPred):
    return tf.math.reduce_max(K.abs(yTrue - yPred))

result = customLoss(v1, v2)

with tf.Session() as sess:
    print(sess.run(result))

并且输出是:

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