torch教程[1]用numpy实现三层全连接神经网络

Posted hopskin1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了torch教程[1]用numpy实现三层全连接神经网络相关的知识,希望对你有一定的参考价值。

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实现三层全连接神经网络的主要内容,如果未能解决你的问题,请参考以下文章

Torch:为啥在相同数据大小下卷积层甚至比全连接线性层慢

搭建三层全连接网络

用numpy实现CNN卷积神经网络

在深度全连接神经网络中进行二元分类的反向传播的正确方法是啥

全连接神经网络 MLP

用pytorch实现多层感知机(MLP)(全连接神经网络FC)分类MNIST手写数字体的识别