TentationeM Skini si Pytorch i možeš svaki gradijent provjeriti.
Npr. za 3×4×1 mrežu sa sigmoidom nakon skrivenog sloja bi moglo ovako nešto:
import torch
l1 = torch.nn.Linear(3, 4)
a1 = torch.nn.Sigmoid()
l2 = torch.nn.Linear(4, 1)
# Ulazi i izlazi
inputs = torch.tensor([[0, 0, 1], [0, 1, 0], [1, 0, 0]])
outputs = torch.tensor([[0], [1], [2]])
loss_f = torch.nn.MSELoss()
optimizer = torch.optim.SGD([l1.parameters(), l2.parameters()], lr=1)
for i, x in enumerate(inputs):
# Forward pass
x = l1(x)
x = a1(x)
x = l2(x)
# Backward pass
loss = 0.5 * loss_f(x, outputs[i])
loss.backward()
print(f"Gradijenti l1 težina:\n{l1.weight.grad}")
print(f"Gradijenti l2 težina:\n{l2.weight.grad}")
print(f"Gradijenti l1 pomaka:\n{l1.bias.grad}")
print(f"Gradijenti l2 pomaka:\n{l2.bias.grad}\n")
# Ažuriranje parametara
optimizer.step()
# Reset gradijenata, pomaknuti izvan for petlje ako se radi o grupnom učenju
optimizer.zero_grad()
Za specifične početne težine, mogu se inicijalizirati s npr.
torch.nn.init.constant_(l1.weight, 1)
torch.nn.init.constant_(l1.bias, 1)
ovo će postaviti težine i pomake 1. sloja na 1.