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