【问题标题】:Layer Normalization with Python Keras使用 Python Keras 进行层规范化
【发布时间】:2018-02-20 18:13:15
【问题描述】:

我正在研究论文“物理层深度学习简介”。
在使用 python keras 实现提议的网络时,我应该对某些层的输出进行归一化。

一种方法是简单的 L2 归一化 (||X||^2 = 1),其中 X 是前一层输出的张量。我可以通过以下代码实现简单的 L2 归一化:

from keras import backend as K
Lambda(lambda x: K.l2_normalize(x,axis=1))

另一种方式,我想知道的是||X||^2 ≤ 1。 有什么方法可以限制层输出的值吗?

【问题讨论】:

    标签: python keras


    【解决方案1】:

    您可以对某些 keras 层的层权重(内核)应用约束。例如在Dense() 层上,例如:

    from keras.constraints import max_norm
    from keras.layers import Dense
    model.add(Dense(units, kernel_constraint=max_norm(1.)))
    

    但是 keras 层不接受 activity_constraint 参数,但是他们接受 activity_regularizer 并且您可以使用它来更轻松地实现第一种正则化。

    您还可以将任何层的输出值裁剪为具有最大范数1.0(尽管我不确定这是否是您要寻找的)。例如,如果您使用的是tensorflow 后端,则可以定义一个自定义激活层,该层按规范裁剪该层的值,例如:

    import tensorflow as tf
    def norm_clip(x):
        return tf.clip_by_norm(x, 1, axes=[1])
    

    并在您的模型中使用它,例如:

    model.add(Dense(units, activation=norm_clip))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 2021-07-17
      • 2021-03-10
      • 2016-05-17
      • 2020-10-04
      • 2020-01-04
      • 1970-01-01
      相关资源
      最近更新 更多