欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-05 08:58:18
...
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
    

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

#定义模型
#导入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()))

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

#结果比较
dense=net[0]
true_w,dense.weight.data()

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

true_b,dense.bias.data()
《Gluon 动手学深度学习 五》线性回归Gluon实现

参考:

1.https://github.com/mli/gluon-tutorials-zh

相关标签: mxnet