model = Net()
optimizer = optim.Adam(model.parameters(), lr=0.001)
loss_func = nn.NLLLoss()

epochs = 20 # エポック数
loss_list = []

model.train()
for epoch in range(epochs):
    total_loss = []
    for batch_idx, (data, target) in enumerate(train_loader):
        optimizer.zero_grad()
        # 順伝搬
        output = model(data)
        # 損失を計算
        loss = loss_func(output, target)
        # 逆伝搬
        loss.backward()
        # 係数を最適化
        optimizer.step()
        # 損失を記録
        total_loss.append(loss.item())
    loss_list.append(sum(total_loss)/len(total_loss))
    # 損失曲線を表示
    print('Training [{:.0f}%]\tLoss: {:.4f}'.format(
        100. * (epoch + 1) / epochs, loss_list[-1]))