详细内容或原文请订阅后点击阅览
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