Hello. I am training a NN classifier and everything seems to work fine. Except that my model isn’t updating(the losses aren’t dropping from the beginning).
class NN(nn.Module): def __init__(self,width = 128): super().__init__() self.fc1 = nn.Sequential( nn.Linear(50,512), nn.ReLU(), nn.Linear(512,512), nn.ReLU(), nn.Linear(512,512), nn.ReLU(), nn.Linear(512,256), nn.ReLU(), nn.Linear(256,256), nn.ReLU(), nn.Linear(256,128), nn.ReLU(), nn.Linear(128,64), nn.ReLU(), nn.Linear(64,32), nn.ReLU(), nn.Linear(32,16), nn.ReLU(), nn.Linear(16,4), nn.Softmax(dim = 1) ) def forward(self, x): out = self.fc1(x) return out
net = NN().to(device) loss_function = nn.CrossEntropyLoss(weight=weight) optimizer = optim.Adam(net.parameters(),lr = 0.001)
plot_loss =  for epoch in range(3): # 3 full passes over the data for data in trainset: # `data` is a batch of data X, y = data # X is the batch of features, y is the batch of targets. X = X.to(device) y = y.to(device) net.zero_grad() # sets gradients to 0 before loss calc. You will do this likely every step. output = net(X.view(-1,50)) # pass in the reshaped batch (recall they are 28x28 atm) loss = loss_function(output, y.flatten()) # calc and grab the loss value loss.backward() # apply this loss backwards thru the network's parameters optimizer.step() # attempt to optimize weights to account for loss/gradients plot_loss.append(loss) print(loss) # print loss. We hope loss (a measure of wrong-ness) declines!
the loss after 3 epoch:
Thanks in advance for any help.