Skip to content

Commit

Permalink
2021-01-04 16:22:54
Browse files Browse the repository at this point in the history
  • Loading branch information
wizardforcel committed Jan 4, 2021
1 parent 5915b9e commit d4f1b93
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 18 deletions.
34 changes: 17 additions & 17 deletions docs/1.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ Fruit flies like a banana.

短语、句子或文档的 TF 表示仅仅是构成词的单热的总和。为了继续我们愚蠢的示例,使用前面提到的单热编码,`Fruit flies like time flies a fruit`这句话具有以下 TF 表示:[1,2,2,1,1,1,0,0]。注意,每个条目是句子(语料库)中出现相应单词的次数的计数。我们用 TF(w)表示一个单词的 TF。

Example 1-1\. Generating a “collapsed”单热 or binary representation using scikit-learn
示例 1-1:使用 sklearn 生成“塌陷的”单热或二进制表示

```py
from sklearn.feature_extraction.text import CountVectorizer
Expand Down Expand Up @@ -111,7 +111,7 @@ sns.heatmap(one_hot, annot=True,

其中`n[w]`是包含单词`w`的文档数量,`N`是文档总数。TF-IDF 分数就是`TF(w) * IDF(w)`的乘积。首先,请注意在所有文档(例如,`n[w] = N`), `IDF(w)`为 0, TF-IDF 得分为 0,完全惩罚了这一项。其次,如果一个术语很少出现(可能只出现在一个文档中),那么 IDF 就是`log n`的最大值。

Example 1-2\. Generating TF-IDF representation using scikit-learn
示例 1-2:使用 sklearn 生产 TF-IDF 表示

```py
from sklearn.feature_extraction.text import TfidfVectorizer
Expand Down Expand Up @@ -198,7 +198,7 @@ def describe(x):

PyTorch 允许我们使用`torch`包以许多不同的方式创建张量。创建张量的一种方法是通过指定一个随机张量的维数来初始化它,如例 1-3 所示。

Example 1-3\. Creating a tensor in PyTorch with torch.Tensor
示例 1-3:在 PyTorch 中使用`torch.Tensor`创建张量

```py
Input[0]:
Expand All @@ -215,7 +215,7 @@ tensor([[ 3.2018e-05, 4.5747e-41, 2.5058e+25],

我们还可以创建一个张量通过随机初始化值区间上的均匀分布(`0,1`)或标准正态分布(从均匀分布随机初始化张量,说,是很重要的,正如您将看到的在第三章和第四章),见示例 1-4。

Example 1-4\. Creating a randomly initialized tensor
示例 1-4:创建随机初始化的张量

```py
Input[0]:
Expand All @@ -239,7 +239,7 @@ tensor([[-0.1330, -2.9222, -1.3649],

我们还可以创建张量,所有张量都用相同的标量填充。对于创建 0 或 1 张量,我们有内置函数,对于填充特定值,我们可以使用`fill_()`方法。任何带有下划线(`_`)的 PyTorch 方法都是指就地(in place)操作;也就是说,它在不创建新对象的情况下就地修改内容,如示例 1-5 所示。

Example 1-5\. Creating a filled tensor
示例 1-5:创建填充的张量

```py
Input[0]:
Expand Down Expand Up @@ -272,7 +272,7 @@ tensor([[ 5., 5., 5.],

示例 1-6 演示了如何通过使用 Python 列表以声明的方式创建张量。

Example 1-6\. Creating and initializing a tensor from lists
示例 1-6:从列表创建和初始化张量

```py
Input[0]:
Expand All @@ -290,7 +290,7 @@ tensor([[ 1., 2., 3.],

值可以来自列表(如前面的示例),也可以来自 NumPy 数组。当然,我们也可以从 PyTorch 张量变换到 NumPy 数组。注意,这个张量的类型是一个`double`张量,而不是默认的`FloatTensor`。这对应于 NumPy 随机矩阵的数据类型`float64`,如示例 1-7 所示。

Example 1-7\. Creating and initializing a tensor from NumPy
示例 1-7:从 NumPy 创建和初始化张量

```py
Input[0]:
Expand All @@ -313,7 +313,7 @@ tensor([[ 0.8360, 0.8836, 0.0545],

每个张量都有一个相关的类型和大小。使用`torch`时的默认张量类型。张量构造函数是`torch.FloatTensor`。但是,可以在初始化时指定张量,也可以在以后使用类型转换方法将张量转换为另一种类型(`float``long``double`等)。有两种方法可以指定初始化类型,一种是直接调用特定张量类型(如`FloatTensor``LongTensor`)的构造函数,另一种是使用特殊的方法`torch.tensor`,并提供`dtype`,如例 1-8 所示。

Example 1-8\. Tensor properties
示例 1-8:张量属性

```py
Input[0]:
Expand Down Expand Up @@ -363,7 +363,7 @@ tensor([[ 1., 2., 3.],

在创建了张量之后,可以像处理传统编程语言类型(如`+``-``*``/`)那样对它们进行操作。除了操作符,我们还可以使用`.add()`之类的函数,如示例 1-9 所示,这些函数对应于符号操作符。

Example 1-9\. Tensor operations: addition
示例 1-9:张量操作:加法

```py
Input[0]:
Expand Down Expand Up @@ -397,7 +397,7 @@ tensor([[ 0.0923, 0.8048, -2.0231],

还有一些运算可以应用到张量的特定维数上。正如您可能已经注意到的,对于 2D 张量,我们将行表示为维度 0,列表示为维度 1,如示例 1-10 所示。

Example 1-10\. Dimension-based tensor operations
示例 1-10:基于维度的张量操作

```py
Input[0]:
Expand Down Expand Up @@ -450,7 +450,7 @@ tensor([[ 0., 3.],

如果您是一个 NumPy 用户,那么您可能非常熟悉示例 1-11 中所示的 PyTorch 的索引和切片方案。

Example 1-11\. Slicing and indexing a tensor
示例 1-11:切片和索引张量

```py
Input[0]:
Expand Down Expand Up @@ -482,7 +482,7 @@ Values:

示例 1-12 演示了 PyTorch 还具有用于复杂索引和切片操作的函数,您可能对有效地访问张量的非连续位置感兴趣。

Example 1-12\. Complex indexing: noncontiguous indexing of a tensor
示例 1-12:复杂索引:张量的非连续索引

```py
Input[0]:
Expand Down Expand Up @@ -517,7 +517,7 @@ tensor([ 0., 4.])

注意索引(indices)是一个长张量;这是使用 PyTorch 函数进行索引的要求。我们还可以使用内置的连接函数连接张量,如示例 1-13 所示,通过指定张量和维度。

Example 1-13\. Concatenating tensors
示例 1-13:连接张量

```py
Input[0]:
Expand Down Expand Up @@ -564,7 +564,7 @@ tensor([[[ 0., 1., 2.],

PyTorch 还在张量上实现了高效的线性代数操作,如乘法、逆和迹,如示例 1-14 所示。

Example 1-14\. Linear algebra on tensors: multiplication
示例 1-14:张量上的线性代数:乘法

```py
Input[0]:
Expand Down Expand Up @@ -605,7 +605,7 @@ tensor([[ 3., 6.],

PyTorch 张量类封装了数据(张量本身)和一系列操作,如代数操作、索引操作和整形操作。然而,1-15 所示的例子,当`requires_grad`布尔标志被设置为`True`的张量,记账操作启用,可以追踪的梯度张量以及梯度函数,这两个需要基于促进梯度学习讨论“监督学习范式”。

Example 1-15\. Creating tensors for gradient bookkeeping
示例 1-15:为梯度记录创建张量

```py
Input[0]:
Expand Down Expand Up @@ -655,7 +655,7 @@ False

PyTorch 使创建这些 CUDA 张量变得非常容易(示例 1-16),它将张量从 CPU 传输到 GPU,同时维护其底层类型。PyTorch 中的首选方法是与设备无关,并编写在 GPU 或 CPU 上都能工作的代码。在下面的代码片段中,我们首先使用`torch.cuda.is_available()`检查 GPU 是否可用,然后使用`torch.device`检索设备名。然后,将实例化所有未来的张量,并使用`.to(device)`方法将其移动到目标设备。

Example 1-16\. Creating CUDA tensors
示例 1-16:创建 CUDA 张量

```py
Input[0]:
Expand Down Expand Up @@ -684,7 +684,7 @@ tensor([[ 0.9149, 0.3993, 0.1100],

要对 CUDA 和非 CUDA 对象进行操作,我们需要确保它们在同一设备上。如果我们不这样做,计算就会中断,如下面的代码片段所示。例如,在计算不属于计算图的监视指标时,就会出现这种情况。当操作两个张量对象时,确保它们在同一个设备上。例子 1-17 所示。

Example 1-17\. Mixing CUDA tensors with CPU bound tensors
示例 1-17:混合 CUDA 张量和 CPU 绑定的张量

```py
Input[0]
Expand Down
2 changes: 1 addition & 1 deletion docs/3.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

激活函数,这里用`f`表示,通常是一个非线性函数。示例 3-1 展示了 PyTorch 中的感知器实现,它接受任意数量的输入、执行仿射转换、应用激活函数并生成单个输出。

Example 3-1\. Implementing a Perceptron using PyTorch
示例 3-1:使用 PyTorch 实现感知机

```py
import torch
Expand Down

0 comments on commit d4f1b93

Please sign in to comment.