1. 程式人生 > >mxnet-訓練器與分批讀取樣本

mxnet-訓練器與分批讀取樣本

sets rate boot shuffle dataset cpu utf text mali

#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Fri Aug 10 16:13:29 2018 @author: myhaspl """ from mxnet import nd, gluon, init, autograd from mxnet.gluon import nn from mxnet.gluon.data.vision import datasets,transforms import matplotlib.pyplot as plt from time import time mnist_train = datasets.FashionMNIST(train=True) X, y = mnist_train[0] print (‘X shape: ‘, X.shape, ‘X dtype‘, X.dtype, ‘y:‘, y,‘Y dtype‘, y.dtype) #x:(height, width, channel) #y:numpy.scalar,標簽 text_labels = [ ‘t-shirt‘, ‘trouser‘, ‘pullover‘, ‘dress‘, ‘coat‘, ‘sandal‘, ‘shirt‘, ‘sneaker‘, ‘bag‘, ‘ankle boot‘ ] X, y = mnist_train[0:6]#取6個樣本 _, 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() #轉換圖像為(channel, height, weight)格式,並且為floating數據類型,通過transforms.ToTensor。 #另外,normalize所有像素值 使用 transforms.Normalize平均值0.13和標準差0.31. transformer = transforms.Compose([ transforms.ToTensor(), transforms.Normalize(0.13, 0.31)]) #只轉換第一個元素,圖像部分。第二個元素為標簽。 mnist_train = mnist_train.transform_first(transformer) #加載批次數據 batch_size = 200 train_data = gluon.data.DataLoader(mnist_train, batch_size=batch_size, shuffle=True, num_workers=4) #讀取本批數據 i=1 for data, label in train_data: print i print data,label break#沒有這一行,會以每批次200個數據來讀取。 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()) print net #輸出softmax與誤差 softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss() #定義訓練器 trainer = gluon.Trainer(net.collect_params(), ‘sgd‘, {‘learning_rate‘: 0.1})

-0.41935483
? ? -0.41935483]
? ?[-0.41935483 -0.41935483 -0.41935483 ... -0.41935483 -0.41935483
? ? -0.41935483]]]]
<NDArray 200x1x28x28 @cpu_shared(0)>?
[9 0 9 ... 3 8 5]
<NDArray 200 @cpu_shared(0)>
Sequential(
? (0): Conv2D(None -> 6, kernel_size=(5, 5), stride=(1, 1))
? (1): MaxPool2D(size=(2, 2), stride=(2, 2), padding=(0, 0), ceil_mode=False)

? (2): Conv2D(None -> 16, kernel_size=(3, 3), stride=(1, 1))
? (3): MaxPool2D(size=(2, 2), stride=(2, 2), padding=(0, 0), ceil_mode=False)
? (4): Flatten
? (5): Dense(None -> 120, Activation(relu))
? (6): Dense(None -> 84, Activation(relu))
? (7): Dense(None -> 10, linear)
)

mxnet-訓練器與分批讀取樣本