Learn Pytorch in 14 days (Task1)

0. 基本概念

1. 线性回归

1.1 目标

使用pytorch框架实现线性回归的训练

1.2 相关概念

1.2.1 模型定义

​ 为了简单起见,这里我们假设价格只取决于房屋状况的两个因素,即面积(平方米)和房龄(年)。接下来我们希望探索价格与这两个因素的具体关系。线性回归假设输出与各个输入之间是线性关系:

p r i c e = w a r e a ⋅ a r e a + w a g e ⋅ a g e + b \mathrm{price} = w_{\mathrm{area}} \cdot \mathrm{area} + w_{\mathrm{age}} \cdot \mathrm{age} + b price=wareaarea+wageage+b

1.2.2 模型损失函数以及求解过程

(1)回归问题常用损失函数:

  • 均方误差(MSE)——本次选择
  • 平均绝对误差(MAE)
  • Huber损失(Smooth mean absolute error)
  • log cosh损失
  • quantile损失

(2)求解过程:梯度下降

常用梯度下降:

  • 批量梯度下降(BGD)——本次选择
  • 小批量梯度下降(SGD)
  • 随机梯度下降(MBGD)
  • 其他相关梯度下降方法

1.3 线性回归从零开始

1.3.1 构造数据与批量读取数据(batch)

目标:1. 随机构造样本,基于给定的w和b,添加一个随机量。2. 每次选择一批样本进行梯度下降,减少每次计算的运算量。

关键:torch.randn, torch.index_select,yield

1.3.2 模型、损失函数、优化函数定义

目标:1. 线性回归模型定义;2. 损失函数(MSE)定义;3. 优化函数(BGD)定义

关键:torch.mm, torch.view, torch.data

1.3.3 模型训练

伪代码如下:

初始化参数(训练次数、最小步长、w和b)
循环训练次数:
	每次循环,以批次进行所有样本的遍历:
		计算当前w和b下的误差
		将误差往回传递
		计算误差对w和b的梯度,并根据梯度和步长重新计算w和b
		将梯度清零(不然下次计算梯度会进行累加)

1.4 使用pytorch模型实现

与1.3进行对比:

  • 批量读取数据:使用torch.utils.data
  • 模型定义:torch.nn.Module(主要用于实现前向传递)
  • 损失函数:torch.nn.MSELoss()
  • 优化函数:torch.optim

2. softmax和分类模型

2.1 目标

使用softmax函数将回归问题转换成分类问题

2.2 相关概念

2.2.1 Sof tmax的概念

  • 进行二分类或多分类时,通过概率将回归问题转换为分类问题。
  • 全连结:输入输出全连结

2.2.2 损失函数以及求解过程

(1)分类问题常用损失函数

  • 交叉熵

(2)求解方法(与1.2.2一致)

2.3 softmax从零开始

2.3.1 构造数据与读取数据

(1)构造数据

图像数据:torchvision.datasets.FashionMNIST

(2)批量读取数据

torch.utils.data.DataLoader

2.3.2 模型训练过程

定义softmax函数
定义基于softmax函数的网络
定义损失函数
定义模型评价指标(准确率)
参数初始化

遍历循环次数
	以小批量方式进行x和y的遍历
		基于当前参数的网络预测值计算
		损失函数计算
		梯度清零
		backward并计算梯度
		更新参数
		

2.4 基于pytorch模型实现

与2.4.1的对比

  • 网络模型:定义两层模型,使用nn.Sequential实现模型串联,并且每层模型都是定义为类型。
  • 损失函数:nn.CrossEntropyLoss()
  • 优化函数:torch.optim.SGD(net.parameters(), lr=0.1)

3. 多层感知机

3.1 目的

实现多层模型,实现神经网络模型拟合非线性模型

3.2 相关概念

3.2.1 隐藏层

在输入层与输出层之间的层次

3.2.2 激活函数

  • ReLU函数
  • Sigmoid函数
  • tanh函数

ReLu函数是一个通用的激活函数,目前在大多数情况下使用。但是,ReLU函数只能在隐藏层中使用。

用于分类器时,sigmoid函数及其组合通常效果更好。由于梯度消失问题,有时要避免使用sigmoid和tanh函数。

在神经网络层数较多的时候,最好使用ReLu函数,ReLu函数比较简单计算量少,而sigmoid和tanh函数计算量大很多。

在选择激活函数的时候可以先选用ReLu函数如果效果不理想可以尝试其他激活函数。

3.3 多层感知机从零开始实现

获取数据:d2l.load_data_fashion_mnist
定义模型参数:一层输入、一层隐层、一层输出,所以有两组w/b
定义激活函数:relu
定义网络:输入层——隐层——输出层
定义损失函数:torch.nn.CrossEntropyLoss()
模型训练:
	遍历循环次数
		以小批量方式进行x和y的遍历
			基于当前参数的网络预测值计算
			损失函数计算
			梯度清零
			backward并计算梯度
			更新参数

3.4 多层感知机pytorch实现

与3.3的对比

  • nn.Sequential实现多层网络
  • nn.Linear()实现线性回归
  • nn.ReLU()实现激活函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值