zoukankan      html  css  js  c++  java
  • 训练中torch.backends.cudnn.benchmark的使用

    训练中torch.backends.cudnn.benchmark的使用

    一般将torch.backends.cudnn.benchmark设为True就可以大大提升卷积神经网络的运行速度

    原因:将会让程序在开始时花费一点额外时间,为整个网络的每个卷积层搜索最适合它的卷积实现算法,进而实现网络的加速

    适用:适用场景是网络结构固定(不是动态变化的),网络的输入形状(包括 batch size,图片大小,输入的通道)是不变的

    背景:

    大多数主流深度学习框架都支持 cuDNN这个GPU加速库,来为训练加速。而卷积网络的具体计算方法又有很多,所以使用torch.backends.cudnn.benchmark就可以在 PyTorch 中对模型里的卷积层进行预先的优化,也就是在每一个卷积层中测试 cuDNN 提供的所有卷积实现算法,然后选择最快的那个。这样在模型启动的时候,只要额外多花一点点预处理时间,就可以较大幅度地减少训练时间。

    影响卷积运行的因素:

    为什么我们可以提前选择每层的算法,即使每次我们送入网络训练的图片是不一样的?即每次网络的输入都是变化的,那么我怎么确保提前选出来的最优算法同样也适用于这个输入呢?原因就是,对于给定输入来说,其具体值的大小是不影响卷积的运行时间的,只有其尺寸才会影响。举例来说,我们只要固定输入大小都是 (8, 64, 224, 224),即 batch_size 为 8,输入的通道为 64,宽和高为 224,那么卷积层的运行时间都是几乎不变的,无论其中每个像素具体的值是 0.1 还是 1000.0。

    所以当网络的模型不会一直发生变化,且输入的大小不会一直变化的话就可以使用torch.backends.cudnn.benchmark=True来加速训练

    参考:https://zhuanlan.zhihu.com/p/73711222

  • 相关阅读:
    PAT (Advanced Level) Practise:1008. Elevator
    练习题-二维数组中的查找
    PAT (Basic Level) Practise:1028. 人口普查
    PAT (Basic Level) Practise:1014. 福尔摩斯的约会
    PAT (Basic Level) Practise:1019. 数字黑洞
    c++ 二进制文件读写
    c/c++ linux/windows 读取目录下的所有文件名
    C 语言实现 Linux touch 命令
    c++读写csv
    linux nohup【转】
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/13918221.html
Copyright © 2011-2022 走看看