《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
#定义模型
#导入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
上一篇: 入行初期遇到的小问题
下一篇: 字符串最后一个单词的长度
推荐阅读
-
MXNet动手学深度学习笔记:Gluon实现Dropout
-
动手学深度学习PyTorch-task1(线性回归;Softmax与分类模型;多层感知机)
-
《动手学深度学习》task1——线性回归、softmax与分类模型,多层感知机笔记
-
《动手学深度学习》task01:线性回归;softmax回归;多层感知机
-
《动手学深度学习》之线性回归的从零实现(含个人理解)
-
动手学深度学习(二)——正则化(gluon)
-
动手学深度学习(一)——线性回归(gluon)
-
《Gluon 动手学深度学习 一》安装和运行
-
《Gluon 动手学深度学习 五》线性回归Gluon实现
-
MXNET深度学习框架-06-使用gluon实现逻辑回归