本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.
深度学习第一章:最简单的线性回归实现
1. 引言
AI领域的线性回归和其他领域不太一样,包括了名词和实现方式,所以必须先认识重要名词,再把所有步骤熟悉一边,并建立在之前学习线性回归的基础上
2. 学习目的:
- 知道线性回归是什幺
- 知道线性回归在深度学习领域怎幺在python上实现
- 代码实现,运行结果
- 知道每行代码怎幺来的
- 了解与后面的联系
3. 线性回归是什幺
略
4. python 实现步骤
- 数据部分
- 数据生成
- 数据处理(小批量提取,生成迭代器)
模型初始化
- 模型定义
- 模型初始化
- 损失函数定义
更新规则:
- 优化函数定义:SGD 梯度下降
训练(包含求出损失,反向传递,梯度下降,梯度清零)
5. 代码部分+解读:
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}')
Be First to Comment