Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
本文实例讲述了Python使用gluon/mxnet模块实现的mnist手写数字识别功能。分享给大家供大家参考,具体如下:
importgluonbookasgb
frommxnetimportautograd,nd,init,gluon
frommxnet.gluonimportlossasgloss,dataasgdata,nn,utilsasgutils
importmxnetasmx
net=nn.Sequential()
withnet.name_scope():
net.add(
nn.Conv2D(channels=32,kernel_size=5,activation='relu'),
nn.MaxPool2D(pool_size=2,strides=2),
nn.Flatten(),
nn.Dense(128,activation='sigmoid'),
nn.Dense(10,activation='sigmoid')
)
lr=0.5
batch_size=256
ctx=mx.gpu()
net.initialize(init=init.Xavier(),ctx=ctx)
train_data,test_data=gb.load_data_fashion_mnist(batch_size)
trainer=gluon.Trainer(net.collect_params(),'sgd',{'learning_rate':lr})
loss=gloss.SoftmaxCrossEntropyLoss()
num_epochs=30
deftrain(train_data,test_data,net,loss,trainer,num_epochs):
forepochinrange(num_epochs):
total_loss=0
forx,yintrain_data:
withautograd.record():
x=x.as_in_context(ctx)
y=y.as_in_context(ctx)
y_hat=net(x)
l=loss(y_hat,y)
l.backward()
total_loss+=l
trainer.step(batch_size)
mx.nd.waitall()
print("Epoch[{}]:Loss{}".format(epoch,total_loss.sum().asnumpy()[0]/(batch_size*len(train_data))))
if__name__=='__main__':
try:
ctx=mx.gpu()
_=nd.zeros((1,),ctx=ctx)
except:
ctx=mx.cpu()
ctx
gb.train(train_data,test_data,net,loss,trainer,ctx,num_epochs)
更多关于Python相关内容可查看本站专题:《Python数学运算技巧总结》、《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。