torch 中的优化器

今天,我们结束了关于 torch 基础知识的迷你系列,并为我们的工具集添加了两个抽象:损失函数和优化器。

来源:RStudio AI博客

这是介绍 torch 基础知识的系列文章的第四部分也是最后一部分。最初,我们专注于张量。为了说明它们的强大功能,我们从头开始编写了一个完整的(玩具大小)神经网络。我们没有使用 torch 的任何高级功能 - 甚至没有使用其自动微分功能 autograd。

torch 专注于张量 张量 torch autograd

这在后续文章中发生了变化。不再考虑导数和链式法则;只需调用一次 Backward() 即可完成所有操作。

后续文章 Backward()

在第三篇文章中,代码再次得到了重大简化。我们不再繁琐地手动组装 DAG,而是让模块来处理逻辑。

在第三篇文章中 模块

基于最后的状态,还有两件事要做。首先,我们仍然手动计算损失。其次,即使我们从 autograd 中很好地计算出了梯度,我们仍然会循环模型的参数,自己更新它们。你不会惊讶地听到这些都不是必要的。

autograd

损失和损失函数

torch 带有所有常见的损失函数,例如均方误差、交叉熵、Kullback-Leibler 散度等。一般来说,有两种使用模式。

torch

以计算均方误差为例。一种方法是直接在预测和基本事实张量上调用 nnf_mse_loss()。例如:

nnf_mse_loss()
x <- torch_randn(c(3, 2, 3))y <- torch_zeros(c(3, 2, 3))nnf_mse_loss(x, y)
x <- torch_randn(c(3, 2, 3))y <- torch_zeros(c(3, 2, 3))nnf_mse_loss(x, y) x <- torch_randn(c(3, 2, 3)) x <- torch_randn ( c c ( 3 2 3 ) ) y <- torch_zeros(c(3, 2, 3)) y <- torch_zeros ( c ( 3 2 3 ) ) nnf_mse_loss(x, y) nnf_mse_loss x y torch_tensor 0.682362[ CPUFloatType{} ]
torch_tensor 0.682362[ CPUFloatType{} ]
其他设计为直接调用的损失函数也以 nnf_ 开头:nnf_binary_cross_entropy()、nnf_nll_loss()、nnf_kl_div()……等等。

nnf_

nnf_binary_cross_entropy() nnf_nll_loss() nnf_kl_div() nn_ _loss nn_bce_loss() nn_nll_loss(), 损失 <- ( ) ( x