[MXNet逐梦之旅]练习四·使用MXNetFashionMNIST数据集分类简洁实现

9 篇文章 0 订阅
8 篇文章 0 订阅

[MXNet逐梦之旅]练习四·使用MXNetFashionMNIST数据集分类简洁实现

  • code
#%%
import sys
import time
from mxnet import gluon as gl
import mxnet as mx
from matplotlib import pyplot as plt
from mxnet import autograd, nd
import numpy as np

mnist_train = gl.data.vision.FashionMNIST(root="fashion-mnist/",train=True)
mnist_test = gl.data.vision.FashionMNIST(root="fashion-mnist/",train=False)
print(len(mnist_train), len(mnist_test))

"""我也遇到这个问题,想用之前下载好的数据集直接使用。但是由于MXNet的MNIST数据集读取的机制会去验证数据集的正确性,所以我使用的用keras下载的数据集放到相关位置,MXNet还是还是会去下载。
解决方法,我用MXNet下载了好了fashion-mnist数据集,上传了,大家可以直接下载到相应位置解压即可。
也可以从采用自定义位置的方式 :_mnist_train = gl.data.vision.FashionMNIST(root="fashion-mnist/",train=True)_
只需放到编写代码处解压即可。。"""

#%%

batch_size = 100
transformer = gl.data.vision.transforms.ToTensor()
if sys.platform.startswith('win'):
    num_workers = 0  # 0表示不用额外的进程来加速读取数据
else:
    num_workers = 4


train_iter = gl.data.DataLoader(mnist_train.transform_first(transformer),
                              batch_size, shuffle=True,
                              num_workers=num_workers)
test_iter = gl.data.DataLoader(mnist_test.transform_first(transformer),
                             1000, shuffle=False,
                             num_workers=num_workers)



def get_fashion_mnist_labels(labels):
    text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat',
                   'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
    return([text_labels[int(i.asnumpy())] for i in labels])

def show_img(x,y):
    plt.figure("Image") # 图像窗口名称
    plt.imshow(x.asnumpy()*255)
    plt.title(get_fashion_mnist_labels(y)) # 图像题目
    plt.show()


"""start = time.time()
for X, y in train_iter:
    break
print('%.2f sec' % (time.time() - start))"""

model = gl.nn.Sequential()
model.add(gl.nn.Dense(256,activation="relu"))
model.add()
model.add(gl.nn.Dense(10))
model.initialize(mx.init.Normal(sigma=0.01))

lr = 0.1
loss = gl.loss.SoftmaxCrossEntropyLoss()

trainer = gl.Trainer(model.collect_params(), 'sgd', {'learning_rate': lr})

def accuracy(y_hat, y):
    return (y_hat.argmax(axis=1) == y.astype('float32')).mean().asscalar()

num_epochs = 10
for epoch in range(1, num_epochs + 1):
    losses = []
    for X, y in train_iter:
        with autograd.record():
            l = loss(model(X), y)
            losses.append(l.asnumpy())
        l.backward()
        trainer.step(batch_size)

    loss_sum = np.mean(losses)
    for Xt, yt in test_iter:
        accy = accuracy(model(Xt),yt)
        break

    print('epoch %d, loss: %f, accy: %f' % (epoch,loss_sum,accy))
  • out
60000 10000
epoch 1, loss: 0.773934, accy: 0.812000
epoch 2, loss: 0.490065, accy: 0.855000
epoch 3, loss: 0.436965, accy: 0.852000
epoch 4, loss: 0.401657, accy: 0.875000
epoch 5, loss: 0.380360, accy: 0.856000
epoch 6, loss: 0.363831, accy: 0.869000
epoch 7, loss: 0.349141, accy: 0.873000
epoch 8, loss: 0.337938, accy: 0.877000
epoch 9, loss: 0.326593, accy: 0.874000
epoch 10, loss: 0.319641, accy: 0.884000

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小宋是呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值