深度神经网络由多个层(layer)组成,通常将其称之为 模型(Model)。整个模型接受原始 输入(特征),生成 输出(预测),并包含一些 参数。而在模型内部,每个单独的层都会接受一些输入(由前一层提供),生成输出(到下一层的输入),并包含一组参数;层层向下传递,就可以得到最终的输出值。
神经网络中的参数,就是每一层的权重和偏置。
2.3.1 三层神经网络
我们这里以一个三层神经网络为例,实现从输入到输出的处理计算,这个过程就是 前向传播(forward)。
![图片[1]-2.3 神经网络的简单实现-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-216.png)
![图片[2]-2.3 神经网络的简单实现-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-217.png)
2.3.2 各层之间的信号传递
上面只是三层网络的示意图,实际上每层还应该有偏置,各输入信号加权总和还要经过激活函数的处理。接下来逐层进行分析,考察信号在各层之间传递的过程。
- 输入层(第0层)→ 第1层
![图片[3]-2.3 神经网络的简单实现-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-218.png)
![图片[4]-2.3 神经网络的简单实现-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-219.png)
2)第1层 → 第2层
第1层到第2层的处理类似,权重参数应该是一个3×2的矩阵。
![图片[5]-2.3 神经网络的简单实现-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-220.png)
3)第2层 → 输出层(第3层)
![图片[6]-2.3 神经网络的简单实现-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-221.png)
- 代码实现
我们可以将神经网络的所有参数(每一层的权重w和偏置b),保存在一个字典network中;并定义函数:
- init_network():对参数进行初始化,每一个权重参数都是一个矩阵(二维),每一个偏置参数则是一个数组(一维);
- forward():前向传播,将输入信号转换为输出信号的处理操作。
这里的激活函数,隐藏层用sigmoid,输出层用identity(恒等函数)。
具体代码如下:
import numpy as np
from common.functions import sigmoid, identity_function
def init_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])
return network
def forward(network, x):
w1, w2, w3 = network['W1'], network['W2'], network['W3']
b1, b2, b3 = network['b1'], network['b2'], network['b3']
a1 = np.dot(x, w1) + b1
z1 = sigmoid(a1)
a2 = np.dot(z1, w2) + b2
z2 = sigmoid(a2)
a3 = np.dot(z2, w3) + b3
y = identity_function(a3)
return y
network = init_network()
x = np.array([1.0, 0.5])
y = forward(network, x)
print(y)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END














请登录后查看评论内容