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