在tensorflow 2.0 keras中,我们如何获得l1和l2等正则化参数的梯度?

在tensorflow 2.0 keras中,我们如何获得l1和l2等正则化参数的梯度?,keras,tensorflow2.0,Keras,Tensorflow2.0,例如,如果我们使用 tf.keras.layers.Dense(16, kernel_regularizer=tf.keras.regularizers.L1L1(l1=0.1, l2=0.2)) 您会在模型中看到条目。损失但是,在更改l1和l2时,它们不会重新计算。此外,即使将l1,l2替换为,损失函数似乎也是不可微的 l1 = tf.keras.backend.variable(name='l1', value=0.1) l2 = tf.keras.backend.variable(nam

例如,如果我们使用

tf.keras.layers.Dense(16, kernel_regularizer=tf.keras.regularizers.L1L1(l1=0.1, l2=0.2))
您会在
模型中看到条目。损失
但是,在更改l1和l2时,它们不会重新计算。此外,即使将l1,l2替换为,损失函数似乎也是不可微的

l1 = tf.keras.backend.variable(name='l1', value=0.1)
l2 = tf.keras.backend.variable(name='l2', value=0.1)
变量可以通过显式使用它们的函数进行训练

更新:

我有一种感觉,不幸的是,
\u gather\u children…
函数中有一个不可微的布尔值

OperatorNotAllowedInGraphError: in converted code:

<ipython-input-272-b7a1c0374804>:7 train_one  *
    d = loss(x, y)
<ipython-input-222-e2bf7d12dcd8>:10 loss  *
    layer_losses = tf.reduce_mean(agent.predictor.losses)
asdf/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py:1015 losses
    return collected_losses + self._gather_children_attribute('losses')
asdf/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py:2336 _gather_children_attribute
    getattr(layer, attribute) for layer in nested_layers))
asdf/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py:2336 <genexpr>
    getattr(layer, attribute) for layer in nested_layers))
asdf/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py:1012 losses
    loss_tensor = regularizer()
asdf/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py:1087 _tag_unconditional
    loss = loss()
asdf/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py:1916 _loss_for_variable
    regularization = regularizer(v)
asdf/lib/python3.7/site-packages/tensorflow_core/python/keras/regularizers.py:57 __call__
    if not self.l1 and not self.l2:
asdf/lib/python3.7/site-packages/tensorflow_core/python/ops/resource_variable_ops.py:450 __bool__
    return bool(self.read_value())
asdf/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py:765 __bool__
    self._disallow_bool_casting()
asdf/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py:531 _disallow_bool_casting
    "using a `tf.Tensor` as a Python `bool`")
asdf/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py:518 _disallow_when_autograph_enabled
    " decorating it directly with @tf.function.".format(task))

OperatorNotAllowedInGraphError: using a `tf.Tensor` as a Python `bool` is not allowed: AutoGraph did not convert this function. Try decorating it directly with @tf.function.
operator不允许在转换后的代码中使用Ingrapherror:
:7一次列车*
d=损失(x,y)
:10损失*
层损失=tf.减少平均值(代理、预测、损失)
asdf/lib/python3.7/site packages/tensorflow_core/python/keras/engine/base_layer.py:1015损失
返回已收集的\u损失+自身。\u收集\u子项\u属性(“损失”)
asdf/lib/python3.7/site packages/tensorflow_core/python/keras/engine/base_layer.py:2336_gather_children_属性
用于嵌套_层中的层的getattr(层,属性))
asdf/lib/python3.7/site packages/tensorflow_core/python/keras/engine/base_layer.py:2336
用于嵌套_层中的层的getattr(层,属性))
asdf/lib/python3.7/site packages/tensorflow_core/python/keras/engine/base_layer.py:1012损失
损失张量=正则化子()
asdf/lib/python3.7/site packages/tensorflow_core/python/keras/engine/base_layer.py:1087_tag_
损失=损失()
asdf/lib/python3.7/site packages/tensorflow_core/python/keras/engine/base_layer.py:1916_loss_for_变量
正则化=正则化器(v)
asdf/lib/python3.7/site packages/tensorflow\u core/python/keras/regularizers.py:57\u调用__
如果不是self.l1和self.l2:
asdf/lib/python3.7/site packages/tensorflow_core/python/ops/resource_variable_ops.py:450_bool__
返回bool(self.read\u value())
asdf/lib/python3.7/site packages/tensorflow\u core/python/framework/ops.py:765\u bool__
self.\u不允许\u bool\u铸造()
asdf/lib/python3.7/site packages/tensorflow\u core/python/framework/ops.py:531 _disallow\u bool\u casting
“将`tf.Tensor`用作Python`bool`”)
asdf/lib/python3.7/site packages/tensorflow\u core/python/framework/ops.py:518(启用自动签名时不允许)
“直接用@tf.function来装饰它。”.format(任务))
OperatorNotAllowedInGraphError:不允许将`tf.Tensor`用作Python`bool`:AutoGraph未转换此函数。尝试直接用@tf.function来装饰它。

你能提供更多关于调试问题代码的详细信息吗?我深入研究了这个问题,我认为目前不可能跨优化器步骤进行渐变,所以这个问题有点无关紧要。