详细内容或原文请订阅后点击阅览
使用 torch 模块
在我们介绍 Torch 基础知识的迷你系列的第三部分中,我们用模块代替了手工编码的矩阵运算,大大简化了我们的玩具网络的代码。
来源:RStudio AI博客最初,我们通过从头编写一个简单的神经网络来学习 torch 基础知识,只使用 torch 的一个功能:张量。然后,我们极大地简化了任务,用 autograd 代替了手动反向传播。今天,我们模块化了网络 - 无论是习惯意义上还是字面意义上:低级矩阵运算被替换为 torch 模块。
最初torch
torch
张量
然后
autograd
模块化
torch
模块
模块
从其他框架(例如 Keras)中,您可能习惯于区分模型和层。在 torch 中,两者都是 nn_Module() 的实例,因此,它们有一些共同的方法。对于那些从“模型”和“层”的角度思考的人,我人为地将本节分成了两部分。但实际上,并没有二分法:新模块可能由现有模块组成,递归级别任意。
模型 层torch
nn_Module()
基础模块(“层”)
我们可以创建一个线性模块,而不是像我们目前所做的那样手动写出仿射运算 - x$mm(w1) + b1,比如 -。以下代码片段实例化了一个线性层,该层需要三个特征输入并为每个观察返回一个输出:
x$mm(w1) + b1
该模块有两个参数,“权重”和“偏差”。两者现在都已预初始化:
$weighttorch_tensor -0.0385 0.1412 -0.5436[ CPUFloatType{1,3} ]$biastorch_tensor -0.1950[ CPUFloatType{1} ]
$weighttorch_tensor -0.0385 0.1412 -0.5436[ CPUFloatType{1,3} ]$biastorch_tensor -0.1950[ CPUFloatType{1} ]
模块是可调用的;调用模块执行其 forward() 方法,对于线性层,该方法将输入和权重进行矩阵乘法,并添加偏差。
forward()
让我们尝试一下:
data <- torch_randn(10, 3)out <- l(data)
data <- torch_randn(10, 3)out <- l(data)
data <- torch_randn(10, 3)
data
<-
torch_randn
(
10
3
)
out <- l(data)
out
<-
l
(
data
)
不出所料,out 现在包含一些数据:
out
torch_tensor 0.2711-1.8151-0.0073 0.1876-0.0930 0.7498-0.2332-0.0428 0.3849-0.2618[ CPUFloatType{10,1} ]
AddmmBackward
AddmmBackward
torch
behind()
l
$