将重量衰减损失添加到Keras的最终损失中

时间:2020-06-18 06:24:25

标签: python tensorflow keras deep-learning neural-network

我编写了一个自定义训练循环,我还使用tf.GradientTape()计算了损耗和梯度

def grads_ds(model, inputs, y_true, cw):   
    with tf.GradientTape() as ds_tape:
        y_pred = model(inputs)

        y_true = to_categorical(y_true,NUM_CLASSES)

        loss = -1*K.sum(y_true*cw*K.log(y_pred))

    grads = ds_tape.gradient(loss,model_ds.trainable_variables,unconnected_gradients=tf.UnconnectedGradients.NONE)
    return grads

现在,我不知道如何将重量衰减损失加到这种损失上。

我有一个经过预训练的网络,其输出为“全局平均池”,然后进行平坦化(第1层),然后馈入4096 FC层(第2层),随后是具有3个节点的最后一层(第3层)。

因此,我必须添加该零件的权重衰减损耗,因为我将经过预训练的零件保持冻结状态。

要增加重量衰减损失,我将通过以下代码计算出的损失加到交叉熵损失中

weight_decay_loss = 0.0
    for layer in model.layers:
        if layer.trainable == True:
            if len(layer.get_weights())>0):
                for i in range(2):
                    weight_decay_loss += l * K.sum(K.square(layer.get_weights()[i]))

最后我愿意

total_loss = K.sum(loss + weight_decay_loss)

这是在Keras中将体重减轻损失添加到总损失中的正确方法吗?

0 个答案:

没有答案