pytorch笔记:一些常见操作,构建全连接神经网络,验证操作,评估模式

本文介绍了PyTorch中构建全连接神经网络的基本步骤,包括生成tensor、设置requires_grad参数、构建模型、选择损失函数和优化方法、反向传播以及批训练操作。还详细讲解了如何在GPU上加速训练,并展示了如何保存和读取模型。此外,文章还涵盖了验证操作和模型评估模式的使用,以及torchvision库的应用。

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


  Pytorch是神经网络届的numpy,numpy会把array放到CPU中加速计算,torch会把tensor放到GPU中加速计算。torch和numpy有很多用法是一样的,只不过numpy的方法接受的是array或者matrix,torch接受的是tensor。

  按照官网安装,一般是两行命令,第一行装的是pytorch的主模块,第二行安装的torchvision,会包含一些数据库,例如图片数据库,还有一些预先训练好的模型,例如VGG,ResNet,在写神经网络模型时,可以直接照搬里面的模板。

  在使用之前需要导入库,一般有

import torch       
from torch import nn    # 这个库用于构建神经网络的结构,neural networks的缩写
                        # 里面包括线性层,卷积层,循环神经网络单元等, 当然也包括很多的激活函数
from torch import optim   # 优化方法,MSE,交叉熵等
from torch.utils.data import DataLoader    # 用于mini-batch SGD的喂数据的类

  还有一些类可以根据需要选择是否导入

from torch.autograd import Variable     # 变量类,以前需要把tensor类型变成variable类型才可以反向传播
                                        # 现在版本一般合并了tensor类型和variable类型,直接用tensor类型就可以反向传播  
from collections import OrderedDict  # 字典一般没有先后顺序,OrderedDict 用以生成有先后顺序的字典
from torch.utils.data.sampler import SubsetRandomSampler    # 手动抽样的类,根据需要选择是否导入这个库

我们可以通过下面的方法,查看pytorch的版本,以及是否支持使用GPU加速

print(torch.__version__) 
print(torch.cuda.is_available())

可以通过下面的方法查看可以使用多少GPU

print(torch.cuda.device_count())

生成tensor

  使用pytorch时,要注意三种大的数据类型,一是传统python的List和numpy的nd.array,二是pytorch中的tensor,三是pytorch中的variable;早期版本,我们需要沿着这条线,从传统python数据结构转换到tensor,在从tensor转换到variable,只有variable才可以进行反向传播,但是较新的版本的pytorch合并了tensor和variable的功能(variable类仍然存在,仍可以按照老版代码写),不需要转换variable,只需要把tensor的requires_grad参数设置为True,如果requires_grad=Fasle时不需要更新梯度, 适用于冻结某些层的梯度

# 法一:从numpy库生成模板
data = [1,2,3,4]
data = np.array(data)
tensor = torch.from_numpy(data)    # 默认生成torch.int

data = [1.,2,3,4]    
data = np.array(data)
tensor = torch.from_numpy(data)    # 默认生成torch.float64

## 同样也可以把tensor转换成numpy形式
data2 = tensor.numpy()

#  法二:利用pytorch的一些函数,这些函数一般和numpy中的类似
tensor = torch.zeros(1, requires_grad=True)  # 对应numpy中的np.zeros()     
                #  requires_grad=True表示tensor写入计算图,进行梯度反向传播
tensor = torch.linspace(-5,5,200)   # 对应numpy中的np.linspace()
tensor = torch.add(tensor,tensor)  # 对应numpy中的np.add()
tensor = torch.mean(tensor)  # 对应numpy中的np.mean()

# 法三:当然也可以直接转换成FloatTensor等tensor形式
tensor = torch.FloatTensor([[1,2],[3,4]])   # 直接把list转化成浮点形式的tensor

格式转换

data = [1,2,3,4]
data = np.array(data)
tensor = torch.from_numpy(data)    # 默认生成torch.int
tensor = tensor.type(torch.float)    # 转化为torch.float32
tensor = tensor.type(torch.float64)    # 转化为torch.float64
tensor = tensor.type(torch.float16)    # 转化为torch.float16
tensor = tensor.type(torch.int8)     # 转化为torch.int8

设置requires_grad参数

# 生成tensor变量时就设置requires_grad
tensor = torch.zeros(1, requires_grad=True)   # 生成时默认requires_grad参数是False, 除非声明requires_grad=True

# 单个tensor变量改变requires_grad
tensor = torch.FloatTensor([[1,2],[3,4]])   # 生成时默认requires_grad参数是False,torch.FloatTensor没有requires_grad参数
tensor.requires_grad = False

# 或者
tensor.requires_grad_(True)

# 整个模型改变requires_grad
for param in model.parameters():
    param.requires_grad = False

注意:只有浮点类型支持backword自动求导,且求导,只能是【标量】对标量,或者【标量】对向量/矩阵求导!,一般loss函数求出来的就

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值