от
Таким образом, пакетной нормализации и недоучка-это слои, которые меняют поведение в зависимости от того, являетесь ли вы в процессе обучения или этапа формирования. Обычно, Керрас заботится о том, что от имени меня. Но, если я делаю пользовательские тренировки, как я могу справиться с этим? Что я сделал: добавил оператор 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 Ответ

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