Keras自定义损失函数用于多元正态分布输出

时间:2019-11-25 12:03:36

标签: python tensorflow keras normal-distribution loss-function

我有一个网络,该网络输出代表2个正态分布参数的4个值,例如:

[mu1, sigma1, mu2, sigma2]

我想使用对数概率损失函数进行训练,但是我不知道如何实现自定义损失函数。

我尝试了以下定义,但显然不起作用。我看到的所有自定义函数都使用输入值“如此”(例如yPred和yTrue表示相同类型的数据),不需要将这些输入分为不同部分进行损耗计算。

def loss_multivariate_normal(yTrue,yPred):
    p1 = -keras.backend.square(yTrue[0][:]-yPred[0][:])/(2*yPred[1][:])
    p2 = -keras.backend.log(keras.backend.sqrt(2*math.pi*keras.backend.square(yPred[1][:])))
    p3 = -keras.backend.square(yTrue[2][:]-yPred[3][:])/(2*yPred[3][:])
    p4 = -keras.backend.log(keras.backend.sqrt(2*math.pi*keras.backend.square(yPred[3][:])))
    return p1+p2+p3+p4

当我使用该函数时,会出现此错误

InvalidArgumentError: slice index 2 of dimension 0 out of bounds. [[Node: loss/main_output_loss/strided_slice_4 = StridedSlice[Index=DT_INT32, T=DT_FLOAT, begin_mask=0, ellipsis_mask=0, end_mask=0, new_axis_mask=0, shrink_axis_mask=1, _device="/job:localhost/replica:0/task:0/device:CPU:0"](_arg_main_output_target_0_1, loss/main_output_loss/strided_slice_2/stack_1, loss/main_output_loss/strided_slice_5/stack, loss/main_output_loss/strided_slice_1/stack_1)]]

0 个答案:

没有答案