tensorflow - Layer.add_loss() 的目的和直觉是什么?它是如何工作的?它是否只计算当前层的损失?

标签 tensorflow keras deep-learning neural-network tensorflow2.0

我正在看关于 making a custom layertensorflow 教程并找到了类似这样的代码:

# A layer that creates an activity regularization loss
class ActivityRegularizationLayer(keras.layers.Layer):
    def __init__(self, rate=1e-2):
        super(ActivityRegularizationLayer, self).__init__()
        self.rate = rate

    def call(self, inputs):
        self.add_loss(self.rate * tf.reduce_sum(inputs))
        return inputs

然后他们将嵌套图层用作

class OuterLayer(keras.layers.Layer):
    def __init__(self):
        super(OuterLayer, self).__init__()
        self.activity_reg = ActivityRegularizationLayer(1e-2)

    def call(self, inputs):
        return self.activity_reg(inputs)

我知道外层也会处理内层的权重、偏差和损失,但我不明白的是,为什么它不是自定义损失函数而是一个层? 这应该只收集特定层的损失吗?如果是的话,我看不出它在做什么以及它怎么样?

最佳答案

您可以忽略 OuterLayer - 它表明损失属性包括嵌入层中的损失。 Keras 做了很多技巧来使这类东西起作用。

ActivityRegularizer 显示了一个示例,其中您没有对权重或偏差进行正则化。相反,您正在为层的输出添加损失 - 也就是事件。当前一层还没有一些内置的方法来规范事件时,您可以使用 ActivityRegularizer。例如,tf.keras.layers.Dense 层内置了一个事件正则化器,因此您不会使用 ActivityRegularizer 层。但是 ReLU 没有,所以如果你想正则化 ReLU 层的事件,你可以在 ReLU 之后添加一个 ActivityRegularizer 层。

关于tensorflow - Layer.add_loss() 的目的和直觉是什么?它是如何工作的?它是否只计算当前层的损失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62725420/

相关文章:

Tensorflow多项式线性回归曲线拟合

python - 如何在keras中添加自定义图像锐化层?

python - 为什么 tensorflow 线性回归预测全为0?

python - Seq2Seq 模型 Tensorflow 中的输出投影

tensorflow - 训练损失在 12 个时期后增加

python - 使用 Keras Sequential 模型实现快捷方式

python - 在 python 包装器 caffe 上训练网络?

python - Keras:简单数据的简单神经网络不起作用

python - 求Tensorflow中连续的最大数量

python - Keras模型只能预测一个类