import numpy as np
import matplotlib.pyplot as plt
#此示例神经网络的样本输入输出分别是二进制和十进制0-8
#输入样本
X=np.array([
[0,0,0],
[0,0,1],
[0,1,0],
[0,1,1],
[1,0,0],
[1,0,1],
[1,1,0],
[1,1,1]
])
#输出样本
Y=np.array([
[0],
[1],
[2],
[3],
[4],
[5],
[6],
[7]
])
#学习率:
learning_rate=0.01
#训练次数
train_times=1000
#构造一个简单神经元结构 包括三个输入节点和一个输出节点 输入输出连接权重值矩阵
W=np.random.randn(1,3)
#此数组记录损失值
costs=[]
#开始训练
for i in range(train_times):
for j in range(8):
y=W.dot(X[j]) #输入值前向传播得出输出值
cost=Y[j]-y #目标值和输出值之间的差距
cost2=cost**2 #平方差
costs.append(cost2) #记录平方差值以供后续可视化
gradient=-cost*X[j] #计算梯度
W-=gradient*learning_rate #梯度下降
#训练的最终结果就是得到了神经元网络连接的权重值矩阵 如此处的 W
print("训练结果 W = ",W)
#可视化误差在训练过程中的收敛现象
plt.plot(costs)
plt.show()