• 【PyTorch】使用笔记


    日常帖。
    PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。它主要由Facebook的人工智能小组开发,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这一点是现在很多主流框架如TensorFlow都不支持的。 PyTorch提供了两个高级功能: 1.具有强大的GPU加速的张量计算(如Numpy) 2.包含自动求导系统的深度神经网络。除了Facebook之外,Twitter、GMU和Salesforce等机构都采用了PyTorch。

    参考

    网络训练和测试

    数据加载参考: 【PyTorch】torch.utils.data数据处理
    网络参考:【PyTorch】torch.nn 模块笔记

    在模型中有BN层或者dropout层时,在训练阶段和测试阶段必须显式指定train()和eval()。(model.train()model.eval()的区别主要在于Batch Normalization和Dropout两层。)
    model.eval()是保证BN层能够用全部训练数据的均值和方差,即测试过程中要保证BN层的均值和方差不变。对于Dropout,model.eval()是利用到了所有网络连接,即不进行随机舍弃神经元。

    测试torch.no_grad()的作用
    torch.no_grad()是一个上下文管理器,被该语句 wrap 起来的部分将不会track 梯度,有两个作用:新增的tensor没有梯度,使带梯度的tensor能够进行原地运算。
    验证模型时不需要求导,即不需要梯度计算,关闭autograd,提高速度,节约内存。如果不关闭可能会爆显存。

    知乎文章|PyTorch 25. torch.backends.cudnn
    设置 torch.backends.cudnn.benchmark = true可以增加运行效率;适用场景是网络结构固定(不是动态变化的),网络的输入形状(包括 batch size,图片大小,输入的通道)是不变的,其实也就是一般情况下都比较适用。如果卷积层的设置一直变化,将会导致程序不停地做优化,反而会耗费更多的时间。
    【pytorch】torch.backends.cudnn.deterministic
    注意cuda的随机数种子,需要用到torch.backends.cudnn.deterministic。
    设置torch.backends.cudnn.deterministic=True,每次返回的卷积算法将是确定的,即默认算法。如果配合上设置 Torch 的随机种子为固定值的话,应该可以保证每次运行网络的时候相同输入的输出是固定的。

    torch.cuda.empty_cache()
    PyTorch的缓存分配器会事先分配一些固定的显存,即使实际上tensors并没有使用完这些显存,这些显存也不能被其他应用使用。这个分配过程由第一次CUDA内存访问触发的。而 torch.cuda.empty_cache() 的作用就是释放缓存分配器当前持有的且未占用的缓存显存,以便这些显存可以被其他GPU应用程序中使用,并且通过 nvidia-smi命令可见。注意使用此命令不会释放tensors占用的显存。
    不建议使用torch.cuda.empty_cache()
    实践中:这个命令并不会真正的帮助你清理更多的显存,与此同时,还会让你的代码速度变慢。

    Tensor相关

    torch.flatten

    • torch.flatten(input, start_dim=0, end_dim=- 1) → Tensor, 按照默认值,这个函数会把input推平成一个shape为[]的tensor,其中n即input中元素个数。

    • flatten(x,0)和flatten(x,1)可以看成start_dim=0/1,end_dim=-1。

    • view和flatten都是和输入共享内存的,flatten的好处是不用输入形状参数,直接指定维度,在这之后的都被拉平。view则是更加灵活。

    对pytorch中x = x.view(x.size(0), -1) 的理解说明

    • 在pytorch中的view()函数就是用来改变tensor的形状的,例如将2行3列的tensor变为1行6列,其中-1表示会自适应的调整剩余的维度。
    • 在CNN中,因为卷积或者池化之后需要连接全连接层,所以需要把多维度的tensor展平成一维。卷积或者池化之后的tensor的维度为(batchsize,channels,x,y),其中x.size(0)指batchsize的值,最后通过x.view(x.size(0), -1)将tensor的结构转换为了(batchsize, channels*x*y),即将(channels,x,y)拉直,之后就可以接fc层了。

    tensor.unsqueeze(dim):扩展维度,dim指定扩展哪个维度。
    tensor.squeeze(dim):去除dim指定的且size为1的维度,维度大于1时,squeeze()不起作用,不指定dim时,去除所有size为1的维度。

    torch.topk(input, k, dim=None, largest=True, sorted=True, out=None) -> (Tensor, LongTensor) 其中k是保留的k个值,dim表示在指定的维度进行取最值,largest=True意味着选取最大的,sorted=True是指将返回结果排序。
    topk返回的是一个tensor,第一个元素指返回的具体值,第二个元素指返回值的index。

    torchaudio

    PyTorch torchaudio教程 / pytorch教程
    torchaudio充分利用了 PyTorch 的 GPU 支持,并提供了许多工具来简化数据加载并使其更具可读性。

    torchaudio 和 librosa 中MelSpectrogram
    TORCHAUDIO.TRANSFORMS
    torchaudio.transforms.MelSpectrogram

    torch.hub

    Pytorch Hub is a pre-trained model repository designed to facilitate research reproducibility.

    torch.hub — PyTorch 1.9.1 documentation

  • 相关阅读:
    tomcat work 目录
    上传图片预览 支持IE8+,FF,Chrome ,保留原图片比例
    设计模式学习笔记-观察者模式
    jcarousellite 实现图片列表滚动
    linux一些常用命令
    http&https&证书&数字签名
    醉笑陪君三万场 不诉离伤
    笔记本光驱位安装固态硬盘及window系统一些过程记录
    linux 添加定时任务脚本
    设置 SSH 免密码登陆——仍提示输入密码
  • 原文地址:https://www.cnblogs.com/ytxwzqin/p/16214826.html
Copyright © 2020-2023  润新知