【问题标题】:How to write a conditional with many conditions using keras?如何使用 keras 编写具有多个条件的条件?
【发布时间】:2021-04-11 16:52:20
【问题描述】:

我有以下自定义损失:

def Loss(y_true,y_pred):
    y_pred = relu(y_pred)
    z = k.maximum(y_true, y_pred)
    y_pred_negativo = Lambda(lambda x: -x)(y_pred)
    w = k.abs(add([y_true, y_pred_negativo])) 
    if k.sum(z) == 0.0:
        erro = 0.0
    elif k.sum(y_true) == 0.0 and k.sum(z) != 0:
        erro = 100
    else:
        erro = (k.sum(w)/k.sum(z))*100.0
    return erro

但是,如您所见,我将 numpy 与条件张量混合在一起。因此,我必须将这个条件写成张量格式。

if k.sum(z) == 0.0:
    erro = 0.0
elif k.sum(y_true) == 0.0 and k.sum(z) != 0:
    erro = 100
else:
    erro = (k.sum(w)/k.sum(z))*100.0

我知道如何为if else 格式做到这一点,但对于这么多条件却不知道。谢谢!

【问题讨论】:

    标签: if-statement keras conditional-statements tensor


    【解决方案1】:

    这是我自己对 keras 条件语句的定义。

    def energia_perdida_tensorial(y_true,y_pred):
        y_pred = relu(y_pred)
        z = k.maximum(y_true, y_pred)
        y_pred_negativo = Lambda(lambda x: -x)(y_pred)
        w = k.abs(add([y_true, y_pred_negativo])) 
        erro = k.switch(k.equal(k.sum(z), 0.0), lambda: 0.0, lambda: (k.sum(w)/k.sum(z))*100.0)
        erro = k.switch(k.all([k.equal(k.sum(y_true), 0), k.greater(k.sum(z), 0)], axis=0), lambda: 100.0, lambda: erro)
        return erro
    

    如果有任何错误或更优雅的定义方式,请做出贡献。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多