使用Python Keras进行层规范化

时间:2018-02-20 07:54:21

标签: python keras

我正在研究论文"物理层深度学习简介"。在使用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。 有没有什么方法可以限制图层输出的值?

1 个答案:

答案 0 :(得分:2)

您可以对某些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))
相关问题