使用numpy實現網絡

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章