从numpy到pytorch实现神经网络

本文详细介绍了如何从头开始使用numpy手动实现一个两层神经网络,然后逐步过渡到使用PyTorch进行实现。通过六个步骤,涵盖了从手动计算梯度到利用PyTorch的自动求导功能,以及使用nn模块和优化器的过程。最后讨论了通过类继承构建复杂神经网络模型的方法。
摘要由CSDN通过智能技术生成

本文章基于学习B站视频的pytorch讲解(附上视频网址:https://www.bilibili.com/video/av62138405?from=search&seid=16456035230894602976),实现了从numpy手写神经网络到pytorch实现神经网络,编写的神经网络的为两层神经网络:

以下每一个代码块都可单独运行

1、利用纯numpy实现神经网络,训练数据利用随机数产生,求梯度及反向传播过程手动计算

'''
使用numpy实现两层神经网络
'''
import numpy as np

N, D_in, H, D_out = 64,1000,100,10 # 输入64个数据,每个数据1000纬,中间层100,输出10
'''
numpy.random.rand()产生从[0,1)之间的随机数,没有负值。
numpy.random.randn()产生服从正态分布的随机数,会出现负值。
'''
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 # 10的-6次方
for it in range(500):
    # Forward pass
    h = x.dot(w1) # N * H
    h_relu = np.maximum(h, 0) # N * H
    y_pred = h_relu.dot(w2) # N * D_out
    
    # compute loss
    loss = np.square(y_pred - y).sum() # 均方误差
    print(it, loss)
    
    # Backward pass
    # Compute the gradient
    grad_y_pred = 2.0 * (y_pred - y) # d loss / d y_pred loss中有平方所以*2
    grad_w2 = h_relu.T.dot(grad_y_pred) # .T代表转置
    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)
    
    # Update weights of w1 and w2
    w1 -= learning_rate * grad_w1
    w2 -= learning_rate * grad_w2

2、在上述代码的基础上,将numpy的实现换为pyto

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值