损失函数loss和优化器optimizer

损失函数与优化器的关联_criterion(outputs, labels)_写代码_不错哦的博客-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/shenjianhua005/article/details/123971915?ops_request_misc=&request_id=6583569ecbdc4daf89dbf2d43eac9242&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~all~koosearch~default-2-123971915-null-null.142^v93^koosearch_v1&utm_term=%E6%80%8E%E4%B9%88%E6%A0%B9%E6%8D%AE%E6%8D%9F%E5%A4%B1%E5%BA%A6%E4%BC%98%E5%8C%96&spm=1018.2226.3001.4187

loss与optimizer没有任何关联(直观上),其实它们并不需要直接联系,它们是通过 Tensor 这个类来达到间接联系的。

首先,net网络中的参数都是tensor,一个 tensor 里面有两个地址,一个是存放的这个tensor当前实实在在的值,比如赋值为10,还有一个存放的是10求导后的值(  .grad  ),就是导数。当然,如果没求导,另一个存放的是None。

当我们进行计算loss.backward()的时候,其实就是进行反向链式求导,这个求导是对net中的参数进行求导的,这里面的参数就是tensor,其有两个地址,分别存放当前值和反向求导的值,loss.backward()后,这个时候就每个参数里面都有导数,然后optimizer其实就是根据net每个参数的导数进行优化(在最开始定义的时候就已经绑定optimizer与net的参数了),这也就关联了loss与optimizer了。

optimizer.step()是更新参数

刚刚写完这个,突然想到,loss是怎么跟net中参数联系起来的,其实可以这么来看:

y=w1X1+w2X2+w3X3

我们在计算 loss = criterion(out, input)时,这里的out就等于y就等于w1X1+w2X2+w3X3,(虽然y是一些具体的值,但是这些值是由w1X1+w2X2+w3X3构成的),所以 losss.backward()的时候就是更新w1,w2,w3,所以这就关联了。


loss = softmax_entropy(outputs).mean(0)
loss.backward()
optimizer.step()
optimizer.zero_grad()
  1. loss = softmax_entropy(outputs).mean(0): 这一行代码计算了模型输出的损失。首先,对输出进行softmax操作,将其转换为概率分布。接下来,使用交叉熵损失函数计算每个样本的损失。最后,通过mean(0)对样本的损失进行平均,得到一个标量的损失值。

  2. loss.backward(): 这行代码触发了反向传播过程。它根据计算图以及链式法则,计算了损失相对于模型参数的梯度。这个过程通过自动微分(autograd)机制来完成,梯度信息会被累积在每个参数的.grad属性中。

  3. optimizer.step(): 这一步用来更新模型的参数。优化器根据计算得到的梯度信息,根据所选的优化算法(如随机梯度下降法SGD、Adam等),更新模型中的可学习参数。这个过程会更新模型中的权重和偏置等参数,使其朝着减小损失的方向调整。

  4. optimizer.zero_grad(): 这一行代码将模型参数的梯度清零。在进行下一轮迭代之前,需要将之前一轮迭代中计算的梯度进行清除。它是必要的,因为PyTorch默认会在反向传播过程中累积梯度,如果不清零,梯度将会累积在后续迭代中,导致结果不正确的参数更新。

损失函数优化器深度学习中非常重要的两个组件,它们在模型训练过程中起着关键的作用。 1. 损失函数Loss Function):损失函数衡量了模型在训练过程中预测输出与真实标签之间的差异程度。它是一个标量值,用来表示模型的预测与真实值之间的距离或差异。常见的损失函数包括均方误差(Mean Squared Error, MSE)、交叉熵(Cross Entropy)、对数损失(Log Loss)等。损失函数的选择取决于任务类型模型的输出。 在训练过程中,优化算法通过最小化损失函数来调整模型参数,使得模型能够更好地拟合训练数据,提高预测的准确性。 2. 优化器Optimizer):优化器是一种用于更新模型参数的算法。它根据损失函数的梯度信息来调整模型参数,以使损失函数达到最小值或局部最小值。常见的优化器包括随机梯度下降(Stochastic Gradient Descent, SGD)、Adam、Adagrad、RMSprop等。 优化器通过计算损失函数关于模型参数的梯度,并根据梯度的方向大小来调整参数的更新步长方向。优化器的选择也取决于任务类型、模型结构数据集大小等因素。 综上所述,损失函数用于衡量模型的预测与真实值之间的差异,优化器则用于根据损失函数的梯度信息来更新模型参数,使得模型能够更好地拟合训练数据并提高性能。它们共同协作,推动深度学习模型的训练优化过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值