深度学习-自动微分流程
1、什么是自动微分
概念:自动微分是pytoch中求导的模块 (里面封装了各种求导的公式)
2、自动微分在深度学习的作用
自动微分的作用:就是求损失函数对模型参数的导数,最终用于更新权重和偏执
线性模型建立流程:
我们的目的就是需要做出一个模型:现在是线性的模型 公式为 y= wx+b
我们已知的数据是我们的结果(y)和输入数据(x)未知的数据就是 权重(w)和
偏执b 我们通过人工或者自动设置一个 w 或者 b 去得到一个y值 这个y值就是预测值 ,再用预测值和已知的真实值y做差 这个值就是我们的误差值 也就是损失值 然后我们需要使用自动微分(就是求损失函数对模型参数的导数)让权重或者偏执知道数值是增加或者下降,然后再通过(W1=W0-学习率*梯度(损失函数/自动微分)去更新权重通过不断的梯度下降让我们的值接近最优值W和最优b最终模型建立
所以自动微分就是在更新权重b或者w的时候中间的梯度,就是求的偏导对

3、模拟线性回归
3.1:搭建线性神经元的流程
准备数据集
构建模型
设置损失函数和优化器
模型训练
前向传播
计算损失函数的值
梯度清零
反向传播
更新参数
模型测试
3.2 正式搭建
3.2.1 准备数据集

将数据集传入

3.2.2 创建数据加载器(主要是用于将我们的数据分批次训练,深度学习的数据较大需要将数据分批次传入)
# 创建数据加载器 shuffle 是否打乱数据 batch_size 一批次的最大数据 drop_last 是否删除最后的一批次 data_loader= DataLoader(dataset,batch_size=16,shuffle=True,drop_last=True)

3.2.3 构建神经网络模型
model = nn.Linear(in_features=1,out_features=1)
3.2.4 设置损失函数和优化器
loss_fn = nn.MSELoss() # 损失函数
optimizer = torch.optim.SGD(model.parameters(),lr=0.01) # 优化器
3.2.5 模型训练
3.2.5.1 训练轮次
epochs = 100 #手动设置 后续神经网络不需要设置
for epoch in epochs:
for x_batch,y_batch in data_loader:
y_pred = model(x_batch) # 前向传播 计算出第一次的数据
loss = loss_fn(y_pred,y_batch ) # 计算损失函数
optimizer.zero_grad() # 梯度清零 重新计算梯度
loss.banckward() # 反向传播
optimizer.step() # 更新参数
# 当前轮数总损失
total_loss += loss.item()*x_bacth.shape[0]
total_samples += x_bacth.shape[0]
avg_loss = total_loss / total_samples


更多推荐
所有评论(0)