383. Abstraction and Reasoning Challenge | abstraction-and-reasoning-challenge
在这场有趣的比赛的最后一周,看到所有团队的巨大进步真是太棒了。像许多其他人一样,我和我的队友们度过了一个不眠之夜,专注于最后的“入场券”。
这里有一个简短的列表来总结我们团队的解决方案:
我在团队解决方案中的部分在排行榜(LB)上得了7分。
它由两种方法组成:
这场比赛之所以难有很多原因,其中一个原因是巨大的输出空间。当我加入比赛时,我想快速获得第一个小胜利。所以我查看了具有小输出空间的任务——裁剪对象任务。第一个对象裁剪内核得了2分,当我添加更多的对象提取函数和对称变换时,它得了5分。
内核使用暴力搜索来找到正确的对象提取函数和正确的对称变换。如果可能的唯一裁剪候选数 > 3,它会预测3个最大的对象。小对象可能是特征或噪声。该解决方案在 Python 中运行需3分钟。
伪代码:
bg_color = detect_bg(task) # 找到背景色作为接触输入三边的图形颜色。
get_object_funcs = [get_objects_by_color, get_objects_by_connectivity, get_objects_by_color_and_connectivity, get_objects_rectangles_without_noise, ….]
symmetry_funcs = [identity, flip, rotate, tile, zoom, flip_diagonal, …]
for get_object_func in get_object_funcs:
for symmetry_func in symmetry_funcs:
train_prediction_candidates = symmetry_func(get_object_func( task_train_examples))
if task_train_outputs in crop_candidates:
break
test_prediction_candidates = symmetry_func(get_object_func(task_test_examples))
test_predictions = unique(sort_by_size(test_prediction_candidates))[:3]
感谢 @teddykoker,我们有了很棒的 CA 内核:https://www.kaggle.com/teddykoker/training-cellular-automata-part-ii-learning-tasks。它在训练和评估中解决了许多各种任务,但在 LB 上没有得分。我添加了按频率编码颜色(0 – 最常见的颜色,1 – 第二常见的颜色,2 - …)并固定了所有随机种子。内核性能具有高度随机性,因此没有随机种子它是不可复现的。当我第一次提交时没有固定所有随机种子,它得了0.97分,然而当我固定随机种子后,它得了0.98分。
我不会在这里发布这个解决方案的细节,因为 @yukikubo123 的 GitLab 仓库本身就足以展示他所有令人惊叹的艺术作品
-> https://gitlab.com/yuki1020/abstraction-and-reasoning-challenge/
在观察数据时,@tarobxl 曾想:“我们能否通过将任务的训练对旋转到同一方向,来简化模型的学习过程。”我和他将这个想法应用到了所有可用的解决方案/模型中,幸运的是它与 @yukikubo123 的 DSL