深度神经网络的实现

17 Mar 2025 | 4 分钟阅读

了解反向传播的过程后,让我们开始看看如何使用 PyTorch 实现深度神经网络。实现深度神经网络的过程类似于感知器模型的实现。在实现过程中,我们需要执行以下步骤。

步骤 1

第一步,我们将导入所有需要的库,例如 torch、numpy、datasets 和 matplotlib.pyplot。

步骤 2

第二步,我们定义数据点的数量,然后使用 make_blobs() 函数创建一个数据集,该函数将创建一个数据点集群。

步骤 3

现在,我们将创建我们的数据集,并将我们的数据点存储到变量 x 中,同时将值存储到变量 y 中,我们将稍微使用一下我们的标签。

步骤 4

现在,我们将 make_blobs() 更改为 make_cicrcle(),因为我们想要一个圆形的数据集。我们在 make_circle() 函数中传递适当的参数。第一个参数表示样本点的数量,第二个参数是随机状态,第三个参数是噪声,它将引用高斯噪声的标准偏差,第四个参数是因子,它将引用较小的内部圆形区域相对于较大区域的相对大小。

步骤 4

现在,在根据需要自定义数据集后,我们可以使用 plt.scatter() 函数绘制它并将其可视化。我们定义每个标签数据集的 x 和 y 坐标。让我们从标签为 0 的数据集开始。它绘制了我们数据的顶部区域。标记为 0 的数据集的散点函数定义为


Implementation of Deep Neural Network

步骤 5

现在,我们绘制数据下部区域中的点。一个标记数据集的散点函数 () 定义为


Implementation of Deep Neural Network

一条线不能对上述数据集进行分类。为了对该数据集进行分类,将需要一个更深的神经网络。

我们将 plt.scatter(x[y==0,0],x[y==0,1]) 和 plt.scatter(x[y==1,0],x[y==1,1]) 放入一个函数中,以便进一步使用,如下所示

步骤 6

在这一步中,我们将创建我们的模型类,就像我们在线性回归和感知器模型中实现的那样。不同之处在于,这里我们也在输入层和输出层之间使用隐藏层。在 init() 方法中,我们将传递一个额外的参数 h1 作为隐藏层,并且我们的输入层与隐藏层相连,然后隐藏层与输出层相连。所以

现在,我们必须在我们的前向函数中添加这个额外的隐藏层,以便任何输入都必须通过神经网络的整个深度才能进行预测。所以

我们的初始化已经完成,现在,我们准备好使用它了。请记住训练一个模型 x,x 和 y 坐标都应该是 numpy 数组。因此,我们将我们的 x 和 y 值更改为张量,如下所示

步骤 7

我们将使用 Deep_neural_network() 构造函数初始化一个新的线性模型,并将 input_size、output_size 和 hidden_size 作为参数传递。现在,我们打印分配给它的随机权重和偏差值,如下所示

在此之前,为了确保我们随机结果的一致性,我们可以使用 torch manual seed 来播种我们的随机数生成器,并且我们可以将种子设置为 2,如下所示

步骤 8

我们将使用的模型误差计算标准被称为交叉熵。我们的损失函数将基于二元交叉熵损失 (BCELoss) 来衡量,因为我们只处理两个类。它从 nn 模块导入。

现在,我们的下一步是使用优化器更新参数。因此,我们定义了用于梯度下降算法的优化器。在这里,我们将使用 Adam 优化器。Adam 优化器是许多优化算法之一。Adam 优化算法是随机梯度下降的两个其他扩展(例如 AdagradRMSprop)的组合。学习率在优化中起着重要作用。

如果我们选择最小学习率,会导致收敛到最小值非常缓慢,如果选择非常大的学习率会阻碍收敛。Adam 优化器算法最终会计算每个参数的自适应学习率。

步骤 9

现在,我们将像在线性模型和感知器模型中所做的那样,训练我们的模型以进行指定的 epoch 次数。因此,该代码将类似于感知器模型,如下所示


Implementation of Deep Neural Network