1.神经网络结构图
我编写的以两个输入为例子。
#设置训练的数据组(逻辑或运算)
inputs=[[0,0],[1,1],[0,1]]
outputs=[0,1,1]
Step1: 输入乘以权重
total=x1w1+x2w2
Step2: 带入激活函数sigmoid(x)
该神经网络将使用Sigmoid function作为激活函数,其绘制了一个典型的S形曲线:
此函数可以将任意值映射到区间0~1之间,它将帮助我们规范化输入值的和权重乘积之和即total。
import math
#激活函数sigmoid(x)
#将输出的值控制在0到1区间
def sigmoid(x):
return 1/(1+math.exp(-x))
#设置训练的数据组(逻辑或运算)
inputs=[[0,0],[1,1],[0,1]]
outputs=[0,1,1]
#设置权重 在下面的迭代中不断修改.
weights=[0.2,0.8]
for n in range(10000):
calculate_output=[0,0,0]
error=[0,0,0]
delta=[0,0,0]
adjustment=[0,0]
#计算预测值
for i in range(3):
for j in range(2):
total=inputs[i][j]*weights[j]
calculate_output[i]=sigmoid(total)
# print("After caculating, output:")
# print(calculate_output)
for i in range(3):
#计算误差
error[i]=outputs[i]-calculate_output[i]
#计算增量 error*k
delta[i]=error[i]*calculate_output[i]*(1-calculate_output[i])
# print("Error的值:")
# print(error)
# print("增量的值:")0
# print(delta)
#更新权重
for m in range(2):
for n in range(3):
adjustment[m]+=inputs[n][m]*delta[n]
weights[m]+=adjustment[m]
print("更新后的权重:")
print(weights)
#测试新的数据[1,0] 我们期待的输出是1
a=[1,0]
sum=0
for i in range(2):
sum+=a[i]*weights[i]
print(sigmoid(sum))