《Gluon 动手学深度学习 五》线性回归Gluon实现

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

猜你喜欢

转载自blog.csdn.net/qq_42189368/article/details/80724884