344. The 3rd YouTube-8M Video Understanding Challenge | youtube8m-2019
我们的解决方案非常直接。我们完全没有使用训练数据集。我们训练了一个简单的模型(池化层 + 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:
generate_submission)。在数据加载器方面,我使用了一种稍微不同的方法:我将所有数据转换为 np.arrays。这大大加快了训练速度,因为 90% 的验证数据没有标签。因此,实际上分段标记数据集的大小为 2 Gb。一个 epoch 只需要不到一分钟。
为了追求速度,这个内核采用了组合方法。它仅将验证数据转换为 np.array,并在最终推理时使用 TFDataset 数据加载器。
我希望这能对如何解决此类挑战有所启发!