1.生成数据集
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)
2.读取数据集
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
[[-0.2243541 -0.00421293]
[-0.7290668 0.30196014]
[ 0.13657181 -0.7509184 ]
[-0.02489405 0.63270587]
[ 0.88323224 1.104073 ]
[ 1.5200766 0.2755394 ]
[-0.5385921 -0.8611333 ]
[ 0.37723577 -0.169653 ]
[ 0.04773738 0.40093344]
[-0.70166826 0.18638176]]
<NDArray 10x2 @cpu(0)>
[3.7545047 1.7323694 7.0273776 2.0036626 2.2122235 6.2904167 6.0557494
5.527777 2.938758 2.1595848]
<NDArray 10 @cpu(0)>
3.定义模型
from mxnet.gluon import nn
net = nn.Sequential()
net.add(nn.Dense(1))
4.初始化模型参数
from mxnet import init
net.initialize(init.Normal(sigma=0.01))
5.定义损失函数
from mxnet.gluon import loss as gloss
loss = gloss.L2Loss()
6.定义优化算法
from mxnet import gluon
trainer = gluon.Trainer(net.collect_params(),'sgd',{'learning_rate':0.03})
7.训练模型
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()
trainer.step(batch_size)
l = loss(net(features),labels)
print('epoch%d, loss%f' % (epoch, l.mean().asnumpy()))
epoch1, loss0.035026
epoch2, loss0.000123
epoch3, loss0.000048
dense = net[0]
true_w,dense.weight.data()
([2, -3.4],
[[ 1.9998206 -3.3998005]]
<NDArray 1x2 @cpu(0)>)
true_b, dense.bias.data()
(4.2,
[4.199864]
<NDArray 1 @cpu(0)>)