【问题标题】:Own Loss Function in KERASKERAS 中的自身损失函数
【发布时间】:2017-12-21 01:09:24
【问题描述】:
  1. 如何定义我自己的损失函数,它需要 Keras 中先前层的权重和偏差参数?

  2. 如何从每一层获得 [W1, b1, W2, b2, Wout, bout]?在这里,我们需要传递比平常更多的变量(y_true,y_pred)。我附上了两张图片供您参考。

我需要实现这个损失函数。 enter image description here

enter image description here

【问题讨论】:

    标签: tensorflow computer-vision deep-learning keras


    【解决方案1】:

    为了回答您的第二部分,我使用以下代码来获取模型中每一层的规范以用于可视化目的:

    for layer in model.layers:
        if('Convolution' in str(type(layer))):
            i+=1
            layer_weight = []
            for feature_map in layer.get_weights()[0]:
                layer_weight.append(linalg.norm(feature_map) / np.sqrt(np.prod(feature_map.shape)))
            l_weights.append((np.sum(layer_weight)/len(layer_weight), layer.name, i))
            weight_per_layer.append(np.sum(layer_weight)/len(layer_weight))
            conv_weights.append(layer_weight)
    

    现在要在损失函数中使用它,我会尝试这样的事情:

    def get_loss_function(weights):
       def loss(y_pred, y_true):
           return (y_pred - y_true) * weights # or whatever your loss function should be
       return loss
    model.compile(loss=get_loss_function(conv_weights), optimizer=SGD(lr=0.1))
    

    【讨论】:

    • 还有一个问题说,比如我在用l2_regularization,Tensorflow有-tf.nn.l2_loss这个可以用吗? 1. K.sum(K.square(K.abs(Weights))) 2. tf.nn.l2_loss 可以互换使用吗?
    • 我很确定 l2 正则化存储在模型的层中,可以使用层接口提取。
    猜你喜欢
    • 2021-05-23
    • 2020-12-19
    • 2017-12-18
    • 2020-03-27
    • 1970-01-01
    • 2018-11-12
    • 2018-12-21
    • 1970-01-01
    • 2018-10-28
    相关资源
    最近更新 更多