Oto przykładowy kod keras, który go używa:
from keras.constraints import max_norm
model.add(Convolution2D(32, 3, 3, input_shape=(3, 32, 32),
border_mode='same', activation='relu', kernel_constraint=max_norm(3)))
Oto przykładowy kod keras, który go używa:
from keras.constraints import max_norm
model.add(Convolution2D(32, 3, 3, input_shape=(3, 32, 32),
border_mode='same', activation='relu', kernel_constraint=max_norm(3)))
Znalazłem odpowiedź przez McLawrence w innym pytaniem jest bardzo pomocny. Powielone poniżej:
Co robi ograniczenie wagowe
max_norm
?
maxnorm(m)
jeśli norma L2 twoich ciężarów przekroczym
, przeskaluj całą macierz masy o współczynnik, który obniży normę dom
. Jak można znaleźć w kodzie keras wclass 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
Dodatkowo
maxnorm
maaxis
argument, według którego obliczana jest norma. W twoim przykładzie nie podajesz osi, więc norma jest obliczana na całej macierzy masy. Jeśli na przykład chcesz ograniczyć normę każdego filtra splotowego, zakładając, że używasztf
porządkowania wymiarów, macierz wagowa będzie miała kształt(rows, cols, input_depth, output_depth)
. Obliczenie normyaxis = [0, 1, 2]
spowoduje ograniczenie każdego filtra do podanej normy.Po co to robić?
Bezpośrednie ograniczenie macierzy masy to kolejny rodzaj regularyzacji. Jeśli używasz prostego terminu regularyzacji L2, karasz wysokie wagi swoją funkcją utraty. Dzięki temu ograniczeniu regulujesz bezpośrednio. Jak również powiązane z
keras
kodem, wydaje się, że działa to szczególnie dobrze w połączeniu zdropout
warstwą. Więcej informacji w rozdziale 5.1 niniejszego dokumentu
axis=0
.