max_norm
的重量約束是做什麼的?
maxnorm(m)
會,如果你的權重的L2範數超過m
,通過降低標準來m
一個係數調整你的整個權重矩陣。 正如你可以找到keras code在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
的方法,另外,maxnorm
有axis
說法,沿着規範的計算方法。在你的例子中,你沒有指定一個軸,因此規範是在整個權重矩陣上計算的。例如,如果您想限制每個卷積濾波器的範數,假設您使用的是維數排序,則權重矩陣的形狀將爲(rows, cols, input_depth, output_depth)
。通過axis = [0, 1, 2]
計算標準將限制每個濾波器到給定的標準。
爲什麼要這樣做?
直接約束權重矩陣是另一種正則化。如果你使用一個簡單的L2正則化術語,你會使用你的損失函數懲罰高權重。有了這個限制,你可以直接調整。 也與keras
代碼鏈接,這似乎特別適合與dropout
圖層結合使用。更多信息請參閱章節5.1中的this paper