h
=
w
1
∗
x
h=w1*x
h=w1∗x
a
=
m
a
x
(
0
,
h
)
a=max(0,h)
a=max(0,h)
y
=
w
2
∗
a
y=w2*a
y=w2∗a
import numpy as np
N=64 # 有多少个输入
D_in=1000 # 输入是多少维的
H=100 # 中间层
D_out=10 # 输出是10维的
# 随机化一些数据
x=np.random.randn(N,D_in)
y=np.random.randn(N,D_out)
w1=np.random.randn(D_in,H)
w2=np.random.randn(H,D_out)
learn_rate=1e-6
for it in range(500):
# 正向传播
h=x.dot(w1) # dot函数用于计算矩阵相乘 N*H
h_relu=np.maximum(h,0) # 激活函数 N*H
y_pred=h_relu.dot(w2) # N*D_out
# 计算损失
loss=np.square(y_pred-y).sum()
print(it,loss)
# 后向传播
grad_y_pred=2.0*(y_pred-y)
grad_w2=h_relu.T.dot(grad_y_pred)
grad_h_relu=grad_y_pred.dot(w2.T)
grad_h=grad_h_relu.copy()
grad_h[h<0]=0
grad_w1=x.T.dot(grad_h)
# 更逊权重
w1-=learn_rate*grad_w1
w2-=learn_rate*grad_w2