三层神经网络模型:

这里采用少量矩阵表示,其中假设第一层的加权和表示为
A
(
1
)
=
X
W
(
1
)
+
B
(
1
)
{A}^{(1)}=X {W}^{(1)}+{B}^{(1)}
A(1)=XW(1)+B(1)
其中:
A
(
1
)
=
(
a
1
(
1
)
a
2
(
1
)
a
3
(
1
)
)
{A}^{(1)}=(a^{(1)}_{1} \quad a^{(1)}_{2} \quad a^{(1)}_{3})
A(1)=(a1(1)a2(1)a3(1))
X
=
(
x
1
x
2
)
X=(x_{1} \quad x_{2})
X=(x1x2)
B
(
1
)
=
(
b
1
(
1
)
b
2
(
1
)
b
3
(
1
)
)
{B}^{(1)}=(b^{(1)}_{1} \quad b^{(1)}_{2} \quad b^{(1)}_{3})
B(1)=(b1(1)b2(1)b3(1))
A
=
[
a
11
(
1
)
a
21
(
1
)
a
31
(
1
)
a
12
(
1
)
a
22
(
1
)
a
32
(
1
)
]
A=\left[
代码实现:
# 三层神经网络的信号传递
import numpy as np
# 定义激活函数
def sigmoid(x):
a = 1 / (1+np.exp(-x))
return a
# 输入层到第1层的神经元信号传递
X = np.array([1.0, 0.5]) # 输入层X
W1 = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]]) # 权重
B1 = np.array([0.1, 0.2, 0.3]) # 偏置神经元
A1 = np.dot(X, W1) + B1 # 第一层的加权和
Z1 = sigmoid(A1) # 激活函数转化(将输入信号总和转化为输出信号)
# print(Z1) # Z1=[0.57444252 0.66818777 0.75026011] 第一层输出也为第二层输入
# 第1层到第2层的神经元信号传递
W2 = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]]) # 权重
B2 = np.array([0.1, 0.2]) # 偏置神经元
A2 = np.dot(Z1, W2) + B2 # 第2层的加权和
Z2 = sigmoid(A2) # 激活函数转化(将输入信号总和转化为输出信号)
# print(Z2) # Z2=[0.62624937 0.7710107 ] 第2层输出也为输出层输入
# 第2层到输出层的神经元信号传递
W3 = np.array([[0.1, 0.3], [0.2, 0.4]]) # 权重
B3 = np.array([0.1, 0.2]) # 偏置神经元
A3 = np.dot(Z2, W3) + B3 # 第3层的加权和
# 这里定义恒等函数将其作为输出层激活函数
def identify_function(x):
return x
Y = identify_function(A3) # 激活函数转化
# print(A3, '\n', Y) # 输出层
参考文献
《深度学习入门 基于Python的理论与实现》[日] 斋藤康毅