示例#1
0
def predict_with_pre_trained_model_example():
    # Define a model.
    net = build_network(nn.Sequential())

    # Load the model parameters.
    net.load_parameters('./net.params')

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

    # Predict the first six images in the validation dataset.
    mnist_valid = datasets.FashionMNIST(train=False)
    X, y = mnist_valid[:6]
    preds = []
    for x in X:
        x = transformer(x).expand_dims(axis=0)
        pred = net(x).argmax(axis=1)
        preds.append(pred.astype('int32').asscalar())

    # Visualize the images and compare the prediction with the ground truth.
    _, figs = plt.subplots(1, 6, figsize=(15, 15))
    text_labels = [
        't-shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt',
        'sneaker', 'bag', 'ankle boot'
    ]
    for f, x, yi, pyi in zip(figs, X, y, preds):
        f.imshow(x.reshape((28, 28)).asnumpy())
        ax = f.axes
        ax.set_title(text_labels[yi] + '\n' + text_labels[pyi])
        ax.title.set_fontsize(20)
        ax.get_xaxis().set_visible(False)
        ax.get_yaxis().set_visible(False)
    plt.show()
def prepare_data(batch_size):
    mnist_train = datasets.FashionMNIST(train=True)
    X, y = mnist_train[0]
    ("X shape: ", X.shape, "X dtype", X.dtype, "y:", y)
    text_labels = [
        "t-shirt",
        "trouser",
        "pullover",
        "dress",
        "coat",
        "sandal",
        "shirt",
        "sneaker",
        "bag",
        "ankle boot",
    ]
    X, y = mnist_train[0:10]
    transformer = transforms.Compose(
        [transforms.ToTensor(),
         transforms.Normalize(0.13, 0.31)])
    mnist_train = mnist_train.transform_first(transformer)
    train_data = gluon.data.DataLoader(mnist_train,
                                       batch_size=batch_size,
                                       shuffle=True,
                                       num_workers=4)
    mnist_valid = gluon.data.vision.FashionMNIST(train=False)
    valid_data = gluon.data.DataLoader(
        mnist_valid.transform_first(transformer),
        batch_size=batch_size,
        num_workers=4)
    return train_data, valid_data
示例#3
0
def prepare_data(batch_size):
    mnist_train = datasets.FashionMNIST(train=True)
    transformer = transforms.Compose(
        [transforms.ToTensor(),
         transforms.Normalize(0.286, 0.352)])
    mnist_train = mnist_train.transform_first(transformer)
    train_data = gluon.data.DataLoader(mnist_train,
                                       batch_size=batch_size,
                                       shuffle=True,
                                       num_workers=4)

    return train_data
示例#4
0
def ready_data():
    
    transformer = transforms.Compose([transforms.ToTensor(),transforms.Normalize(0.13, 0.31)])
    mnist_train = datasets.FashionMNIST(train=True)
    
    mnist_train = mnist_train.transform_first(transformer)

    batch_size = 256
    train_data = gluon.data.DataLoader(mnist_train, batch_size=batch_size, shuffle=True)
    for data, label in train_data:
        print(data.shape, label.shape)
        break

    mnist_valid = gluon.data.vision.FashionMNIST(train=False)
    valid_data = gluon.data.DataLoader(mnist_valid.transform_first(transformer),batch_size=batch_size)
    return train_data, valid_data, batch_size 
示例#5
0
def get_train_data():
    mnist_train = datasets.FashionMNIST(train=True)
    # X, y = mnist_train[0]
    # X, y = mnist_train[0:10]
    # # plot images
    # display.set_matplotlib_formats('svg')
    # _, figs = plt.subplots(1, X.shape[0], figsize=(15, 15))
    # for f,x,yi in zip(figs, X,y):
    #     # 3D->2D by removing the last channel dim
    #     f.imshow(x.reshape((28,28)).asnumpy())
    #     ax = f.axes
    #     ax.set_title(text_labels[int(yi)])
    #     ax.title.set_fontsize(14)
    #     ax.get_xaxis().set_visible(False)
    #     ax.get_yaxis().set_visible(False)
    # plt.show()
    return mnist_train
示例#6
0
def get_data():
    mnist_train = datasets.FashionMNIST(train=True)
    X, y = mnist_train[0]
    ('X shape: ', X.shape, 'X dtype', X.dtype, 'y:', y)


    text_labels = [
        't-shirt', 'trouser', 'pullover', 'dress', 'coat',
        'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
    X, y = mnist_train[0:6]
    # plot images
    _, figs = plt.subplots(1, X.shape[0], figsize=(15, 15))
    for f,x,yi in zip(figs, X,y):
        # 3D->2D by removing the last channel dim
        f.imshow(x.reshape((28,28)).asnumpy())
        ax = f.axes
        ax.set_title(text_labels[int(yi)])
        ax.title.set_fontsize(20)
        ax.get_xaxis().set_visible(False)
        ax.get_yaxis().set_visible(False)
    plt.show()
    return True
def main():
    net = nn.Sqeuential()
    net.add(nn.Conv2D(channels=6, kernel_size=5, activation='relu'),
            nn.MaxPool2D(pool_size=2, strides=2),
            nn.Conv2D(channels=16, kernel_size=3, activation='relu'),
            nn.MaxPool2D(pool_size=2, strides=2), nn.Flatten(),
            nn.Dense(120, activation='relu'), nn.Dense(84, activation='relu'),
            nn.Dense(10))

    net.load_parameters('net.params')

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

    mnist_valid = datasets.FashionMNIST(train=False)

    X, y = mnist_valid[:10]
    preds = []

    for x in X:
        x = transformer(x).expand_dims(axis=0)
        pred = net(x).argmax(axis=1)
        preds.append(pred.astype('int32').asscalar())
示例#8
0
import mxnet as mx
import matplotlib.pyplot as plt
from mxnet import autograd, init, gluon, gpu, cpu, context
from mxnet.gluon.data.vision import datasets, transforms
from simplenet import SimpleNet

text_labels = [
    't-shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt',
    'sneaker', 'bag', 'ankle boot'
]

mnist_train = datasets.FashionMNIST(train=True)

# Check the image and the label
X, y = mnist_train[0]
class_name = text_labels[y]
print("X shape: {}, X dtype:{}".format(X.shape, X.dtype))
print("y: {}({}), y dtype:{}".format(y, class_name, y.dtype))

plt.figure(class_name)
plt.imshow(X.squeeze(axis=2).asnumpy())
plt.show()

# Define the transformation and load the data into batches
transformer = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(0.13, 0.31),
])

batch_size = 256
train_data = gluon.data.DataLoader(mnist_train.transform_first(transformer),
示例#9
0
    net.add(nn.Conv2D(channels=6, kernel_size=5, activation='relu'),
            nn.MaxPool2D(pool_size=2, strides=2),
            nn.Conv2D(channels=16, kernel_size=3, activation='relu'),
            nn.MaxPool2D(pool_size=2, strides=2), nn.Flatten(),
            nn.Dense(120, activation='relu'), nn.Dense(84, activation='relu'),
            nn.Dense(10))

net.load_params('net.params')

# predict

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

mnist_valid = datasets.FashionMNIST(train=False)
X, y = mnist_valid[:6]
preds = []
for x in X:
    x = transformer(x).expand_dims(axis=0)
    pred = net(x).argmax(axis=1)
    preds.append(pred.astype('int32').asscalar())

_, figs = plt.subplots(1, 6, figsize=(15, 15))
text_labels = [
    't-shirt', 'trouser', 'pullover', 'dress', 'coat', 'sanda', 'shirt',
    'sneaker', 'bag', 'ankle boot'
]

for f, x, yi, pyi in zip(figs, X, y, preds):
    f.imshow(x.reshape((28, 28)).asnumpy())
示例#10
0
def train():
    mnist_train = datasets.FashionMNIST(train=True)
    X, y = mnist_train[0]
    print('X shape: ', X.shape, 'X dtype', X.dtype, 'y:', y)

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

    batch_size = 256
    train_data = gluon.data.DataLoader(
        mnist_train, batch_size=batch_size, shuffle=True, num_workers=4)

    for data, label in train_data:
        print(data.shape, label.shape)
        break

    mnist_valid = gluon.data.vision.FashionMNIST(train=False)
    valid_data = gluon.data.DataLoader(
        mnist_valid.transform_first(transformer),
        batch_size=batch_size, num_workers=4)

    net = nn.HybridSequential()
    net.add(nn.Conv2D(channels=6, kernel_size=5, activation='relu'),
            nn.MaxPool2D(pool_size=2, strides=2),
            nn.Conv2D(channels=16, kernel_size=3, activation='relu'),
            nn.MaxPool2D(pool_size=2, strides=2),
            nn.Flatten(),
            nn.Dense(120, activation="relu"),
            nn.Dense(84, activation="relu"),
            nn.Dense(10))
    net.initialize(init=init.Xavier(), ctx=device)
    net.hybridize()

    softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()

    trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.1})

    for epoch in range(10):
        train_loss, train_acc, valid_acc = 0., 0., 0.
        tic = time.time()
        for data, label in train_data:
            data = data.copyto(device)
            label = label.copyto(device)
            # 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(output, label)
        # calculate validation accuracy
        for data, label in valid_data:
            data = data.copyto(device)
            label = label.copyto(device)
            valid_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))

    net.export('net-trained', epoch=10)
def run_mnist(
    hook=None,
    set_modes=False,
    num_steps_train=None,
    num_steps_eval=None,
    epochs=2,
    save_interval=None,
    save_path="./saveParams",
):
    batch_size = 4
    normalize_mean = 0.13
    mnist_train = datasets.FashionMNIST(train=True)

    X, y = mnist_train[0]
    ("X shape: ", X.shape, "X dtype", X.dtype, "y:", y)

    text_labels = [
        "t-shirt",
        "trouser",
        "pullover",
        "dress",
        "coat",
        "sandal",
        "shirt",
        "sneaker",
        "bag",
        "ankle boot",
    ]
    transformer = transforms.Compose(
        [transforms.ToTensor(),
         transforms.Normalize(normalize_mean, 0.31)])

    mnist_train = mnist_train.transform_first(transformer)
    mnist_valid = gluon.data.vision.FashionMNIST(train=False)

    train_data = gluon.data.DataLoader(mnist_train,
                                       batch_size=batch_size,
                                       shuffle=True,
                                       num_workers=4)
    valid_data = gluon.data.DataLoader(
        mnist_valid.transform_first(transformer),
        batch_size=batch_size,
        num_workers=4)

    # Create Model in Gluon
    net = nn.HybridSequential()
    net.add(
        nn.Conv2D(channels=6, kernel_size=5, activation="relu"),
        nn.MaxPool2D(pool_size=2, strides=2),
        nn.Conv2D(channels=16, kernel_size=3, activation="relu"),
        nn.MaxPool2D(pool_size=2, strides=2),
        nn.Flatten(),
        nn.Dense(120, activation="relu"),
        nn.Dense(84, activation="relu"),
        nn.Dense(10),
    )
    net.initialize(init=init.Xavier(), ctx=mx.cpu())

    if hook is not None:
        # Register the forward Hook
        hook.register_hook(net)

    softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()
    trainer = gluon.Trainer(net.collect_params(), "sgd",
                            {"learning_rate": 0.1})
    hook.register_hook(softmax_cross_entropy)

    # Start the training.
    for epoch in range(epochs):
        train_loss, train_acc, valid_acc = 0.0, 0.0, 0.0
        tic = time.time()
        if set_modes:
            hook.set_mode(modes.TRAIN)

        i = 0
        for data, label in train_data:
            data = data.as_in_context(mx.cpu(0))
            # 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(output, label)
            i += 1
            if num_steps_train is not None and i >= num_steps_train:
                break
        # calculate validation accuracy
        if set_modes:
            hook.set_mode(modes.EVAL)
        i = 0
        for data, label in valid_data:
            data = data.as_in_context(mx.cpu(0))
            val_output = net(data)
            valid_acc += acc(val_output, label)
            loss = softmax_cross_entropy(val_output, label)
            i += 1
            if num_steps_eval is not None and i >= num_steps_eval:
                break
        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,
            ))
        if save_interval is not None and (epoch % save_interval) == 0:
            net.save_parameters("{0}/params_{1}.params".format(
                save_path, epoch))
示例#12
0
def main():
    mnist_train = datasets.FashionMNIST(train=True)
    X, y = mnist_train[0]
    #print('X ',X)
    #print('y ', y)

    print('X shape: ', X.shape, 'X dtype ', X.dtype, 'y:', y)

    text_labels = [
        't-shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt',
        'sneaker', 'bag', 'ankle boot'
    ]
    X, y = mnist_train[0:10]
    # plot images
    #  display.set_matplotlib_formats('svg')
    #  _, figs = plt.subplots(1, X.shape[0], figsize=(15, 15))
    #  for f,x,yi in zip(figs, X,y):
    #    # 3D->2D by removing the last channel dim
    #    f.imshow(x.reshape((28,28)).asnumpy())
    #    ax = f.axes
    #    ax.set_title(text_labels[int(yi)])
    #    ax.title.set_fontsize(14)
    #    ax.get_xaxis().set_visible(False)
    #    ax.get_yaxis().set_visible(False)
    #  plt.show()
    #
    transformer = transforms.Compose(
        [transforms.ToTensor(),
         transforms.Normalize(0.13, 0.31)])

    mnist_train = mnist_train.transform_first(transformer)

    batch_size = 64

    train_data = gluon.data.DataLoader(mnist_train,
                                       batch_size=batch_size,
                                       shuffle=True,
                                       num_workers=4)

    mnist_valid = gluon.data.vision.FashionMNIST(train=False)
    valid_data = gluon.data.DataLoader(
        mnist_valid.transform_first(transformer),
        batch_size=batch_size,
        num_workers=4)

    net = nn.Sequential()

    net.add(nn.Conv2D(channels=6, kernel_size=5, activation='relu'),
            nn.MaxPool2D(pool_size=2, strides=2),
            nn.Conv2D(channels=16, kernel_size=3, activation='relu'),
            nn.MaxPool2D(pool_size=2, strides=2), nn.Flatten(),
            nn.Dense(120, activation='relu'), nn.Dense(84, activation='relu'),
            nn.Dense(10))
    net.initialize(init=init.Xavier())

    softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()

    trainer_opt = gluon.Trainer(net.collect_params(), 'sgd',
                                {'learning_rate': 0.1})

    for epoch in range(10):
        train_loss, train_acc, valid_acc = 0., 0., 0.,
        tic = time.time()

        for data, label in train_data:
            # forward and backward
            with autograd.record():
                output = net(data)
                loss = softmax_cross_entropy(output, label)
            loss.backward()

            # update parameters
            trainer_opt.step(batch_size)

            # calculate training metrics
            train_loss += loss.mean().asscalar()
            train_acc += acc(output, label)

        for data, label in valid_data:
            valid_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))

        net.save_parameters('net.params')
示例#13
0
def train_neural_network_example():
    mnist_train = datasets.FashionMNIST(train=True)
    X, y = mnist_train[0]
    print('X shape:', X.shape, 'X dtype:', X.dtype, 'y:', y)

    text_labels = [
        't-shirt', 'trouser', 'pullover', 'dress', 'coat', 'sandal', 'shirt',
        'sneaker', 'bag', 'ankle boot'
    ]
    X, y = mnist_train[0:6]

    # Plot images.
    _, figs = plt.subplots(1, X.shape[0], figsize=(15, 15))
    for f, x, yi in zip(figs, X, y):
        # 3D -> 2D by removing the last channel dim.
        f.imshow(x.reshape((28, 28)).asnumpy())
        ax = f.axes
        ax.set_title(text_labels[int(yi)])
        ax.title.set_fontsize(20)
        ax.get_xaxis().set_visible(False)
        ax.get_yaxis().set_visible(False)
    plt.show()

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

    batch_size = 256
    train_data = gluon.data.DataLoader(mnist_train,
                                       batch_size=batch_size,
                                       shuffle=True,
                                       num_workers=4)

    for data, label in train_data:
        print(data.shape, label.shape)
        break

    mnist_valid = gluon.data.vision.FashionMNIST(train=False)
    valid_data = gluon.data.DataLoader(
        mnist_valid.transform_first(transformer),
        batch_size=batch_size,
        num_workers=4)

    # Define a model.
    net = build_network(nn.Sequential())
    net.initialize(init=init.Xavier())
    #net.collect_params().initialize(init.Xavier(), ctx=ctx)

    # Define the loss function and optimization method for training.
    softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()
    trainer = gluon.Trainer(net.collect_params(), 'sgd',
                            {'learning_rate': 0.1})
    #trainer = gluon.Trainer(net.collect_params(), 'adam', {'learning_rate': .001})

    train_model(net,
                trainer,
                softmax_cross_entropy,
                train_data,
                valid_data,
                num_epochs=10)

    # Save the model parameters.
    net.save_parameters('./net.params')
示例#14
0
def run_mnist_gluon_model(
    hook=None,
    hybridize=False,
    set_modes=False,
    register_to_loss_block=False,
    num_steps_train=None,
    num_steps_eval=None,
    make_input_zero=False,
    normalize_mean=0.13,
    normalize_std=0.31,
    save_custom_tensor=False,
):
    batch_size = 4
    if make_input_zero:
        mnist_train = datasets.FashionMNIST(
            train=True,
            transform=lambda data, label: (data.astype(np.float32) * 0, label))
        normalize_mean = 0.0
    else:
        mnist_train = datasets.FashionMNIST(train=True)

    X, y = mnist_train[0]
    ("X shape: ", X.shape, "X dtype", X.dtype, "y:", y)

    text_labels = [
        "t-shirt",
        "trouser",
        "pullover",
        "dress",
        "coat",
        "sandal",
        "shirt",
        "sneaker",
        "bag",
        "ankle boot",
    ]
    X, y = mnist_train[0:10]
    transformer = transforms.Compose(
        [transforms.ToTensor(),
         transforms.Normalize(normalize_mean, 0.31)])

    mnist_train = mnist_train.transform_first(transformer)
    mnist_valid = gluon.data.vision.FashionMNIST(train=False)

    train_data = gluon.data.DataLoader(mnist_train,
                                       batch_size=batch_size,
                                       shuffle=True,
                                       num_workers=4)
    valid_data = gluon.data.DataLoader(
        mnist_valid.transform_first(transformer),
        batch_size=batch_size,
        num_workers=4)

    # Create Model in Gluon
    net = nn.HybridSequential()
    net.add(
        nn.Conv2D(channels=6, kernel_size=5, activation="relu"),
        nn.MaxPool2D(pool_size=2, strides=2),
        nn.Conv2D(channels=16, kernel_size=3, activation="relu"),
        nn.MaxPool2D(pool_size=2, strides=2),
        nn.Flatten(),
        nn.Dense(120, activation="relu"),
        nn.Dense(84, activation="relu"),
        nn.Dense(10),
    )
    net.initialize(init=init.Xavier(), ctx=mx.cpu())
    if hybridize:
        net.hybridize(())

    if hook is not None:
        # Register the forward Hook
        hook.register_hook(net)

    softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()
    trainer = gluon.Trainer(net.collect_params(), "sgd",
                            {"learning_rate": 0.1})
    if register_to_loss_block:
        hook.register_hook(softmax_cross_entropy)

    if set_modes:
        train_loss_name = eval_loss_name = "loss_scalar"
        train_acc_name = eval_acc_name = "acc"
    else:
        train_loss_name = "train_loss_scalar"
        eval_loss_name = "eval_loss_scalar"
        train_acc_name = "train_acc"
        eval_acc_name = "loss_acc"

    # Start the training.
    if save_custom_tensor:
        hook.save_tensor("custom_tensor_1", mx.nd.array([1, 2, 3]))
    for epoch in range(1):
        train_loss, train_acc, valid_acc = 0.0, 0.0, 0.0
        tic = time.time()
        if set_modes:
            hook.set_mode(modes.TRAIN)

        i = 0
        for data, label in train_data:
            if save_custom_tensor:
                hook.save_tensor("custom_tensor_2", mx.nd.array([1, 2, 3]))
            data = data.as_in_context(mx.cpu(0))
            # 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(output, label)
            # hook.save_scalar(train_loss_name, train_loss)
            # hook.save_scalar(train_acc_name, train_acc)
            if save_custom_tensor:
                # This tensor will not be added to default collections since
                # collections have already been exported
                hook.save_tensor("custom_tensor_3", mx.nd.array([1, 2, 3]))
            i += 1
            if num_steps_train is not None and i >= num_steps_train:
                break
        # calculate validation accuracy
        if set_modes:
            hook.set_mode(modes.EVAL)
        i = 0
        for data, label in valid_data:
            data = data.as_in_context(mx.cpu(0))
            val_output = net(data)
            valid_acc += acc(val_output, label)
            loss = softmax_cross_entropy(val_output, label)
            # hook.save_tensor('eval_labels', label)
            # hook.save_scalar(eval_acc_name, valid_acc)
            # hook.save_scalar(eval_loss_name, loss)
            i += 1
            if num_steps_eval is not None and i >= num_steps_eval:
                break
        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,
            ))
示例#15
0
def basic_example():
	# Allocate data to a GPU.
	# MXNet's NDArray is very similar to Numpy.
	# One major difference is NDArray has a context attribute that specifies which device this array is on.
	# By default, it is cpu().
	x = nd.ones((3, 4), ctx=gpu())

	# Copy x to the second GPU, gpu(1).
	x.copyto(gpu(1))

	# Run an operation on a GPU.
	y = nd.random.uniform(shape=(3, 4), ctx=gpu())
	print('x + y =', x + y)

	# Run a neural network on a GPU.
	net = nn.Sequential()
	net.add(nn.Conv2D(channels=6, kernel_size=5, activation='relu'),
		nn.MaxPool2D(pool_size=2, strides=2),
		nn.Conv2D(channels=16, kernel_size=3, activation='relu'),
		nn.MaxPool2D(pool_size=2, strides=2),
		nn.Flatten(),
		nn.Dense(120, activation='relu'),
		nn.Dense(84, activation='relu'),
		nn.Dense(10))

	# Load the saved parameters into GPU 0 directly, or use net.collect_params().reset_ctx to change the device.
	net.load_parameters('./net.params', ctx=gpu(0))

	# Create input data on GPU 0.
	x = nd.random.uniform(shape=(1,1,28,28), ctx=gpu(0))

	# The forward function will then run on GPU 0.
	print('net(x) =', net(x))

	# Multi-GPU training.
	batch_size = 256
	transformer = transforms.Compose([transforms.ToTensor(), transforms.Normalize(0.13, 0.31)])
	train_data = gluon.data.DataLoader(datasets.FashionMNIST(train=True).transform_first(transformer), batch_size, shuffle=True, num_workers=4)
	valid_data = gluon.data.DataLoader(datasets.FashionMNIST(train=False).transform_first(transformer), batch_size, shuffle=False, num_workers=4)

	# Diff 1: Use two GPUs for training.
	devices = [gpu(0), gpu(1)]

	# Diff 2: reinitialize the parameters and place them on multiple GPUs.
	net.collect_params().initialize(force_reinit=True, ctx=devices)

	# Loss and trainer are the same as before.
	softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()
	trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.1})

	for epoch in range(10):
		train_loss = 0.
		tic = time()
		for data, label in train_data:
			# Diff 3: split batch and load into corresponding devices.
			data_list = gluon.utils.split_and_load(data, devices)
			label_list = gluon.utils.split_and_load(label, devices)

			# Diff 4: run forward and backward on each devices.
			# MXNet will automatically run them in parallel.
			with autograd.record():
				losses = [softmax_cross_entropy(net(X), y) for X, y in zip(data_list, label_list)]
			for l in losses:
				l.backward()

			trainer.step(batch_size)

			# Diff 5: sum losses over all devices.
			train_loss += sum([l.sum().asscalar() for l in losses])

		print('Epoch %d: Loss: %.3f, Time %.1f sec' % (epoch, train_loss/len(train_data)/batch_size, time()-tic))
示例#16
0
# Device configuration
device = mx.cpu() if len(mx.test_utils.list_gpus()) == 0 else mx.gpu()
print('current ctx =>', device)

# Hyper-parameters
num_epochs = 5
num_classes = 10
batch_size = 100
learning_rate = 0.001

# FashionMNIST (images and labels)
transformer = transforms.Compose(
    [transforms.ToTensor(),
     transforms.Normalize(0.13, 0.31)])

train_dataset = datasets.FashionMNIST(root='../../data', train=True)

train_dataset = train_dataset.transform_first(transformer)

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

test_dataset = test_dataset.transform_first(transformer)

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

test_loader = gluon.data.DataLoader(dataset=test_dataset,
                                    batch_size=batch_size,
                                    shuffle=False)
示例#17
0
net.load_params('net.params', ctx=gpu(0))

x = nd.random.uniform(shape=(1, 1, 28, 28), ctx=gpu(0))
print(net(x))

# advanced multi-gpu training

batch_size = 256

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

train_data = gluon.data.DataLoader(
    datasets.FashionMNIST(train=True).transform_first(transformer),
    batch_size,
    shuffle=True,
    num_workers=4)

valid_data = gluon.data.DataLoader(
    datasets.FashionMNIST(train=False).transform_first(transformer),
    batch_size,
    shuffle=False,
    num_workers=4)

# devices = [gpu(0), gpu(1)]
devices = [gpu(x) for x in range(gpu_count)]

net.collect_params().initialize(force_reinit=True, ctx=devices)
示例#18
0
from mxnet import nd, gluon, init, autograd
from mxnet.gluon import nn
from mxnet.gluon.data.vision import datasets, transforms
from IPython import display

import matplotlib.pyplot as plt
import time

# Get data
mnist_train = datasets.FashionMNIST(
        root='./data',
        train=True)
X, y = mnist_train[0]
print(('X shape: ', X.shape, 'X dtype: ', X.dtype, 'y: ', y))

text_labels = [
    't-shirts', 'trouser', 'pullover', 'dress', 'coat', 
    'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']

X, y = mnist_train[0:10]

# plot images
display.set_matplotlib_formats('svg')
_, figs = plt.subplots(1, X.shape[0], figsize=(15, 15))

for f, x, yi in zip(figs, X, y):
    # 3D -> 2D by removing the last channel dim
    f.imshow(x.reshape((28, 28)).asnumpy())
    ax = f.axes
    ax.set_title(text_labels[int(yi)])
    ax.title.set_fontsize(14)