人工神经网络(Artificial Neural Networks,简写为ANNs)是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的,并具有自学习和自适应的能力。
应用类似于大脑神经突触联接的结构进行信息处理的数学模型。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)和之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
Xi指的是输入节点
Wi指的是权重
b指的是变差
sigma是求和
f是一个激活函数
还有另外一种形式
b变差变成了W0*X0,然后X0 = 1,我觉得这个好看点
公式的推导过程,代码实现的基础
下面用Python来实现一个简单单层感知器的实例,源码给大家献上了,还有注释呢。。。
import numpy as np
import matplotlib.pyplot as plt
#define the input data
X = np.array([[1,3,3],
[1,4,3],
[1,1,1],
[1,2,1]])
#define the label
T = np.array([[1],
[1],
[-1],
[-1]])
#define and initialize the weight 0-1
W = np.random.random([3,1])
#define the learning rate
lr = 0.1
#define the neural network
Y = 0
#update the weight function
def train():
global X,Y,W,lr,T
#calculate 4 predicted value meanwhile ,Y(4,1)
Y = np.sign(np.dot(X,W))
#T-Y get the label and predicted error E(4,1)
E = T - Y
#calculate the weight change
delta_W = lr * (X.T.dot(E))/X.shape[0]
#update weight value
W = W + delta_W
for i in range(100):
#update weight value
train()
#print the traning count
print("training count:",i+1)
#print the weights
print("weights:",W)
#calculate the current output
Y = np.sign(np.dot(X,W))
#all() All the Y value is equal All the T value
if (Y == T).all():
print("Finish!")
break;
#draw
#example x,y
x1 = [3,4]
y1 = [3,3]
x2 = [1,2]
y2 = [1,1]
#define the calssify line`s slope and intercept
k = -W[1]/W[2]
d = -W[0]/W[2]
#through two point insure a line
two_point = (0,5)
#draw a calssify line
plt.plot(two_point,two_point*k+d,'r')
#draw the example point
plt.scatter(x1,y1,c='b')
plt.scatter(x2,y2,c='y')
plt.show()