提交 69687fec 编写于 作者: W wizardforcel

2021-01-18 16:20:52

上级 1ef387ea
......@@ -253,7 +253,7 @@ Conv2d(3, 16, kernel_size=(3, 4), stride=(3, 3), padding=(1, 2))
# 这个怎么运作...
在前面的代码中,我们研究了一个张量的示例,以了解实际的池化层。 我们使用大小为`3 x 3`的方形内核。池的第一个应用发生在[0,0,0]到[0,3,3]的面片上。 由于步幅为 1,因此下一个要操作的音色为[0,0,1]至[0,3,4]。 一旦碰到水平端,就对下面的张量进行运算。 `nn.MaxPool2d(3, stride=1)``nn.AvgPool2d(3, stride=1)`都创建了大小为`3x3`的最大和平均池方核,步幅为`1`,将其应用于随机张量`a`
在前面的代码中,我们研究了一个张量的示例,以了解实际的池化层。 我们使用大小为`3 x 3`的方形内核。池的第一个应用发生在`[0,0,0]``[0,3,3]`的面片上。 由于步幅为 1,因此下一个要操作的音色为`[0,0,1]``[0,3,4]`。 一旦碰到水平端,就对下面的张量进行运算。 `nn.MaxPool2d(3, stride=1)``nn.AvgPool2d(3, stride=1)`都创建了大小为`3x3`的最大和平均池方核,步幅为`1`,将其应用于随机张量`a`
# 还有更多...
......@@ -436,7 +436,7 @@ PyTorch 无法直接处理图像像素,需要将其内容作为张量。 为
在此配方中,我们尝试在随机位置裁剪图像,以便如果无法获得对象的整个图像,但无法获得一部分,则我们的模型将能够检测到该对象。 我们应该将裁剪后的图像大小包括为整数或具有特定高度和宽度的元组。 然后,我们水平翻转图像,并随机传递了水平翻转和垂直翻转的概率。 然后,我们使用`ColorJitter()`方法在图像的颜色,对比度,饱和度和色调上创建了变化。
我们通过设置参数来控制每种颜色的变化量,其中颜色,对比度和饱和度在[max(0,1-parameter),1 + parameter]值之间变化,而色相在[-hue, 色调],其中色调介于 0 到 0.5 之间。 我们还向图像添加了随机旋转,并提供了最大旋转角度。 最后,选择正确的数据扩充策略后,将其添加到`transforms.compose()`中。
我们通过设置参数来控制每种颜色的变化量,其中颜色,对比度和饱和度在`[max(0, 1-parameter), 1 + parameter]`值之间变化,而色相在`[-hue, hue]`之间,其中色调介于 0 到 0.5 之间。 我们还向图像添加了随机旋转,并提供了最大旋转角度。 最后,选择正确的数据扩充策略后,将其添加到`transforms.compose()`中。
# 还有更多...
......@@ -506,7 +506,7 @@ pip install torchvision==0.x.x
(50000, 10000)
```
7. 现在,我们将从训练集中创建一个验证集; 为此,我们将从 Torch 模块进行导入:
7. 现在,我们将从训练集中创建一个验证集; 为此,我们将从`torch`模块进行导入:
```py
>>from torch.utils.data.sampler import SubsetRandomSampler
......@@ -585,7 +585,7 @@ pip install torchvision==0.x.x
# 这个怎么运作...
在此配方中,我们使用了 PyTorch 中的`datasets`模块来获取 CIFAR10 数据集。 然后,我们定义了对数据集中的图像有意义的转换,这些图像是与 10 个不同类别相对应的动物的图像。 我们对某些图像进行了水平翻转,并随机对某些图像进行了旋转,范围为-20 至 20 度。
在此配方中,我们使用了 PyTorch 中的`datasets`模块来获取 CIFAR10 数据集。 然后,我们定义了对数据集中的图像有意义的转换,这些图像是与 10 个不同类别相对应的动物的图像。 我们对某些图像进行了水平翻转,并随机对某些图像进行了旋转,范围为 -20 至 20 度。
但是,我们没有添加垂直翻转,因为我们预计在评估阶段不会有动物的上下颠倒的图像输入到模型中。 之后,我们使用`ToTensor()`变换将图像转换为张量。 准备好张量后,我们使用`Normalize()`变换分别为红色,绿色和蓝色通道中的每一个设置了均值和标准差。 之后,我们在数据集中使用`CIFAR10()`方法来使用 CIFAR10 数据集。 然后,将`download`参数设置为`True`,以便如果根目录`CIFAR10`(第一个参数)中不存在数据集,则将其下载并保存在该目录中。
......@@ -676,11 +676,11 @@ CNN(
# 这个怎么运作...
此食谱的工作方式与第 2 章,“处理神经网络”时非常相似,当我们研究一个全连接神经网络时。 我们从`__init__()`方法和父类的构造函数开始,定义了从 PyTorch 中的`nn.Module`继承的 CNN 类。 之后,我们通过传入与每一层相关的参数来定义 CNN 中的各个层。 对于我们的第一卷积层,输入通道的数量为 3(RGB),输出通道的数量定义为 16,其平方核大小为 3。第二卷积层采用上一层的张量,并具有 16 个输入通道和 32 个输出通道,内核尺寸为 3 x3。类似地,第三卷积层具有 32 个输入通道和 64 个输出通道,内核尺寸为 3 x 3。 我们还需要一个最大池化层,并使用 2 的内核大小和 2 的步幅。我们使用`.view()`将张量的三个维度展平为一个维度,以便可以将其传递到全连接网络中。 `view`函数中的-1 通过确保`view`函数之前和之后的元素数量保持相同(在本例中为批量大小)来确保将正确的尺寸自动分配给该尺寸。
此食谱的工作方式与第 2 章,“处理神经网络”时非常相似,当我们研究一个全连接神经网络时。 我们从`__init__()`方法和父类的构造函数开始,定义了从 PyTorch 中的`nn.Module`继承的 CNN 类。 之后,我们通过传入与每一层相关的参数来定义 CNN 中的各个层。 对于我们的第一卷积层,输入通道的数量为 3(RGB),输出通道的数量定义为 16,其平方核大小为 3。第二卷积层采用上一层的张量,并具有 16 个输入通道和 32 个输出通道,内核尺寸为`3 x 3`。类似地,第三卷积层具有 32 个输入通道和 64 个输出通道,内核尺寸为`3 x 3`。 我们还需要一个最大池化层,并使用 2 的内核大小和 2 的步幅。我们使用`.view()`将张量的三个维度展平为一个维度,以便可以将其传递到全连接网络中。 `view`函数中的 -1 通过确保`view`函数之前和之后的元素数量保持相同(在本例中为批量大小)来确保将正确的尺寸自动分配给该尺寸。
对于第一个全连接层,我们有 1,024 个输入(通过将最大池后的`64 x 4 x 4`张量展平而获得)和 512 个输出。 对于最后一个全连接层,我们有 512 个输入和 10 个输出,代表输出类别的数量。 我们还为全连接层定义了一个辍学层,概率为 0.3。
接下来,我们定义`forward()`方法,将`__init__()`方法中定义的组件连接在一起。 因此,输入批量的 16 个张量(每个张量为 32 x 32 x 3)经过第一个卷积层,然后经过 ReLU,然后是最大合并层,以形成尺寸为`16 x 16`的输出张量。 x 16,然后通过第二个卷积层,然后是 ReLU 和最大池层,输出的尺寸为 8 x 8 x 32,然后是第三个卷积层,然后是 ReLU 和最大池 层,尺寸为 4 x 4 x64。此后,我们将图像展平为 1,024 个元素的向量,并将其通过辍学层传递到第一个全连接层,提供 512 个输出,然后是 ReLU 和 在最后一个全连接层中删除,以提供所需的输出数量,本例中为 10。
接下来,我们定义`forward()`方法,将`__init__()`方法中定义的组件连接在一起。 因此,输入批量的 16 个张量(每个张量为`32 x 32 x 3`)经过第一个卷积层,然后经过 ReLU,然后是最大合并层,以形成尺寸为`16 x 16 x 16`的输出张量,然后通过第二个卷积层,然后是 ReLU 和最大池层,输出的尺寸为`8 x 8 x 32`,然后是第三个卷积层,然后是 ReLU 和最大池 层,尺寸为`4 x 4 x 64`。此后,我们将图像展平为 1,024 个元素的向量,并将其通过辍学层传递到第一个全连接层,提供 512 个输出,然后是 ReLU 和 在最后一个全连接层中删除,以提供所需的输出数量,本例中为 10。
然后,我们从 CNN 类实例化该模型并打印该模型。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册