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

本文详细介绍了如何通过多次迭代寻找最合适的权重w和偏差b,使用小批量随机梯度下降(sgd)算法优化参数,以使机器学习模型的预测值更接近实际标签。通过构造特征值和标签,定义神经网络模型并初始化参数,采用平方损失函数进行误差计算,最终实现模型参数的优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

目的:通过多次迭代,找到最符合的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();

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值