【问题标题】:Can you process a tensor in chunks in a custom Keras loss function?您可以在自定义 Keras 损失函数中处理块中的张量吗?
【发布时间】:2017-03-28 10:49:35
【问题描述】:

我正在尝试编写一个自定义 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 的自动微分框架中做到这一点?

【问题讨论】:

    标签: tensorflow deep-learning keras


    【解决方案1】:

    试试:

    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
    

    您需要知道y_truey_pred 中的shape(batch_size, output_size),因此您需要在计算过程中跳过第一个维度。

    【讨论】:

      猜你喜欢
      • 2020-01-08
      • 2021-02-08
      • 2020-05-30
      • 1970-01-01
      • 2021-01-03
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多