1. 程式人生 > >torch教程[1]用numpy實現三層全連接神經網絡

torch教程[1]用numpy實現三層全連接神經網絡

一個 out () numpy port import 課程 例子程序 bsp

torch的第一個例子程序,是用numpy函數實現神經網絡。cs231n的課程中有大量這樣的作業。

import numpy as np
N,D_in,H,D_out=64,1000,100,10
x=np.random.randn(D_in,H)
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) #compute and print loss loss=np.square(y_pred-y).sum() print(t,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

這是一個三層的神經網絡,包括一個輸入層,一個中間隱藏層和一個輸出層,神經元數分別為Din, H和Dout

前向傳播時,H=XW1, H=max(H,0), Y=HW2

反向傳播時,按如下公式計算梯度:

若Y=XB, 則DX=YBT DB=XT DY

若Hrelu=max(H,0) DH=Hrelu if H>0 else DH=0

torch教程[1]用numpy實現三層全連接神經網絡