首页 > 解决方案 > 使用不同长度的批次进行 PyTorch 训练?

问题描述

是否可以在一个时期内使用长度不等的批次来训练模型?我是pytorch的新手。

标签: pytorch

解决方案


如果您查看数据加载器文档,您会看到一个drop_last参数,该参数说明有时当数据集大小不能被批次大小整除时,您会得到最后一批不同大小的数据。所以基本上答案是肯定的,有可能,它经常发生并且不会(太多)影响神经网络的训练。

但是你必须小心一点,一些 pytorch 层处理非常小的批量大小很差。例如,如果你碰巧有 Batchnorm 层,并且如果你得到一个大小为 1 的批次,你会得到错误,因为在某些时候,batchnorm 除以len(batch)-1. 更一般地说,训练一个具有批规范的网络通常需要相当大的批,比如至少 16 个(文献通常针对 32 或 64 个)。因此,如果您碰巧有不同大小的批次,请花时间检查您的层是否对批次大小有要求,以实现最佳训练和收敛。但除非在特殊情况下,你的网络无论如何都会训练,不用担心。

至于如何使您的批次具有自定义大小,我建议您查看dataloadersampler的 pytorch 实现并从中获得灵感。您可能想要实现类似的东西并BatchSampler使用batch_samplerDataloader


推荐阅读