maxnet详解(一)
从本篇开始,我开辟一块关于mxnet学习的新的版块。
多层感知机前面的内容过于基础,不再赘述。
(一)多层感知机使用mxnet中的Gluon(轮子)
两层的感知机,包含一个hidden layer:
from mxnet import gluon net = gluon.nn.Sequential() with net.name_scope(): net.add(gluon.nn.Flatten()) net.add(gluon.nn.Dense(256,activation='relu')) #其中输入的个数是不需要管的,Dense使用了全连接层 net.add(gluon.nn.Dense(10))#输出为10 net.initialize()
对函数进行了初始化
输入中的Flatten()是因为输入的是28*28的图片,需要进行扁平化处理。
设定完了网络之后的第二部就是进行读取数据啦。
1 import sys 2 sys.path.append('..') 3 #当模块和自己写的脚本不在同一个目录下面的时候 4 #就要使用sys.path.append('模块的地址')进行添加 5 from mxnet import ndarray as nd 6 from mxnet import autograd 7 import utils 8 batch_size = 256 9 train_data,test_data = utils.load_data_fashion_mnist(batch_size) 10 11 softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss() 12 trainer = gluon.Trainer(net.collect_params(),'sgd',{'learning_rate':0.5}) 13 for epoch in range(5): 14 train_loss=0. 15 train_acc=0. 16 for data,label in train_data: 17 with autograd.record(): 18 output = net(data) 19 loss = softmax_cross_entropy(output,label) 20 loss.backward() 21 trainer.step(batch_size) 22 train_loss+=nd.mean(loss).asscalar() 23 train_acc+=utils.accuracy(output,label) 24 test_acc = utils.evaluzte_accuracy(test_data,net) 25 print("%d %f %f",epoch,train_loss/len(train_data),train_acc/len(train_data),test_acc/len(test_data)) 26