kernel_constraint = max_norm(3)做什么?

azt*_*242 9 optimization convolution computer-vision conv-neural-network keras

在我正在研究的一个教程中(下面给出的链接),作者将基线神经网络结构概述为:

卷积输入层,32个大小为3×3的特征映射,整流器激活函数和最大范数的权重约束设置为3.

model.add(Conv2D(32, (3, 3), input_shape=(3, 32, 32), padding='same', activation='relu', kernel_constraint=maxnorm(3)))
Run Code Online (Sandbox Code Playgroud)

最大范数的权重约束对Conv层意味着什么?(我们正在使用Keras.)

https://machinelearningmastery.com/object-recognition-convolutional-neural-networks-keras-deep-learning-library/

谢谢!

McL*_*nce 20

重量约束是max_norm做什么的?

maxnorm(m)如果您的权重的L2范数超过,则将m整个权重矩阵缩放一个将范数缩小到的因子m.您可以在keras代码中找到class MaxNorm(Constraint):

def __call__(self, w):
    norms = K.sqrt(K.sum(K.square(w), axis=self.axis, keepdims=True))
    desired = K.clip(norms, 0, self.max_value)
    w *= (desired / (K.epsilon() + norms))
    return w
Run Code Online (Sandbox Code Playgroud)

通常,maxnorm有一个axis参数,计算范数.在您的示例中,您没有指定轴,因此在整个权重矩阵上计算范数.例如,如果要约束每个卷积滤波器的范数,假设您使用的是tf维度排序,则权重矩阵将具有该形状(rows, cols, input_depth, output_depth).计算范数axis = [0, 1, 2]会将每个滤波器约束到给定的范数.

为什么要这样做?

直接约束权重矩阵是另一种正则化.如果您使用简单的L2正则化术语,则会使用损失函数惩罚高权重.通过此约束,您可以直接进行规范化.同样在keras代码中链接,这似乎与dropout图层组合特别好.更多信息请参阅本文第5.1章