Sobes.tech
Middle

Miért hívjuk az optimizer.zero_grad()-t az edzés ciklusának elején?

sobes.tech MI

Válasz az MI-től

A PyTorch-ban a visszaterjes soran a paraméterek gradiens értékei összegződnek, vagyis minden loss.backward() hívás hozzáadja a gradiens értékeket a már meglévőkhöz a .grad tenzorokban. Ha nem nullázod őket az új tanulási lépés előtt, akkor a gradiens értékek összeadódnak, ami helytelen súlyfrissítéshez vezet.

Ezért minden tanulási ciklus elején meghívják a optimizer.zero_grad()-ot, hogy töröljék a régi gradiens értékeket, és helyesen számolják ki az újak értékét az aktuális mini-batch-re.

Példa:

for data, target in dataloader:
    optimizer.zero_grad()  # nullázza a gradiens értékeket
    output = model(data)
    loss = loss_fn(output, target)
    loss.backward()       # kiszámítja az új gradiens értékeket
    optimizer.step()      # frissíti a paramétereket