예제 #1
0
device = "cuda:0" if torch.cuda.is_available() else "cpu"
batch_size = 100

filter_shape = [16, 32]
kernel_size = 5
nclasses = 10

cnn_model = CNN(filter_shape, kernel_size, nclasses, device)
print(cnn_model)

train_loader = DataLoader(train_data, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_data, batch_size=batch_size, shuffle=True)

if not os.path.exists(model_file):
    cnn_model.train()
    losses = []
    for epoch in range(50):
        for imgs, labels in train_loader:  # imgs [batch_size, 1, 28, 28], labels [100]
            loss = cnn_model.train_step(imgs, labels)
            losses.append(loss)

        print('epoch {} loss {}'.format(epoch + 1, np.mean(losses)))

    torch.save(cnn_model.state_dict(), model_file)
else:
    cnn_model.load_state_dict(torch.load(model_file))

cnn_model.eval()
x, y = next(iter(test_loader))
cnn_model.evaluate(x, y)