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

                              

                                                

更多推荐