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()
![](https://i-blog.csdnimg.cn/blog_migrate/8377177bb953415e62838313bf3c6d25.png)
参考:
1.https://github.com/mli/gluon-tutorials-zh