import numpy as np
#N 是批量的大小;D_in是指輸入的維度;D_out是輸出的維度;H是隱藏的維度
N,D_in,H,D_out=64,1000,100,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)
#設置學習率
learning_rate=1e-6
for t in range(500):
h=x.dot(w1)
h_relu=np.maximum(h,0)
y_pred=h_relu.dot(w2)
#計算損失
loss=np.square(y_pred-y).sum()
print(t,loss)
#反向傳播,計算w1,w2對於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 -= learning_rate * grad_w1
w2 -= learning_rate * grad_w2