Как справиться с BN и DO поведенческими изменениями в подклассах моделей? - PullRequest
0 голосов
/ 05 июля 2019

Итак, нормализация партии и выпадение - это слои, которые меняют поведение в зависимости от того, находитесь ли вы на стадии обучения или выведения. Обычно Керас заботится об этом от имени меня. Но если я занимаюсь индивидуальным обучением, как я могу справиться с этим?

Что я сделал: добавлен оператор if для обхода выпадающего слоя в режиме вывода

class mymodel(tf.keras.models.Model):
    def __init__(self, **kwargs):
        super(mymodel, self).__init__(**kwargs)
        self.l1 = tf.keras.layers.Dense(3, input_shape=(2,))
        self.l2 = tf.keras.layers.Dropout(0.9)
    def call(self, x, training=None):
        x = self.l1(x)
        if training:
            x = self.l2(x)
        return x

Я не уверен, что это все? А как насчет нормализации партии?

РЕДАКТИРОВАТЬ: мой «цикл пользовательских тренировок» для приведенного выше примера игрушки:

def train_one_ste(model, batch)
    with tf.GradientTape() as tape:
        output = model(batch)
    grad = tape.gradient(output, model.trainable_weights)
    optimizer.apply_gradients(zip(grad, model.trainable_weight)

1 Ответ

1 голос
/ 05 июля 2019

Для этого вы можете управлять фазой обучения вручную, используя K.set_learning_phase(1) во время обучения и K.set_learning_phase(0) во время тестирования / вывода. Здесь K - это модуль keras.backend.

Также обратите внимание, что для выполнения одного учебного шага с данной партией вы можете использовать model.train_on_batch(x, y), и в этом случае Keras будет управлять фазой обучения для вас.

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