线性回归实现

1.python 实现步骤
数据部分
数据生成
数据处理(小批量提取,生成迭代器)
模型初始化
模型定义
模型初始化
损失函数定义
更新规则:
优化函数定义:SGD 梯度下降
训练(包含求出损失,反向传递,梯度下降,梯度清零)
2. 代码部分+解读:
import torch as tc
import numpy as np
from torch.utils import data
from LimuAi.Linear_regression import synthetic_data
from torch import nn
#处理数据:
‘’’
定义实际数据
‘’’
true_k=tc.tensor([2,-3.4])
true_b=4.2
feature,lable=synthetic_data(true_k,true_b,1000) #数据初始化
‘’’
定义读取数据的方法
‘’’
def read_data(sample,batch_size,is_train=True):#python是一个缩进控制组块的语言
dataset=data.TensorDataset(*sample) #将sample变成元组之后,经过TensorDataset变成dataset对象,方便传入dataloader函数进行小批量的抽取(我猜的,还没求证)
return data.DataLoader(dataset,batch_size,shuffle=is_train) #返回一个迭代器,小批量的返回样本数据

batch_size=10
item=read_data((feature,lable),batch_size) #生成item作为下方训练用的迭代器,进行小批量随机梯度下降
print(next(iter(item))) # 使用next得出第一个小批次

‘’’
定义模型
‘’’

net = nn.Sequential(nn.Linear(2, 1)) #搭建一个单层神经网络,并且神经元使用的是线性结构,且有两个输入,一个输出

‘’’
初始化模型参数
‘’’

net[0].weight.data.normal_(0, 0.01)#对net实力初始化模型即使用[0]来定位,weight/bias .data来初始化,
net[0].bias.data.fill_(0)
‘’’
定义损失函数
‘’’
loss = nn.MSELoss() #使用nn底下的包即可实现计算MSE

‘’’
定义优化算法
‘’’

trainer = tc.optim.SGD(net.parameters(), lr=0.03)
#把优化算法也定义成对象,通过torch的optim包的SGD来实例化,SGD实例化需要模型参数和学习率(也是梯度下降所必须的)
#参数通过net的parameter可直接输入

‘’’
训练
‘’’
num_epochs = 3 #把数据集遍历三遍
for epoch in range(num_epochs): #迭代器必须是一个list/元组之类的
for X, y in item: #取出随机小批次,用来梯度下降
l=loss(net(X),y)#比较计算出的yhat和真实的y的RMSE
trainer.zero_grad() #用来清除模型的累计梯度
l.backward() #反向传递,回调
trainer.step() #更新模型参数
l=loss(net(feature),lable)
print(f’epoch {epoch + 1}, loss {l:f}')

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值