设定一个三层神经网络,输入层(第0层)2个神经元,第一层3个神经元,第二层2两个神经元,输出层3个神经元。
1. 输入层到第一层的信号传递
2. 第一层到第二层的信号传递
3. 第二层到输出层的信号传递
- a1, a2, a3…是对应的每个神经元的输入信号,要通过y(x)、sigama(x)激活函数转化为输出信号。
- sigama(x)——输出层的激活函数,与前面的不一样
- 偏置b,在除了输出层其他层都存在,它决定神经元的激活容易度
- 输出层的激活函数:回归问题(恒等函数identity_function),二元分类(sigmoid),多元分类(softmax)
import numpy as np
def sigmoid(x):
"""定义激活函数为sigmoid"""
return 1 / (1 + np.exp(-x))
# 输入层到第1层的信号传递
X = np.array([1, 0.5]) # 对应输入层有几个神经元
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) # 激活函数转化后的信号
# 第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
Z2 = sigmoid(A2)
# 第2层到输出层,注意输出层的激活函数不一样
def identity_function(x):
"""定义输出层的激活函数"""
return x
W3 = np.array([[0.1, 0.3], [0.2, 0.4]])
B3 = np.array([0.1, 0.2])
A3 = np.dot(Z2, W3) + B3
Y= identity_function(A3) # 或者直接Y=A3