Esempio n. 1
0
def train_MNIST_MLP():
    epochs = 1
    trian_batch_size, val_batch_size = 10, 2000
    lr = 0.001
    cnt = 0
    loss_list = []
    val_acc_list = []
    train_loader, validation_loader = get_dataloader(trian_batch_size,
                                                     val_batch_size)

    model = MNIST(p=0.3).to(device)
    criterion = nn.NLLLoss()
    optimizer = optim.Adam(model.parameters(), lr=lr)

    for epoch in trange(epochs):
        model.train()
        loss_epoch = 0
        for step, (img, label) in enumerate(train_loader):

            img, label = img.view(-1, 28 * 28).to(device), label.to(device)

            pred = model(img)
            optimizer.zero_grad()

            loss = criterion(pred, label)
            loss_epoch += loss.item() * pred.shape[0]
            loss.backward()
            optimizer.step()
        loss_epoch /= len(train_loader.dataset)
        loss_list.append(loss_epoch)

        model.eval()
        val_acc = 0

        for step, (img, label) in enumerate(validation_loader):
            img, label = img.view(-1, 28 * 28).to(device), label.to(device)

            pred = model(img)
            topv, topi = pred.topk(1, dim=1)
            n_correct = (topi.view(-1) == label).type(torch.int)
            val_acc += n_correct.sum().item()
        val_acc /= len(validation_loader.dataset)
        val_acc_list.append(val_acc)
        print(epoch, loss_epoch, val_acc)

    fig, ax = plt.subplots(2, 1, figsize=(30, 15))
    ax[0].plot(loss_list)
    ax[1].plot(val_acc_list)
Esempio n. 2
0
        x = self.model(x)
        return x


epochs = 1
trian_batch_size, val_batch_size = 10, 2000
lr = 0.001
cnt = 0
loss_list = []
val_acc_list = []
train_loader, validation_loader = get_dataloader(trian_batch_size,
                                                 val_batch_size)

model = MNIST(p=0.3).to(device)
criterion = nn.NLLLoss()
optimizer = optim.Adam(model.parameters(), lr=lr)

for epoch in trange(epochs):
    model.train()
    loss_epoch = 0
    for step, (img, label) in enumerate(train_loader):

        img, label = img.view(-1, 28 * 28).to(device), label.to(device)
        print(img.shape)
        pred = model(img)
        optimizer.zero_grad()
        loss = criterion(pred, label)
        loss_epoch += loss.item() * pred.shape[0]
        loss.backward()
        optimizer.step()
    loss_epoch /= len(train_loader.dataset)