我正在看关于 making a custom layer 的 tensorflow
教程并找到了类似这样的代码:
# 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/