【问题标题】:Keras - Copy tensor as non-trainableKeras - 将张量复制为不可训练
【发布时间】:2017-10-03 14:33:00
【问题描述】:

我正在创建一个自定义 keras 函数(用于 lambda 层或损失函数),在某些时候需要将可训练张量的值作为常数。

它用于对 var 进行实验性标准化。我希望它是 1,但它应该在训练期间不断更新。

def normFunc(inputTrainableTensor):

    #I want this function - here in pseudocode:
    nonTrainableVersion = K.make_a_non_trainable_copy(inputTrainableTensor)

    return inputTrainableTensor / nonTrainableVersion

就导数而言,这相当于anyConstant * inputTrainableTensor

【问题讨论】:

    标签: tensorflow keras


    【解决方案1】:

    您可以使用keras backend 中的K.stop_gradient() 方法来做到这一点。

    import keras.backend as K
    
    def customLoss(yTrue,yPred):
        return yPred / K.stop_gradient(yPred)
    

    使用此损失函数将导致损失值在每个 epoch 中始终为 1,尽管模型将继续训练并最终将 yPred 设为 0,并在 yPred 为负数的情况下继续这样做。

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 2019-09-30
      • 1970-01-01
      相关资源
      最近更新 更多