接下来,我们通过将每批 64 幅图像(每幅图像由`28 x 28`像素组成)展平到 784 来重塑图像,从而将张量形状从`64 x 28 x 28`更改为`64 x 784`,因为我们的模型期望这种形状 输入。 接下来,我们将此输入发送到模型,并从模型中获得该批量的输出预测,然后将其传递给损失函数,也称为`criterion`; 在那里,它评估了预测班级与实际班级之间的差异。
接下来,我们通过将每批 64 幅图像(每幅图像由`28 x 28`像素组成)展平到 784 来重塑图像,从而将张量形状从`64 x 28 x 28`更改为`64 x 784`,因为我们的模型期望这种输入形状。 接下来,我们将此输入发送到模型,并从模型中获得该批量的输出预测,然后将其传递给损失函数,也称为`criterion`; 在那里,它评估了预测班级与实际班级之间的差异。
另一个重要任务是填充图像以匹配特定尺寸。 为此,我们使用`Pad()`方法。 我们将填充大小作为整数表示,用于在所有面上进行均等大小的填充,或者将序列作为由两个元素组成的序列,用于填充大小分别对应于左/右和上/下。 此外,我们可以将左侧,顶部,右侧和底部的填充大小作为由四个元素组成的序列传递。 然后,我们将填充值作为整数提供,如果它是三个元素的元组,则分别用作 R,G 和 B 通道的填充值。 除此之外,`Pad()`方法还具有`padding_mode`参数,该参数具有以下可能性:
...
...
@@ -680,7 +680,7 @@ CNN(
对于第一个全连接层,我们有 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 x 64`。此后,我们将图像展平为 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。