熟悉 torch 张量

在这个由四部分组成的迷你系列的第一部分中,我们介绍了您想要了解的有关 torch 张量的主要内容。作为一个说明性示例,我们将从头开始编写一个简单的神经网络。

来源:RStudio AI博客

两天前,我介绍了 torch,这是一个 R 包,它提供了 PyTorch 为 Python 用户带来的原生功能。在那篇文章中,我假设您对 TensorFlow/Keras 有基本的了解。因此,我以一种我认为对那些“成长于”使用 Keras 训练模型方式的人有帮助的方式描述了 torch:旨在关注差异,但不要忽视整个过程。

torch torch PyTorch torch

这篇文章现在改变了视角。我们“从头开始”编写一个简单的神经网络,只使用 torch 的一个构建块:张量。这个网络将尽可能“原始”(低级)。 (对于我们中不太擅长数学的人来说,它可能会让我们重新认识一下他们为我们构建的所有便利工具背后到底发生了什么。但真正的目的是说明仅使用张量可以做什么。)

torch 张量

随后,三篇文章将逐步展示如何减少工作量——从一开始就很明显,一旦我们完成,就会大大减少。在这个迷你系列的最后,你将看到自动微分在 torch 中的工作原理,如何使用模块(keras 中的层及其组合)和优化器。到那时,你将拥有将 torch 应用于实际任务所需的大量背景知识。

torch module keras torch

这篇文章将是篇幅最长的,因为关于张量有很多东西需要学习:如何创建它们;如何操作它们的内容和/或修改它们的形状;如何将它们转换为 R 数组、矩阵或向量;当然,考虑到对速度的普遍需求:如何在 GPU 上执行所有这些操作。一旦我们完成了这个议程,我们就会编写上述小型网络,观察所有这些方面的作用。

张量

创建

可以通过指定单个值来创建张量。这里我们创建两个一维张量(向量),类型分别为 float 和 bool:

float bool library(torch) library library ( torch torch ) # 长度为 2 的 1d 向量 # 长度为 2 的 1d 向量 t <- ( c c ( 1 2 )