def sigmoid(x):
'''用的是逻辑斯蒂曲线,当然根据需要也可以用线性整流函数'''
return 1/(1+np.exp(-x))
def ReLU(a,Inactive):
'''线性整流函数:0和a的最大值取其一,当a超过一个域值的时候就会激发,否则择不激发,输出0,效率比logistic/逻辑斯蒂曲线要高,适合特别深的神经网络'''
return a.max() < Inactive and 0 or a.max()
def softmax(x):
'''柔性最大值传输函数'''
exp = np.exp(x-x.max())
return exp/exp.sum()
def identity(x):
'''可以调整,获得更好的精度'''
return x
def network():
network = dict()
network["W1"] = abs(np.random.randn(2,3)) #第一层权重
network["b1"] = abs(np.random.randn(1,3)) #第一层偏置
network["W2"] = abs(np.random.randn(3,2)) #第二层权重
network["b2"] = abs(np.random.randn(1,2)) #第二层偏置
network["W3"] = abs(np.random.randn(2,2)) #第三层权重
network["b3"] = abs(np.random.randn(1,2)) #第三层偏置
return network
def forward(network,x):
W1, W2 ,W3 = network["W1"],network["W2"],network["W3"]
b1 ,b2 ,b3 = network["b1"],network["b2"],network["b3"]
Z_func = lambda x,w,b : sigmoid(np.dot(x,w)+b)
z1 = Z_func(x,W1,b1)
z2 = Z_func(z1,W2,b2)
a3 = np.dot(z2,W3)+b3
y = softmax(identity(a3),2)
return y
network = network()
x = np.array([1.0,2])
y = forward(network,x)
y
神经网络学习过程之(前馈神经网络)
最新推荐文章于 2024-05-04 20:54:30 发布