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

  • 相关阅读:
    两台Mysql数据库数据同步实现
    利用Python读取外部数据文件
    在Python应用中使用MongoDB
    使用python语言操作MongoDB
    windows下Graphviz安装及入门教程
    【Machine Learning】决策树案例:基于python的商品购买能力预测系统
    Python数据可视化-seaborn
    np.tile 函数使用
    Python机器学习库scikit-learn实践
    基于C#net4.5websocket客户端与服务端
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/13918221.html
Copyright © 2011-2022 走看看