线性回归(3)线性回归的简洁实现

一个小练习:线性回归的模型:y=x1W1+x2W2+b

线性回归可以表示成一个单层的神经网络:输入层个数为2,输出层个数为1,由于输入层并不涉及计算,依照惯例,将输出层作为神经网络层数,故其层数为1

使用MXNet框架自带的包可以很容易地实现神经网络。


生成数据集:2个特征,1000例的数据集

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)

读取数据集,gluon提供了data包来读取数据

#读取数据集
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

定义模型:y=x1W1+x2W2+b

Gluon中提供了大量预定义的层,可以方便我们更好地实现神经网络

from mxnet.gluon import nn
# Sequential()为一个串联各层的容器
net = nn.Sequential()
net.add(nn.Dense(1))

# 初始化模型参数
from mxnet import init
net.initialize(init.Normal(sigma=0.01))

# 损失函数
from mxnet.gluon import loss as gloss
loss = gloss.L2Loss() # 平方损失又称L2范数损失

# 定义优化器,Trainer通过net.collect_params()获取net中的所有通过add函数添加的层的参数
from mxnet import gluon.Trainer
trainer = gluon.Trainer(net.collect_params(),'sgd',{'learning_rate':0.03})

训练神经网络:

autograd.record用来记录与求梯度有关的函数(模型),之后可通过backward函数自动求梯度

trainer.step(batch_size)对模型中的全局变量w,b进行优化

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()))


比较学到的模型参数和真实值的差别

# net[0]表示第一层网络
dense = net[0]
# 比较参数w,b的真实值与回归值
true_w, dense.weight.data()
true_b, dense.bias.data()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值