线性回归的简洁实现(Gluon训练模型)

线性回归的简洁实现(Gluon训练模型)_第1张图片

目的:通过多次迭代,找到最符合的w和b使得与特征值通过计算来求得最接近标签的值

1. 构造特征值(1000,2),标签(1000,1)

example_num=1000;
input_num=2;
batch_size=10;
features=nd.random.normal(scale=1,shape=(example_num,input_num));
true_w=[1.2,2.1];
true_b=0;-----> 偏差参数默认为0
labels=nd.dot(features,nd.array(true_w).T)+true_b;

2. 开始机器预测 权重w 和偏差b

每次10条随机的特征值和标签(data_iter1可以迭代)

from mxnet.gluon import data as gdata;
dataset=gdata.ArrayDataset(feature,labels);

data_iter1=gdata.DataLoader(dataset,batch_size,shuffle=True);
from mxnet.gluon import nn,loss as gloss;
from mxnet import init,gluon;
# 定义一个Sequential容器
net=nn.Sequential();
# 全连接层是一个Dense实例,就一层,该层输出个数为1
net.add(nn.Dense(1));
#权重参数初始化时随机采样于均值为0、标准差为0.01的正态分布
net.initialize(init.Normal(sigma=0.01));
#平⽅损失函数
loss=gloss.L2Loss();
#Trainer实例,sgd优化算法:小批量随机梯度下降,这样自动迭代参数
#net.collect_params():获取通过add的全部参数
trainer=gluon.Trainer(net.collect_params(),'sgd',{'learning_rate':0.03})
num_epochs=3;
for epoch in range(num_epochs):
    for X,y in data_iter1:
        with autograd.record():
            l=loss(net(X),y);
        #等价于 l.sum().backward(),个数为batch_size
        # 如果为 loss(net(X), y).mean() 则下面写成 trainer.step(1);
        l.backward();
        #样本梯度求平均 所以除以batch_size
        #开始迭代模型参数,参数都在trainer里面了
        trainer.step(batch_size);
    l=loss(net(features),labels);
    print('epoch %d,loss: %f'%(epoch+1,l.mean().asnumpy()))

获取学到的权重(weight)和偏差(bias)

dense=net[0];
true_w,dense.weight.data();
true_b,dense.bias.data();

线性回归的简洁实现(Gluon训练模型)_第2张图片

你可能感兴趣的:(深度学习)