Слой регуляризации в Керасе не влияет - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь написать простой пользовательский слой для регуляризации в Keras следующим образом:

from tensorflow.keras.regularizers import Regularizer
import tensorflow as tf

class MyRegularization(Regularizer):
      def __init__(self):
          self.alpha = 100000000

      def __call__(self, w):
          return self.alpha * tf.reduce_sum(w ** 2)

, как вы видите, коэффициент регуляризации настолько велик. Затем я добавляю эту регуляризацию к каждому слою простой сети:

model = Sequential([
      Dense(1000, activation='relu', input_shape=[10,], kernel_regularizer=MyRegularization()),
      Dense(100, activation='relu', kernel_regularizer=MyRegularization()),
      Dense(10, activation='relu', kernel_regularizer=MyRegularization()),
      Dense(2, activation='softmax', kernel_regularizer=MyRegularization()),
])

Я ожидаю, что из-за большого alpha обучение не сходится, но оно похоже на значение alpha не влияет на учебный процесс. Почему?

Я взял alpha = 1e-4, но там не отличается, когда alpha=1e+10. : - \

1 Ответ

0 голосов
/ 18 апреля 2020

Вы вызываете экземпляр класса

MyRegularization()

или вызываете экземпляр объекта класса с тем же именем класса?

MyRegularization = MyRegularization()
...
MyRegularization()

, потому что только последний из них будет определить тело функции (__call__), которое выполняется, когда экземпляр используется в качестве функции. Это объясняет, почему значение регуляризации не возвращается, поэтому значения alpha не влияют на обучение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...