def main(batchsize=10, lr=0.01, epochs=10, frac_dset=1., fname=''):
    tform = transforms.transformation(
        [transforms.ToTensor(),
         transforms.Standardize()])
    trainset = mnist_dataset(train=True,
                             download=True,
                             frac=frac_dset,
                             transform=tform)
    trainloader = dataloader(trainset, batchsize)

    testset = mnist_dataset(train=False, download=True, transform=tform)
    testloader = dataloader(testset, batchsize)

    model = Model()
    optimizer = optim.SGD(model.get_parameters(), lr=lr)
    criterion = loss.MSELoss()

    if fname == '':
        fout = None
    else:
        fout = open(fname, 'w')

    t1 = time.time()
    for epoch in range(epochs):
        train(model, criterion, optimizer, trainloader, epoch, fout=fout)
        test(model, criterion, testloader, epoch, fout=fout)
        if epoch % 10 == 9:
            optimizer._lr *= 0.1
    t2 = time.time()
    output_str = 'Total Training Time: %.2f seconds' % (t2 - t1)
    if fout is None:
        print(output_str)
    else:
        fout.write(output_str + '\n')
        fout.close()
Example #2
0
def main(batchsize=10, lr=0.01, epochs=10, k=5, frac_dset=1., fname=''):
    tform = transforms.transformation([transforms.ToTensor()])
    trainset = mnist_dataset(train=True, download=True, frac=frac_dset, oneHot=False, transform=tform)
    trainset._images = trainset._images / 255.
    mean = np.expand_dims(np.mean(trainset._images, axis=0), 0)
    std = np.expand_dims(np.std(trainset._images, axis=0), 0)
    std[std <= 0.03] = 1
    trainset._images = (trainset._images - mean) / std
    trainloader = dataloader(trainset, batchsize)

    testset = mnist_dataset(train=False, download=True, oneHot=False, transform=tform)
    testset._images = testset._images / 255.
    testset._images = (testset._images - mean) / std
    testloader = dataloader(testset, batchsize)

    model = Model(k)
    optimizer = optim.SGD(model.get_parameters(), lr=lr)
    criterion = loss.MSELoss()

    if fname == '':
        fout = None
    else:
        fout = open(fname, 'w')

    t1 = time.time()
    for epoch in range(epochs):
        train(model, criterion, optimizer, trainloader, epoch, fout=fout)
        test(model, criterion, testloader, epoch, fout=fout)
    t2 = time.time()
    output_str = 'Total Training Time: %.2f seconds' % (t2-t1)
    if fout is None:
        print(output_str)
    else:
        fout.write(output_str+'\n')
        fout.close()