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.)
谢谢!
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章