你能用自定义Keras损失函数处理块中的张量吗?

时间:2017-03-28 10:49:36

标签: tensorflow deep-learning keras

我正在尝试编写一个cusom Keras损失函数,其中我处理子向量块中的张量。例如,如果输出张量表示四元数系数的串联(即w,x,y,z,w,x,y,z ......),我可能希望在计算损失中的均方误差之前对每个四元数进行归一化功能如:

def norm_quat_mse(y_true, y_pred):
    diff = y_pred - y_true
    dist = 0
    for i in range(0,16,4):
        dist += K.sum( K.square(diff[i:i+4] / K.sqrt(K.sum(K.square(diff[i:i+4])))))

    return dist/4

虽然Keras会毫无错误地接受此功能并在训练中使用,但它在作为独立函数应用时和使用model.predict()时会输出不同的损失值,因此我怀疑它无法正常工作。没有内置的Keras损失函数使用这种每块处理方法,是否可以在Keras的自动差异化框架中实现这一点?

1 个答案:

答案 0 :(得分:0)

尝试:

def norm_quat_mse(y_true, y_pred):
    diff = y_pred - y_true
    dist = 0
    for i in range(0,16,4):
        dist += K.sum( K.square(diff[:,i:i+4] / K.sqrt(K.sum(K.square(diff[:,i:i+4])))))

    return dist/4

您需要知道shape y_truey_pred (batch_size, output_size)sudo apt-get install libleptonica-dev ,因此您需要在计算过程中跳过第一维。