1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
   | import torch from dataset import get_dataloader from model import DNN import eval
  def train(epochs=10):          train_data_loader = get_dataloader(True)     eval_dataloader = get_dataloader(False)
                dnn = DNN(1,28,28)
           optimizer = torch.optim.Adam(dnn.parameters(), lr=0.001)     lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer,len(train_data_loader),gamma=0.8)     nll_loss = torch.nn.NLLLoss()
           per=0     for epoch in range(epochs):         dnn.train()         step = 0         for images,labels in train_data_loader:             optimizer.zero_grad()             images = images.reshape((-1,1*28*28))                          output = dnn(images)             loss = nll_loss(output,labels)                          loss.backward()
 
                           optimizer.step()             lr_scheduler.step()             step += 1             if step % 100 == 0:                 print("epcoh: {} / {} ,step {} / {},lr: {},loss{}".format(                     epoch + 1, epochs, step, len(train_data_loader),                     lr_scheduler.get_last_lr(), loss))         per_now = eval.eval_model(dnn, eval_dataloader)              torch.save(dnn.state_dict(),"dnn_new.path")         if(per_now>per):             print("save best model per is {:.2f}%".format(per_now.cpu().item()*100))             torch.save(dnn.state_dict(),"dnn_best.path")             per=per_now
 
  if __name__ == '__main__':     train()
 
  |