利用Python写BP神经网络(一):无偏置的BPNN

第一个最简单的BPNN:包括3个输入层节点,3个隐含层节点,1个输出层节点。

学习样本为5个,每次都把5个学习样本都学习一遍,直到学习次数达到预设的次数。

每次学习都记录下误差(或者叫损失)。

为了简单,隐含层和输出层暂时不考虑偏置,等下一次再考虑。

训练了1000次,误差在0.05多些,然后损失就下降得很慢了,估计增加偏置后会好些。

import numpy as np

# --------------------------------------------
# 激活函数
def f_sigmoid(x, derive=False):
    if not derive:
        return 1 / (1 + np.exp(-x))
    else:
        return x * (1 - x)

# --------------------------------------------

# 学习的样本,3个维度,增加1个偏置后,维度增加1,共5个样本,因此是4x5的矩阵
X = np.array([[1, 2, 1],
              [1, 1, 1],
              [1, 2, 2],
              [2, 1, 1],
              [2, 2, 1]])
# 预期输出,即监督值
Y = np.array([[0],
              [0],
              [1],
              [0],
              [1]])

# Weights
np.random.seed(2)
# 4 x 3 ,说明隐藏层有3个结点,但是包括1个偏置,维度增加1
W = 2 * np.random.random((3, 3)) - 1
# 4 x 1 ,说明输出层有1个结点,包含了偏置之后,维度增加1
V = 2 * np.random.random((3, 1)) - 1
#学习的速率
learn_rate = 0.95

#最大训练次数
MAX_LEARN_COUNT = 1000
nLearn_Count = 0
while nLearn_Count

你可能感兴趣的:(神经网络)