点击关注我的GitHub

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     

 

posted @ 2022-01-15 20:03  justkeen  阅读(407)  评论(0编辑  收藏  举报