Koulutus: yhdistä ennuste, häviö ja päivitys
Koulutus (training) muuttaa mallia oppimissignaalin avulla. Neuroverkon tavallinen askel laskee ennusteet, mittaa häviön, derivoi sen ja tekee optimoijan päivityksen.
Ajaminen käyttää nykyisiä parametreja tulosteen tuottamiseen. Koulutus lisää mekanismin, joka ratkaisee, miten parametrien pitäisi muuttua.
Koko päivitys yhdessä funktiossa
TensorFlow-askel saa luokkalogitteja palauttavan mallin, optimoijan, syötteet ja kokonaislukumuotoiset luokkatunnisteet. Esimerkkien häviöistä muodostetaan keskiarvotavoite.
import tensorflow as tf
def train_step(model, optimizer, inputs, labels):
with tf.GradientTape() as tape:
logits = model(inputs, training=True)
loss = tf.reduce_mean(
tf.keras.losses.sparse_categorical_crossentropy(
labels, logits, from_logits=True
)
)
gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
return loss
Nauha tallentaa eteenpäinlaskennan. gradient laskee derivaatat, ja apply_gradients muuttaa painoja sekä optimoijan tilaa. Nämä ovat erillisiä operaatioita.
training=True ottaa myös dropoutin kaltaisten kerrosten koulutustoiminnan käyttöön. Validointikierros arvioi ennusteita päivittämättä painoja ja käyttää vastaavaa arviointitilaa.
Onnistunut askel parantaa vain valittua koulutustavoitetta paikallisesti. Aineiston kattavuus ja erillinen arviointi ratkaisevat, siirtyykö oppiminen hyödyksi uusiin syötteisiin.