import numpy as np
import matplotlib.pyplot as plt
#选择激活函数及导数
def active(x):
return 1/(1 + np.exp(-x))
def active_der(x):
s = 1/(1 + np.exp(-x))
return s * (1 - s)
def initialize(n,p,q):
w = np.random.randn(p,n)
v = np.random.randn(q,p)
a = 0
b = 0
return w,v,a,b
def train(x,d):
#更新输入层,隐藏层,输出层神经元数
n = 5
p = 3
q = 5
learn_rate = 0.2
w,v,a,b = initialize(n,p,q)
loss_path = []
for i in range(200):#更新迭代次数
H_in = w.dot(x) + a
H_out = active(H_in)
Y_in = v.dot(H_out) + b
Y_out = Y_in
loss = 0.5 * np.sum(np.square(Y_out - d))
loss_path.append(loss)
detla2 = (Y_out - d)
detla1 = v.T.dot(detla2) * active_der(H_in)
dv = detla2.dot(H_out.T)
dw = detla1.dot(x.T)
db = detla2
da = detla1
v -= learn_rate * dv
w -= learn_rate * dw
b -= db
a -= da
print("本次训练结束%d"%(i))
print("Y_out",Y_out)
print("w",w)
print("v",v)
print("a",a)
print("b",b)
return loss_path
x = np.array([[1,3,5,7,9]]).T
d = np.array([[2,4,6,8,10]]).T
X = np.arange(200)#在此选择迭代次数
Y = train(x,d)
plt.plot(X,Y)
plt.show()
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交