2026/5/21 1:03:25
网站建设
项目流程
ps制作网站首页教程,郑州网络营销公司哪家好,wordpress授权怎么破解,网页设计与网站建设报告书3 层神经网络的实现
现在我们来进行神经网络的实现。这里我们以图3-15 的3 层神经网络为
对象#xff0c;实现从输入到输出的#xff08;前向#xff09;处理。在代码实现方面#xff0c;使用上一节介
绍的NumPy多维数组。巧妙地使用NumPy数组#xff0c;可以用很少的代码…3 层神经网络的实现现在我们来进行神经网络的实现。这里我们以图3-15 的3 层神经网络为对象实现从输入到输出的前向处理。在代码实现方面使用上一节介绍的NumPy多维数组。巧妙地使用NumPy数组可以用很少的代码完成神经网络的前向处理。符号确认在介绍神经网络中的处理之前我们先导入w12(1), a1(1)w_{12}^{(1)}, \ a_1^{(1)}w12(1),a1(1)等符号。这些符号可能看上去有些复杂不过因为只在本节使用稍微读一下就跳过去也问题不大。本节的重点是神经网络的运算可以作为矩阵运算打包进行。因为神经网络各层的运算是通过矩阵的乘法运算打包进行的从宏观视角来考虑所以即便忘了未记忆具体的符号规则也不影响理解后面的内容。我们先从定义符号开始。请看图3-16。图3-16中只突出显示了从输入层神经元x2x_2x2到后一层的神经元a1(1)a_1^{(1)}a1(1)的权重。如图3-16所示权重和隐藏层的神经元的右上角有一个“(1)”它表示权重和神经元的层号即第1层的权重、第1层的神经元。此外权重的右下角有两个数字它们是后一层的神经元和前一层的神经元的索引号。比如$ w_{12}^{(1)} $ 表示前一层的第2个神经元 $ x_2 $ 到后一层的第1个神经元 $ a_{1}^{(1)} $ 的权重。权重右下角按照“后一层的索引号、前一层的索引号”的顺序排列。各层间信号传递的实现现在看一下从输入层到第1 层的第1 个神经元的信号传递过程如图3-17所示。图3-17 中增加了表示偏置的神经元“1”。请注意偏置的右下角的索引号只有一个。这是因为前一层的偏置神经元神经元“1”只有一个A 。为了确认前面的内容现在用数学式表示 $ a_1^{(1)} $ 。 $ a_1^{(1)} $ 通过加权信号和偏置的和按如下方式进行计算。为了确认前面的内容现在用数学式表示$ a_1^{(1)} $。 $ a_1^{(1)} $ 通过加权信号和偏置的和按如下方式进行计算。a1(1)w11(1)x1w12(1)x2b1(1)a^{(1)}_{1} w^{(1)}_{11}x_{1} w^{(1)}_{12}x_{2} b^{(1)}_{1}a1(1)w11(1)x1w12(1)x2b1(1)此外如果使用矩阵的乘法运算则可以将第1 层的加权和表示成下面的式3.9。A(1)XW(1)B(1)A^{(1)} XW^{(1)} B^{(1)}A(1)XW(1)B(1)其中A(1)A^{(1)}A(1)、XXX、B(1)B^{(1)}B(1)、W(1)W^{(1)}W(1)如下所示。A(1)(a1(1)a2(1)a3(1)),X(x1x2),B(1)(b1(1)b2(1)b3(1))\boldsymbol{A}^{(1)} \begin{pmatrix} a_1^{(1)} a_2^{(1)} a_3^{(1)} \end{pmatrix}, \quad \boldsymbol{X} \begin{pmatrix} x_1 x_2 \end{pmatrix}, \quad \boldsymbol{B}^{(1)} \begin{pmatrix} b_1^{(1)} b_2^{(1)} b_3^{(1)} \end{pmatrix}A(1)(a1(1)a2(1)a3(1)),X(x1x2),B(1)(b1(1)b2(1)b3(1))W(1)(w11(1)w21(1)w31(1)w12(1)w22(1)w32(1)) W^{(1)} \begin{pmatrix} w_{11}^{(1)} w_{21}^{(1)} w_{31}^{(1)} \\ w_{12}^{(1)} w_{22}^{(1)} w_{32}^{(1)} \end{pmatrix}W(1)(w11(1)w12(1)w21(1)w22(1)w31(1)w32(1))下面我们用NumPy多维数组来实现式3.9这里将输入信号、权重、偏置设置成任意值。Xnp.array([1.0,0.5])W1np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])B1np.array([0.1,0.2,0.3])print(W1.shape)# (2, 3)print(X.shape)# (2,)print(B1.shape)# (3,)A1np.dot(X,W1)B1这个运算和上一节进行的运算是一样的。W1W1W1是2 × 3 的数组X是元素个数为2 的一维数组。这里W1W1W1和X的对应维度的元素个数也保持了一致。接下来我们观察第1 层中激活函数的计算过程。如果把这个计算过程用图来表示的话则如图3-18 所示。如图3-18 所示隐藏层的加权和加权信号和偏置的总和用a表示被激活函数转换后的信号用z 表示。此外图中h() 表示激活函数这里我们使用的是sigmoid 函数。用Python来实现代码如下所示。Z1sigmoid(A1)print(A1)# [0.3, 0.7, 1.1]print(Z1)# [0.57444252, 0.66818777, 0.75026011]这个sigmoid()函数就是之前定义的那个函数。它会接收NumPy数组并返回元素个数相同的NumPy数组。下面我们来实现第1 层到第2 层的信号传递图3-19。W2np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])B2np.array([0.1,0.2])print(Z1.shape)# (3,)print(W2.shape)# (3, 2)print(B2.shape)# (2,)A2np.dot(Z1,W2)B2 Z2sigmoid(A2)除了第1 层的输出Z1变成了第2 层的输入这一点以外这个实现和刚才的代码完全相同。由此可知通过使用NumPy数组可以将层到层的信号传递过程简单地写出来。最后是第2 层到输出层的信号传递图3-20。输出层的实现也和之前的实现基本相同。不过最后的激活函数和之前的隐藏层有所不同。defidentity_function(x):returnx W3np.array([[0.1,0.3],[0.2,0.4]])B3np.array([0.1,0.2])A3np.dot(Z2,W3)B3 Yidentity_function(A3)# 或者Y A3这里我们定义了identity_function()函数也称为“恒等函数”并将其作为输出层的激活函数。恒等函数会将输入按原样输出因此这个例子中没有必要特意定义identity_function()。这里这样实现只是为了和之前的流程保持统一。另外图3-20 中输出层的激活函数用σ() 表示不同于隐藏层的激活函数h()σ读作sigma。输出层所用的激活函数要根据求解问题的性质决定。一般地回归问题可以使用恒等函数二元分类问题可以使用sigmoid 函数多元分类问题可以使用softmax 函数。关于输出层的激活函数我们将在下一节详细介绍。代码实现小结至此我们已经介绍完了3 层神经网络的实现。现在我们把之前的代码实现全部整理一下。这里我们按照神经网络的实现惯例只把权重记为大写字母W1其他的偏置或中间结果等都用小写字母表示。definit_network():network{}network[W1]np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])network[b1]np.array([0.1,0.2,0.3])network[W2]np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])network[b2]np.array([0.1,0.2])network[W3]np.array([[0.1,0.3],[0.2,0.4]])network[b3]np.array([0.1,0.2])returnnetworkdefforward(network,x):W1,W2,W3network[W1],network[W2],network[W3]b1,b2,b3network[b1],network[b2],network[b3]a1np.dot(x,W1)b1 z1sigmoid(a1)a2np.dot(z1,W2)b2 z2sigmoid(a2)a3np.dot(z2,W3)b3 yidentity_function(a3)returny networkinit_network()xnp.array([1.0,0.5])yforward(network,x)print(y)# [ 0.31682708 0.69627909]这里定义了init_network() 和forward() 函数。init_network()函数会进行权重和偏置的初始化并将它们保存在字典变量network中。这个字典变量network中保存了每一层所需的参数权重和偏置。forward()函数中则封装了将输入信号转换为输出信号的处理过程。另外这里出现了forward前向一词它表示的是从输入到输出方向的传递处理。后面在进行神经网络的训练时我们将介绍后向backward从输出到输入方向的处理。至此神经网络的前向处理的实现就完成了。通过巧妙地使用NumPy多维数组我们高效地实现了神经网络。