from mxnet import autograd,nd #生成数据集 num_inputs=2 num_examples=1000 true_w=[2,-3.4] true_b=4.2 features=nd.random.normal(scale=1,shape=(num_examples,num_inputs)) labels=true_w[0]*features[:,0]+true_w[1]*features[:,1]+true_b labels+=nd.random.normal(scale=0.01,shape=labels.shape) #读取数据 from mxnet.gluon import data as gdata batch_size=10 dataset = gdata.ArrayDataset(features,labels) data_iter = gdata.DataLoader(dataset,batch_size,shuffle=True) #读取第一个小批量数据样本 for X,y in data_iter: print(X,y) break
#定义模型 #导入nn模块,定义一个模型变量net,是Sequential实例。 #sequential可以看做是一个串联各个层的容器,在构造模型时,在容器中依次添加层。 #当给定输入数据时,容器中的每一层将依次计算并将输出作为下一层的输入。 from mxnet.gluon import nn net = nn.Sequential() #线性回归输出层又要全连接层。在Gluon中,全连接层是Dense实例。 #当前该层输出个数为1. net.add(nn.Dense(1))
#初始化模型参数 from mxnet import init #初始化时权重随机采样于平均值为0标准差为0.01的正态分布,偏差初始化为0 net.initialize(init.Normal(sigma=0.01)) #定义损失函数 from mxnet.gluon import loss as gloss #平方损失 loss = gloss.L2Loss() #定义优化算法 from mxnet import gluon trainer = gluon.Trainer(net.collect_params(),'sgd',{'learning_rate':0.03})
#训练模型 num_epochs = 3 for epoch in range(1, num_epochs + 1): for X, y in data_iter: with autograd.record(): l = loss(net(X), y) l.backward() #通过调用step函数来迭代模型参数。 trainer.step(batch_size) print("epoch %d, loss: %f" % (epoch, loss(net(features), labels).mean().asnumpy()))
#结果比较 dense=net[0] true_w,dense.weight.data()
true_b,dense.bias.data()
参考:
1.https://github.com/mli/gluon-tutorials-zh