def cifar10Data(args):
    cifar_train = datasets.CIFAR10(root='data/', train=True).transform_first(transform())
    cifar_val = datasets.CIFAR10(root='data/', train=False).transform_first(transform())
    train_data = gluon.data.DataLoader(cifar_train, batch_size=args.batch_size, shuffle=True,
                                       num_workers=args.num_workers)
    val_data = gluon.data.DataLoader(cifar_val, batch_size=args.batch_size, shuffle=False, num_workers=args.num_workers)
    return train_data, val_data
예제 #2
0
 def create_and_train(self, model_name: str, batch_size: int,
                      learning_rate: float, epochs: int):
     """
     Create a ModelCreationService and Train it
     :param model_name: model name
     :param batch_size: size of the batch
     :param learning_rate: learning rate to be used
     :param epochs: nb of epochs to train the model
     :return: 
     """
     model = model_creation_service.ModelCreationService()
     acc = accuracy_calculation_service.AccuracyCalculationService()
     save_model = model_manipulation_service.ModelManipulationService()
     # datasets
     try:
         cifar_train = datasets.CIFAR10(train=True)
         X, y = cifar_train[0:10]
     except Exception as ex:
         raise ex
     # transform image
     try:
         transform = data_transformation_service.DataTransformationService()
         transformer = transform.data_transformation()
         cifar_train = cifar_train.transform_first(transformer)
         # train data
         train_data = gluon.data.DataLoader(cifar_train,
                                            batch_size=batch_size,
                                            shuffle=True)
         cifar_valid = gluon.data.vision.CIFAR10(train=False)
         valid_data = gluon.data.DataLoader(
             cifar_valid.transform_first(transformer),
             batch_size=batch_size)
     except Exception as ex:
         raise ex
     # build model
     try:
         net = model.create_model()
         net.initialize(init=init.Xavier())
         softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()
     except Exception as ex:
         raise ex
     try:
         trainer = gluon.Trainer(net.collect_params(), 'sgd',
                                 {'learning_rate': learning_rate})
         for epoch in range(epochs):
             train_loss, train_acc, valid_acc = 0., 0., 0.
             tic = time.time()
             for data, label in train_data:
                 # forward + backward
                 with autograd.record():
                     output = net(data)
                     loss = softmax_cross_entropy(output, label)
                 loss.backward()
                 # update parameters
                 trainer.step(batch_size)
                 # calculate training metrics
                 train_loss += loss.mean().asscalar()
                 train_acc += acc.acc(output=output, label=label)
             # calculate validation accuracy
             for data, label in valid_data:
                 valid_acc += acc.acc(net(data), label)
             print(
                 "Epoch %d: loss %.3f, train acc %.3f, test acc %.3f, in %.1f sec"
                 % (epoch, train_loss / len(train_data),
                    train_acc / len(train_data),
                    valid_acc / len(valid_data), time.time() - tic))
     except Exception as ex:
         raise ex
     try:
         save_model.save_model(
             net, os.path.join(self.path.model_dir, model_name))
     except Exception as ex:
         raise ex
from mxnet.gluon.data import DataLoader
from mxnet.gluon.data.vision import transforms, datasets

transformer = transforms.Compose(
    [transforms.ToTensor(),
     transforms.Normalize(mean=0.13, std=0.31)])
cifar10_train = datasets.CIFAR10(root='data/',
                                 train=True).transform_first(transformer)
train_data = DataLoader(dataset=cifar10_train,
                        batch_size=8,
                        shuffle=True,
                        num_workers=0)
for data, label in train_data:
    print("Shape of data: {}".format(data.shape))
    print("Shape of label: {}".format(label.shape))
    break
        return x


normalize = T.Normalize(mean=[0.491, 0.482, 0.447], std=[0.247, 0.243, 0.262])

train_transfrom = T.Compose([
    RandomCrop(32, padding=4),
    # T.RandomResizedCrop(32),
    T.RandomFlipLeftRight(),
    T.ToTensor(),
    normalize
])

val_transform = T.Compose([T.ToTensor(), normalize])

trainset = datasets.CIFAR10('./data',
                            train=True).transform_first(train_transfrom)
trainloader = gluon.data.DataLoader(trainset,
                                    batch_size=args.batch_size,
                                    shuffle=True,
                                    num_workers=2)

testset = datasets.CIFAR10('./data',
                           train=False).transform_first(val_transform)
testloader = gluon.data.DataLoader(testset,
                                   batch_size=args.batch_size,
                                   shuffle=False,
                                   num_workers=2)

best_prec = 0

예제 #5
0
# Create a numpy array.
x = np.array([[1, 2], [3, 4]])

# Convert the numpy array to a mxnet ndarry.
y = nd.array(x)

# Convert the mxnet ndarry to a numpy array.
z = y.asnumpy()

# ================================================================== #
#                         4. Input pipline                           #
# ================================================================== #

# Download and construct CIFAR-10 dataset.
train_dataset = datasets.CIFAR10(root='../../data', train=True)

# Fetch one data pair (read data from disk).
image, label = train_dataset[0]
print(image.shape)
print(label)

# Data loader (this provides queues and threads in a very simple way).
train_loader = gluon.data.DataLoader(dataset=train_dataset,
                                     batch_size=64,
                                     shuffle=True)

# When iteration starts, queue and thread start to load data from files.
data_iter = iter(train_loader)

# Mini-batch images and labels.
예제 #6
0
def train(current_host, hosts, num_cpus, num_gpus, channel_input_dirs,
          model_dir, hyperparameters, **kwargs):
    # Set random seeds
    random.seed(0)
    np.random.seed(0)
    mx.random.seed(777)

    ## retrieve the hyperparameters we set in notebook (with some defaults)
    batch_size = hyperparameters.get('batch_size', 128)
    epochs = hyperparameters.get('epochs', 30)
    extra = hyperparameters.get('extra', 3)
    peak = hyperparameters.get('peak', 5)

    momentum = hyperparameters.get('momentum', 0.91)
    lr = hyperparameters.get('lr', 0.1)
    min_lr = hyperparameters.get('min_lr', 0.005)
    wd = hyperparameters.get('wd', 0.0005)
    ##

    #Inform properly the algorithm about hardware choice
    if len(hosts) == 1:
        kvstore = 'device' if num_gpus > 0 else 'local'
    else:
        kvstore = 'dist_device_sync'

    part_index = 0
    for i, host in enumerate(hosts):
        if host == current_host:
            part_index = i
            break
    num_parts = len(hosts)

    #Set-up the right context
    ctx = [mx.gpu(i) for i in range(num_gpus)] if num_gpus > 0 else [mx.cpu()]

    # Define the transforms to be applied
    means = [0.4914, 0.4822, 0.4465]
    stds = [0.2023, 0.1994, 0.2010]
    transform_train = Compose([
        RandomCrop(32, padding=4, padding_mode='reflect'),
        transforms.RandomFlipLeftRight(),
        transforms.ToTensor(),
        transforms.Normalize(means, stds)
    ])

    transform_test = Compose(
        [transforms.ToTensor(),
         transforms.Normalize(means, stds)])

    # Load the datasets
    given_path = channel_input_dirs['training']
    trainset = datasets.CIFAR10(root=given_path, train=True)
    testset = datasets.CIFAR10(root=given_path, train=False)
    sampler = mx.gluon.data.RandomSampler(len(trainset))
    batch_sampler = ContinuousBatchSampler(
        sampler,
        batch_size=batch_size,
        datalen=len(trainset),
        max_iters=int(len(trainset) / batch_size + 1) * 45)
    train_data = DataLoader(
        trainset.transform_first(transform_train),
        batch_sampler=batch_sampler,
        num_workers=num_cpus,
    )
    valid_data = DataLoader(
        testset.transform_first(transform_test),
        batch_size=1024,
        shuffle=False,
        num_workers=num_cpus,
    )

    # Define model and the dtype (wether to use full precision or half precision)
    dtype = 'float16'
    model = resnet18Basic(num_classes=10)

    # Define the learner and fit!
    learner = GluonLearner(model, hybridize=False, ctx=ctx)
    learner.fit(
        train_data=train_data,
        valid_data=valid_data,
        epochs=epochs,
        extra=extra,
        peak=peak,
        lr=lr,
        min_lr=min_lr,
        momentum=momentum,
        initializer=mx.init.Xavier(rnd_type='gaussian',
                                   factor_type='out',
                                   magnitude=2),
        optimizer=mx.optimizer.SGD(learning_rate=lr,
                                   rescale_grad=1.0 / batch_size,
                                   momentum=momentum,
                                   wd=wd,
                                   multi_precision=(dtype == 'float16')),
        early_stopping_criteria=lambda e: e >= 0.94,
        kvstore=kvstore,
        dtype=dtype,
    )

    return model
예제 #7
0
from mxnet.gluon import model_zoo
from mxnet.gluon import nn
from mxnet.gluon.data.vision import transforms, datasets
import matplotlib.pyplot as plt

label_text = ['airplane', 'automobile', 'bird', 'cat', 'deer',
              'dog', 'frog', 'horse', 'ship', 'truck']

net = model_zoo.vision.resnet18_v1()
net.output = nn.Dense(10)
net.load_parameters(filename="output/ResNet18-4.params")

transformer = transforms.Compose([transforms.ToTensor(),
                                  transforms.Normalize(0.13, 0.31)])

cifar10_val = datasets.CIFAR10(root='data/',train=False)
plt.figure()
for i in range(6):
    img, label = cifar10_val[i]
    data = transformer(img).expand_dims(axis=0)
    output = net.forward(data)
    pre_label = output.argmax(axis=1).astype("int32").asscalar()
    print("Predict label is: {}, Ground truth is: {}".format(
          label_text[pre_label], label_text[label]))

    plt.subplot(2,3,i+1)
    plt.axis('off')
    plt.imshow(img.asnumpy())
    plt.title("Predict: " + label_text[pre_label] + "\n" + "Truth: " + 
              label_text[label])
    plt.savefig("Prediction result.png")
예제 #8
0
# Hyper-parameters
num_epochs = 10
num_classes = 10
batch_size = 100
learning_rate = 0.01

# Image preprocessing modules
transformer = transforms.Compose([
    transforms.RandomFlipLeftRight(),
    transforms.RandomResizedCrop(32),
    transforms.ToTensor()
])

# CIFAR-10 dataset
train_dataset = datasets.CIFAR10(root='../../data', train=True)

train_dataset = train_dataset.transform_first(transformer)

test_dataset = datasets.CIFAR10(root='../../data', train=False)

test_dataset = test_dataset.transform_first(transformer)

# DataLoader
train_loader = gluon.data.DataLoader(train_dataset,
                                     batch_size=batch_size,
                                     shuffle=True)

test_loader = gluon.data.DataLoader(test_dataset,
                                    batch_size=batch_size,
                                    shuffle=True)
예제 #9
0
def test(ctx, val_data):
    metric = mx.metric.Accuracy(name="valid_accuracy")
    for _, batch in enumerate(val_data):
        data = gluon.utils.split_and_load(batch[0], ctx_list=ctx, batch_axis=0)
        label = gluon.utils.split_and_load(batch[1],
                                           ctx_list=ctx,
                                           batch_axis=0)
        outputs = [net(X) for X in data]
        metric.update(label, outputs)
    return metric.get()


#
# Prepare the dataset
#
cifar_train = datasets.CIFAR10(train=True)
cifar_test = datasets.CIFAR10(train=False)
class_names = [
    "airplane", "automobile", "bird", "cat", "deer", "dog", "frog", "horse",
    "ship", "truck"
]

transform_train = transforms.Compose([
    gcv_transforms.RandomCrop(32, pad=4),
    transforms.RandomFlipLeftRight(),
    transforms.ToTensor(),
    transforms.Normalize([0.4914, 0.4822, 0.4465], [0.2023, 0.1994, 0.2010])
])

transform_test = transforms.Compose([
    transforms.ToTensor(),