#%%
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))
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
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有