在本食谱中,我们定义了一个分类器; 使用`nn.Sequential()`定义卷积,激活和批量规范化单元的数组; 并且还定义了最后一个全连接层,该层采用平坦的张量并给出通过 S 形层的单个输出。 由于只有两个类,因此我们最后使用了 S 形层。 输入是尺寸为`1 x 28 x 28`的图像张量,并经过第一卷积单元以给出尺寸为`32 x 14 x 14`的输出张量。 第二个卷积层使它成为`64 x 7 x 7`张量,然后从那里变成`128 x 4 x 4`。 之后,我们将拉平并使张量穿过全连接层。
在本食谱中,我们定义了一个分类器; 使用`nn.Sequential()`定义卷积,激活和批量规范化单元的数组; 并且还定义了最后一个全连接层,该层采用平坦的张量并给出通过 Sigmoid层的单个输出。 由于只有两个类,因此我们最后使用了 Sigmoid层。 输入是尺寸为`1 x 28 x 28`的图像张量,并经过第一卷积单元以给出尺寸为`32 x 14 x 14`的输出张量。 第二个卷积层使它成为`64 x 7 x 7`张量,然后从那里变成`128 x 4 x 4`。 之后,我们将拉平并使张量穿过全连接层。
第一层由批量输入矩阵,权重和偏差之间的矩阵乘法和加法组成。 此时,`a2`张量应具有一个`grad_fn`,这应该是矩阵加法的后向操作。 但是,由于我们还没有进行反向传递,因此`.grad`应该返回`None`和`.data`,并且将一如既往地返回张量,以及矩阵乘法和偏差加法的结果。 神经元活动由 S 形激活函数定义,它以`h2`(代表第二层中的隐藏单位)的输出形式提供给我们。 第二层采用相同的结构:矩阵乘法,偏差加法和 S 形。 最后得到`hyp`,它具有预期的结果:
查看下面的 S 型函数的梯度,我们观察到取决于`x`的平滑曲线。 由于梯度曲线是连续的,因此很容易反向传播误差并更新参数![](img/62159668-8474-4e17-be25-39d5adf63489.png)和![](img/aff45916-8e2d-4140-9b75-9ce9f0681b4e.png):