pytorch_神经网络模型搭建系列(0):play with pytorch

本文详细介绍了使用PyTorch搭建神经网络的不同方法,包括numpy基础、Tensor操作、autograd自动求导、nn模块封装和optim优化工具的逐步提升,帮助读者掌握从简单到复杂网络的构建和GPU加速。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、pytorch搭建模型

神经网络的搭建本身是一个较为复杂的过程,但是现在有非常多的、非常人性化的开源框架提供给我们使用,但是即便如此,网络的搭建也是有多种方法可以选择,本文以pytorch为例子加以说明

神经网络的基本流程可以分为两大步骤,即:

1、网络结构搭建

2、参数的梯度更新(后者又包括 “前向传播+计算参数的梯度+梯度更新”)

这也是pytorch搭建神经网络的一个基本思路。

1.1 方法1——使用numpy(入门)

# -*- coding: utf-8 -*-
import numpy as np
 
# N是训练的batch size; D_in 是input输入数据的维度;
# H是隐藏层的节点数; D_out 输出的维度,即输出节点数.
N, D_in, H, D_out = 64, 1000, 100, 10
 
# 创建输入、输出数据
x = np.random.randn(N, D_in)  #(64,1000)
y = np.random.randn(N, D_out) #(64,10)可以看成是一个10分类问题
 
# 权值初始化
w1 = np.random.randn(D_in, H)  #(1000,100),即输入层到隐藏层的权重
w2 = np.random.randn(H, D_out) #(100,10),即隐藏层到输出层的权重
 
learning_rate = 1e-6   #学习率
 
for t in range(500):
    # 第一步:数据的前向传播,计算预测值p_pred
    h = x.dot(w1)
    h_relu = np.maximum(h, 0)
    y_pred = h_relu.dot(w2)
 
    # 第二步:计算计算预测值p_pred与真实值的误差
    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
    

方法1的缺点

(1)没办法搭建复杂的网络结构(网络的结构搭建太底层);

(2)梯度需要自己求导函数,如果函数太复杂,网络太深就很难求了;

(3)没有办法使用GPU加速

1.2 方法2——使用torch包的Tensor(初级)

import torch
 
dtype = torch.float
device 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值