返回列表

Solution for 21st place and a PyTorch kernel

344. The 3rd YouTube-8M Video Understanding Challenge | youtube8m-2019

开始: 2019-06-27 结束: 2019-10-11 音视频处理 数据算法赛
第21名解决方案及PyTorch内核

第21名解决方案及PyTorch内核

作者: Artyom Palvelev (MASTER) | 比赛排名: 第21名 | 发布时间: 2019-10-12

我们的解决方案非常直接。我们完全没有使用训练数据集。我们训练了一个简单的模型(池化层 + MLP),并使用 softmax 分类器对 1000 个类别进行分类。该模型的单折结果在公共 LB 上得分为 0.750,十折结果为 0.760,混合 4 个相似模型的结果为 0.761,这是我们的最终成绩。

最佳模型结构如下(具体数值通过 hyperopt 找到):

nn.AdaptiveAvgPool1d(1)    # 在时间维度上取平均

nn.Linear(1152, 2765)
nn.BatchNorm1d(width)
SwishActivation()

nn.Linear(2765, 1662)
nn.BatchNorm1d(width)
SwishActivation()

nn.Linear(1662, 1000)

我用这个模型创建了一个内核,包括生成提交文件在内,在不到一小时的时间内就在公共 LB 上获得了 0.753 的分数:https://www.kaggle.com/artyomp/stronger-baseline/。这之所以成为可能,是因为我的队友 @tenich

  • 创建了一个适用于 PyTorch 的 TensorFlow 数据加载器;
  • 将提交生成时间从 5 小时优化到了 5 分钟(请查看 generate_submission)。

在数据加载器方面,我使用了一种稍微不同的方法:我将所有数据转换为 np.arrays。这大大加快了训练速度,因为 90% 的验证数据没有标签。因此,实际上分段标记数据集的大小为 2 Gb。一个 epoch 只需要不到一分钟。

为了追求速度,这个内核采用了组合方法。它仅将验证数据转换为 np.array,并在最终推理时使用 TFDataset 数据加载器。

我希望这能对如何解决此类挑战有所启发!

同比赛其他方案