线性回归的简洁实现

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()  # 平方损失又称L2范数损失

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)>)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是天才很好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值