v2 版本从第二部分开始增加了代码参考。
抽象:
视觉推理对于构建理解世界并执行超越感知的问题解决的智能代理是必不可少的。可微分正向推理已经被开发来将推理与基于梯度的机器学习范例相结合。然而,由于内存强度,大多数现有的方法没有带来一阶逻辑的最佳表达能力,排除了关键的解决能力抽象视觉推理,其中代理需要通过在不同场景中对抽象概念进行类比来进行推理。为了克服这个问题,我们提出了神经符号消息传递推理机 (NEUMANN ),它是一种基于图的可微分正向推理机,以高效存储的方式传递消息用函子处理结构化程序。此外,我们提出了一种计算高效的结构学习算法,用于对复杂的视觉场景进行解释性程序归纳。为了评估,除了常规的视觉推理任务,我们提出了一个新的任务,幕后视觉推理,其中代理需要学习抽象程序,然后通过想象未观察到的场景来回答查询。
我们从经验上证明,诺依曼NEUMANN有效地解决了视觉推理任务,优于神经、符号和神经-符号基线。
桥接了当前数据驱动的机器学习范式,以知识表示和推理来执行超越感知的问题解决。
介绍:
人类可以解释和理解他们看到的东西,想象他们可以看到但还没有看到的东西, 并执行计划来解决问题[6]。此外,人类可以从少量的经验中学习[7,8],但 dnn 如 transformers[9–13]需要大量的数据集才能在特定任务中取得良好的性能[14]。这些埃森人人类的智能方面,称为模型构建[6],对人类水平的智能至关重要。
逻辑是人工智能提供知识表达和推理能力的基本要素[15,16]。归纳逻辑编程(ILP)[17–19]是一个学习逻辑程序示例的框架。与 DNNs 形成鲜明对比的是,ILP 获得了一些重要的优势,例如,它可以从小数据中学习,并且它可以学习人类可以解释的显式程序。最近,可微 ILP ( ILP) ∂已经提出[20],他们在那里执行基于梯度的逻辑程序学习。在∂ILP,通过将逻辑程序编码成张量,仅使用可微运算来实现前向推理,该前向推理导出给定逻辑程序的所有可能结果。因此,它可以很容易地与用于感知的 DNNs 结合,并对视觉输入执行 ILP。然而,基于张量的可微正向推理是内存密集型的。因此,它假设要处理的逻辑程序是简单的,例如,每个谓词最多有两个参数,每个子句最多有两个体原子,并且不允许有函子。∂ILP-ST [21]在∂ILP 被开发用来处理带有函子的结构化逻辑程序,导致αILP [22],它可以学习复杂视觉场景上的分类规则。它们处理记忆通过对子句执行波束搜索而不是通过模板生成所有可能的子句来解决消耗问题。
然而,执行波束搜索在计算上是昂贵的,因为每一步都需要评估每个候选子句。因此,当处理复杂的程序时,它需要更长的时间来完成,并且不可伸缩对于代理扮演多种角色的更具挑战性的任务,例如理解视觉场景、学习抽象操作和通过抽象推理解决查询。
为了缓解这个问题,我们开发了一个内存高效的可微分前向推理器和一个计算高效的学习策略。我们提出了神经符号消息传递推理机(NEUro-symbolic Message-pAssiNg reasoNer NEUMANN),这是一种基于图的可微分正向推理方法,以有效存储的方式发送消息。我们首先介绍在一阶逻辑中引入一种新的基于图的逻辑程序表示,然后通过消息传递进行可微推理。图形结构通过连接逻辑原子有效地编码了推理过程。然后,通过结合基于梯 度 的 评 分 和 可 微 分 采 样 , 我 们 提 出 了 一 种 计 算 高 效 的 NEUMANN 学 习 算法。NEUMANN 不是对每个子句进行精确评分来执行波束搜索,而是计算分类损失的 候 选子 句 的梯 度,并 使 用它们作 为 近似 分 数来 生成 新子 句 。通过这 样做,NEUMANN 避免了子句的嵌套计分循环,这是波束搜索方法的计算瓶颈。
记忆高效的推理和计算高效的学习使 NEUMANN 能够解决抽象的视觉推理,其中代理需要通过在不同场景中使用抽象概念的类比来执行推理。为了评估这一点, 我们提出了一个新的任务,场景背后的视觉推理,其中代理需要执行复杂的视觉推理,想象没有观察到的场景。
图 1 示出了一个幕后任务,其目标是计算一个查询的答案,例如“删除一个灰色对象后,第二个最左边的对象是什么颜色?”给定一个视觉场景。反过来,它由两个子任务组成。第一种是从视觉场景中导出抽象程序,例如删除对象,如图 1 左侧所示。第二个是解决通过以下方式获得答案的查询关于非观察场景的推理。为了解决这个问题,代理需要从视觉输入中学习抽象操作,并进行有效的推理。该任务评估以下四种基本的建模能力:(1)从少量示例中学习,(2)深入理解复杂的视觉场景,(3)学习解释性程序以转移到新的任务, (4)想象尚未直接观察到的情景。幕后是涵盖所有这四个方面的第一个基准。我们在选项卡上突出显示。1 在这些方面与以前的视觉推理任务的区别。幕后作为建模能力的合法任务和数据集,这有利于培养机器学习范式来执行模式识别之外的问题解决。
总而言之,我们做出了以下重要贡献:
1. 我们提出了 NEUMANN1,一个使用消息传递的内存有效的可微分正向推理机。
我们从理论和经验上证明,诺依曼比传统的基于张量的可微分正向推理机需要更少的内存[20–22]。给定 G 个基原子和 C∫个基子句,传统的可微分正向推理机二次消耗内存(G C∫),而 NEUMANN 线性消耗内存(G+C∫)。
2. 我们提出了一种计算高效的学习算法,用于 NEUMANN 从视觉场景中学习复杂程序。NEUMANN 执行基于梯度的评分和可区分的采样,避免对候选子句评分的嵌套循环。
3. 我们提出了一个新的具有挑战性的任务和一个数据集,场景背后的视觉推理, 其中智能体需要对复杂的视觉场景进行抽象的视觉学习和推理。这项任务要求特工们学习抽象的歌剧基于视觉场景的小数据推理和基于非观察场景的推理来回答问题。该任务评估机器学习模型在不同的超越感知的智能的基本模型构建属性上的作用,这些属性没有包括在之前提到的视觉推理基准中。
4. 我们的经验表明,诺依曼解决视觉推理任务,如 Kandin- sky 模式[23]和CLEVR-Hans [24]使用更少的内存比传统的可微分正向推理机,优于神经基线。更重要的是,我们表明诺依曼有效地解决了提出的幕后任务,优于传统的可微分正向推理机。为此,我们表明,诺依曼获得了可扩展和可解释的视觉推理和学习的优势,对符号和神经符号基线。
1. We propose NEUMANN1, a memory-efficient differentiable forward reasoner using message-passing. We theoretically and empirically show that NEUMANN requires less memory than conventional tensor-based differentiable forward reasoners [20–22]. Given G ground atoms and C∗ground clauses, conventional differentiable forward reasoners consume memory quadratically O(G × C∗), but NEUMANN consumes linearly O(G + C∗).
2. We propose a computationally-efficient learning algorithm for NEUMANN to learn complex programs from visual scenes. NEUMANN performs gradient-based scoring and differentiable sampling, avoiding nested loops for scoring candidate clauses.
3. We propose a new challenging task and a dataset, Visual Reasoning Behind the Scenes, where the agents need to perform abstract visual learning and reasoning on complex visual scenes. The task requires the agents to learn abstract operations from small data on visual scenes and reason about non-observational scenes to answer queries. The task evaluates machine-learning models on the different essential model-building properties of intelligence beyond perception, which are not covered by the previously addressed visual reasoning benchmarks.
4. We empirically show that NEUMANN solves visual reasoning tasks such as Kandinsky patterns [23] and CLEVR-Hans [24] using less memory than conventional differentiable forward reasoners, outperforming neural baselines. More importantly, we show that NEUMANN efficiently solves the proposed Behind-the-Scenes task, outperforming conventional differentiable forward reasoners. To this end, we show that NEUMANN gains the advantages of scalable and explainable visual reasoning and learning against symbolic and neuro-symbolic baselines.
2一阶逻辑、可微分推理和图形神经网络
数据:
FactsConverter converts the output fromt the perception module to the valuation vector.
Img2Facts module converts raw images into a form of probabilistic facts. Each image is fed to the perception module, and the result is concatenated and fed to facts converter.
3 NEUMANN
在给定视觉输入和加权子句的情况下,NEUMANN 以可微分的方式计算逻辑蕴涵。
图 2 示出了 NEUMANN 的推理管道的概况。与传统的可微分正向推理机[20–22]相比,NEU-曼在以下步骤中对图形执行消息传递
顶层逻辑,main
Algorithm 3 shows the entire learning process of NEUMANN. (Line 1-3) An initial reasoning graph is built. (Line 5-10) Clauses C are scored by computing gradients.
Useful clauses in C get negatively large gradients, and thus they are scored high at line 10. (Line 13-21) Sample clauses to be refined to generate new clauses according to the scores using the Gumbel-max trick. (Line 22-25) The sampled clauses are refined to generate clauses to be scored in the next iteration. (Line 27-32) NEUMANN performs weight optimization using the generated clauses Csampled with randomly initialized clause weights w.
运行日志:https://github.com/ml-research/neumann/blob/main/logs/redtriangle_log.txt 阅读原文或文末
运行时:
eval:
4 Experiments
Q1: Does the message-passing reasoning algorithm simulate the differentiable forward reasoning dealing with uncertainty?
Q2: Can NEUMANN solve visual ILP problems combined with DNNs outperforming neural baselines and consuming less memory than the other differentiable ILP benchmarks?
Q3: Does NEUMANN solve the Behind-the-Scenes task outperforming conventional differentiable reasoners providing the model-building abilities (cf. Tab. 1)?
Q4: Does NEUMANN provide advantages over state-of-the-art symbolic and neurosymbolic methods?
4.4 相对于其他符号和神经符号方法的优势为了回答问题 4,我们将 NEUMANN 的性能与最先进的符号和神经符号方法进行了比较。此外,我们表明 NEUMANN 可以使用端到端的可区分推理架构,使用梯度有效地产生视觉解释。
4.5 讨论我们现在讨论诺依曼的优势,计算,影响和局限性
与纯符号学习者相比有什么优势? 与纯符号系统相比,NEUMANN 最有前途的特性是它能够以可扩展的方式处理大量的视觉输入。如第4.4节所示NEUMANN 可以执行视觉推理和学习,在运行时间和性能方面超过了最先进的神经符号基准。这个特性对于将学习和推理与神经网络紧密集成至关重要,
如第442节所示,NEUMANN 可以使用基于梯度的 XAI 方法有效地产生与感知网络一起工作的视觉解释,而如果没有额外的硬编码,用纯符号系统很难产生相同的结果。
是什么让诺依曼的推理和学习具有可扩展性?
NEUMANN 的可扩展性能可以通过两个原因来解释。(1) NEUMANN将程序生成一次, 然后重复使用产生的计算图,就像其他可微分的正向推理机一样[20-22]。这意味着诺依曼不为每个特定的查询计算逻辑运算。相反,NEUMANN在计算图上执行推理,然后获得结果。
相比之下,DeepProbLog [29]中采用的(可微分)反向推理需要为新查询构建新的计算图,这使得推理成本很高。(2)更重要的是,NEUMANN 是一个图形神经网络, 并且执行在 GPUs6 上推理。一次接地方案使推理器能够建立和修复用户对神经网络所做的计算图,即定义网络架构和一组权重,然后构建计算图并修正了转发可以在 GPU 上进行的问题。当处理一批样本(例如 200 个样本) 时,NEUMANN 可以非常高效地并行处理它们。这个特性对于逻辑推理器来说并不简单。通常,他们会按顺序处理一批样本。例如,DeepProbLog 使用句子决策图[53]进行推理,它需要为每个查询在 CPU 上构建不同的 SDD, 而 FFNSL 使用的是基于 CPU 的推理器(CLINGO [51])。因此,对于这些推理器来说,通过以可扩展的方式使用 GPU 来计算推理需要付出不小的努力。
6 结论
我们提出了 NEUMANN,一个内存高效的可微分正向推理机,它在推理图上传递消息。NEUMANN 将一阶逻辑中的逻辑程序编译成一个图,该图包含了正向推理的过程,并以神经方式执行消息传递。此外,我们提出了一个计算高效的学习算法, 结合基于梯度的评分和可区分的子句采样。我们的实验表明:(1)消息传递推理算法模拟了处理不确定性的可微正向推理。(2) NEUMANN 可以结合 DNNs 解决视觉ILP 问题,优于神经基线,并且比其他可微分 ILP 基准消耗更少的内存。(3) NEUMANN 解决了幕后任务,优于传统的可微分推理器,提供了超越简单感知的建模能力能力,即从小数据中学习,深入理解视觉场景,学习解释性程序,对非观察场景进行推理。(4)诺依曼执行可扩展的视觉推理和学习,在运行时间和性能方面胜过最先进的符号和神经符号方法。此外,诺依曼可以有效地结合 XAI 方法,即诺依曼使用 DNNs 产生基于梯度的视觉解释。
诺伊曼为未来的工作提供了几个有趣的途径。NEUMANN 是 GNNs 的一个实例, 提供了表示学习的能力,使神经符号推理更加健壮和多模态。此外,诺依曼允许在复杂的逻辑程序上使用函子进行可微推理,因此可以用于重要的应用,如规划、元解释器和知识增强基础模型。出于正确的原因,诺伊曼也有希望成为 right for the right reasons 方法[58],训练神经网络产生正确的解释因此是实现可解释的机器学习系统的重要因素。一般来说,它桥接了当前数据驱动的机器学习范式,以知识表示和推理来执行超越感知的问题解决。
完整内容请阅读原文
相关文章:
𝛼 ILP: thinking visual scenes as differentiable logic programs
Right for the Right Concept 交互解释符号Learning
相关推荐:
AGI结构模块很细分:脑网络结构高清大图
AGI部分模块的优秀复现:
最新代码:一个epoch打天下:深度Hebbian BP (华为实验室) 生物视觉 +
AGI之 概率溯因推理超越人类水平 VSA符号溯因abductive推理 +
Spaun2 Extending the World's Largest Functional Brain Model 架构 +
自由能AI模型的理论高度和潜力(信息量大)自由能loss +
DeepMind Dreamer 系列为什么效果这么好及自由能理论高度和潜力 世界模型+
世界模型仅用 1 小时训练一个四足机器人从头开始翻滚、站立和行走,无需重置。10 分钟内适应扰动或快速翻身站立 躯体控制 +
代码:Learning to Learn and Forget (华为)长短期记忆网络 +
inductive Logic Programs 视觉推理 +
框架及硬件
benchmark:
NeuroGym- An open for developing and sharing neuroscience tasks
60作者的NeuroBench:通过协作、公平和有代表性的基准测试推进神经形态计算
Towards Data-and Knowledge-Driven AI: A Survey Neuro-Symbolic 图表
系统观:
https://github.com/ml-research/neumann/blob/main/logs/redtriangle_log.txt 内容如下:
args Namespace(batch_size=12, body_len=2, dataset='red-triangle', dataset_type='kandinsky', device='cpu', epochs=30, gamma=0.01, infer_step=4, lr=0.01, max_body_len=1, max_depth=1, max_var=6, max_var_search=5, min_body_len=6, n_data=200, n_ratio=1.0, n_sample=10, neg_ratio=1.0, no_cuda=True, num_objects=6, num_workers=4, pos_ratio=1.0, pre_searched=False, program_depth=3, program_size=1, rtpt_name='HS', term_depth=3, th_depth=4, trial=5)
device: cpu
Loading FOL language.
Generating terms...
blue
circle
img
obj0
obj1
obj2
obj3
obj4
obj5
red
square
triangle
yellow
13 terms are generated!
Generating ground atoms for predicate: kp
Generating ground atoms for predicate: same_color_pair
Generating ground atoms for predicate: same_shape_pair
Generating ground atoms for predicate: diff_color_pair
Generating ground atoms for predicate: diff_shape_pair
Generating ground atoms for predicate: diff_color
Generating ground atoms for predicate: diff_shape
Generating ground atoms for predicate: in
Generating ground atoms for predicate: color
Generating ground atoms for predicate: shape
Generating ground atoms for predicate: closeby
Generating ground atoms for predicate: online
Sorting 925 atoms...
926 ground atoms are generated!
926 Atoms:
Loading YOLO Perception Module...
Loading YOLO model...
Pretrained neural predicate closeby have been loaded!
Initializing reasoning graph...
Adding edges to the graph...
Converting to PyG object ...
Reasoning Graph(N_atom_nodes=926, N_conj_nodes=577)
NUM NODES: 1503
NUM EDGES: 2084
MEMORY TOTAL: 3587
lr=0.01
tensor([1.])
==== CLAUSE SCORES ===
1.0 kp(X):-in(O1,X),in(O2,X).
Logits for the sampling:
[ 1]
=== CLAUSES TO BE REFINED ===
0 : kp(X):-in(O1,X),in(O2,X).
Initializing reasoning graph...
Adding edges to the graph...
Converting to PyG object ...
Reasoning Graph(N_atom_nodes=926, N_conj_nodes=1123)
20 train images loaded!!
20 val images loaded!!
40 test images loaded!!
tensor([-0.02958, -1.29465, 0.71283, 0.67050, -1.29465, 0.71283, 0.67049, -0.05069, -0.09208, -0.01750, 0.02436, 0.08260, -2.81074, 2.81680, 0.08260, -2.81074, 2.81680])
==== CLAUSE SCORES ===
2.817 kp(X):-in(O1,X),in(O2,X),shape(O2,triangle).
2.817 kp(X):-in(O1,X),in(O2,X),shape(O1,triangle).
0.713 kp(X):-color(O2,red),in(O1,X),in(O2,X).
0.713 kp(X):-color(O1,red),in(O1,X),in(O2,X).
0.67 kp(X):-color(O1,yellow),in(O1,X),in(O2,X).
0.67 kp(X):-color(O2,yellow),in(O1,X),in(O2,X).
0.083 kp(X):-in(O1,X),in(O2,X),shape(O2,circle).
0.083 kp(X):-in(O1,X),in(O2,X),shape(O1,circle).
0.024 kp(X):-in(O1,X),in(O2,X),same_shape_pair(O1,O2).
-0.018 kp(X):-in(O1,X),in(O2,X),same_color_pair(O1,O2).
-0.03 kp(X):-closeby(O1,O2),in(O1,X),in(O2,X).
-0.051 kp(X):-diff_color_pair(O1,O2),in(O1,X),in(O2,X).
-0.092 kp(X):-diff_shape_pair(O1,O2),in(O1,X),in(O2,X).
-1.295 kp(X):-color(O2,blue),in(O1,X),in(O2,X).
-1.295 kp(X):-color(O1,blue),in(O1,X),in(O2,X).
-2.811 kp(X):-in(O1,X),in(O2,X),shape(O2,square).
-2.811 kp(X):-in(O1,X),in(O2,X),shape(O1,square).
Logits for the sampling:
[ -0.03 -1.29 0.71 0.67 -1.29 0.71 0.67 -0.05 -0.09 -0.02 0.02 0.08 -2.81 2.82 0.08 -2.81 2.82]
=== CLAUSES TO BE REFINED ===
0 : kp(X):-closeby(O1,O2),in(O1,X),in(O2,X).
1 : kp(X):-in(O1,X),in(O2,X),same_color_pair(O1,O2).
2 : kp(X):-diff_color_pair(O1,O2),in(O1,X),in(O2,X).
3 : kp(X):-diff_shape_pair(O1,O2),in(O1,X),in(O2,X).
4 : kp(X):-in(O1,X),in(O2,X),shape(O2,circle).
5 : kp(X):-color(O1,red),in(O1,X),in(O2,X).
6 : kp(X):-color(O1,blue),in(O1,X),in(O2,X).
7 : kp(X):-color(O2,yellow),in(O1,X),in(O2,X).
8 : kp(X):-in(O1,X),in(O2,X),shape(O1,triangle).
9 : kp(X):-in(O1,X),in(O2,X),same_shape_pair(O1,O2).
Initializing reasoning graph...
Adding edges to the graph...
Converting to PyG object ...
Reasoning Graph(N_atom_nodes=926, N_conj_nodes=3505)
20 train images loaded!!
20 val images loaded!!
40 test images loaded!!
tensor([-1.42899e+02, 1.77115e+00, 1.20417e+00, 7.25324e-01, 1.77115e+00, 1.20417e+00, 1.29214e-01, 1.34485e-01, 1.97947e-02, 1.44833e-02, 8.98287e-01, 1.08149e+00, 1.72088e+00, 8.98287e-01, 1.08149e+00, 1.72088e+00, 1.32010e-01, 1.09275e-01, 3.07181e-02, 5.36327e-02, 3.60317e+00, 2.25924e+00,
1.39011e+00, 2.63730e+00, 2.21488e+00, 2.24712e+00, 1.67676e-01, 1.83750e-01, 9.40492e-02, 7.78519e-02, 2.11967e+00, 2.73309e+00, 6.52952e+00, 3.29863e+00, 2.90709e+00, 4.96878e+00, 1.32545e-01, 1.29493e-01, 5.91802e-02, 6.22559e-02, 1.88546e+00, 2.79550e+00, 1.32010e-01, 1.09275e-01,
3.07181e-02, 5.36327e-02, 2.24712e+00, 3.60317e+00, 1.67676e-01, 1.83750e-01, 9.40492e-02, 7.78519e-02, 4.96878e+00, 2.11967e+00, 1.32545e-01, 1.29493e-01, 5.91802e-02, 6.22559e-02, 2.79550e+00, 3.00311e+00, 2.65487e+00, 3.26887e+00, 3.20876e+00, 1.88546e+00, 9.22076e-02, 6.45979e-26,
4.31914e-02, 1.53805e-01, 1.26375e-01, 1.52052e-01, 1.53805e-01, 1.26375e-01, 1.52052e-01, 4.10889e-02, 6.74637e-26, 1.39582e-01, 1.29998e-01, 1.52937e-01, 1.39582e-01, 1.29998e-01, 1.52937e-01, 1.70310e-02, 5.42813e-02, 6.09579e-02, 6.87082e-02, 5.42813e-02, 6.09579e-02, 6.87082e-02,
6.86147e-02, 5.73067e-02, 6.78192e-02, 6.86147e-02, 5.73067e-02, 6.78192e-02])
==== CLAUSE SCORES ===
6.53 kp(X):-color(O1,red),in(O1,X),in(O2,X),shape(O1,triangle).
4.969 kp(X):-color(O1,red),in(O1,X),in(O2,X),shape(O2,triangle).
4.969 kp(X):-color(O2,red),in(O1,X),in(O2,X),shape(O1,triangle).
3.603 kp(X):-color(O2,blue),in(O1,X),in(O2,X),shape(O2,circle).
3.603 kp(X):-color(O1,blue),in(O1,X),in(O2,X),shape(O1,circle).
3.299 kp(X):-color(O1,red),in(O1,X),in(O2,X),shape(O2,circle).
3.269 kp(X):-color(O2,yellow),in(O1,X),in(O2,X),shape(O2,circle).
3.209 kp(X):-color(O2,yellow),in(O1,X),in(O2,X),shape(O2,square).
3.003 kp(X):-color(O2,yellow),in(O1,X),in(O2,X),shape(O1,square).
2.907 kp(X):-color(O1,red),in(O1,X),in(O2,X),shape(O2,square).
2.795 kp(X):-color(O2,yellow),in(O1,X),in(O2,X),shape(O1,circle).
2.795 kp(X):-color(O1,yellow),in(O1,X),in(O2,X),shape(O2,circle).
2.733 kp(X):-color(O1,red),in(O1,X),in(O2,X),shape(O1,square).
2.655 kp(X):-color(O2,yellow),in(O1,X),in(O2,X),shape(O1,triangle).
2.637 kp(X):-color(O1,blue),in(O1,X),in(O2,X),shape(O2,circle).
2.259 kp(X):-color(O1,blue),in(O1,X),in(O2,X),shape(O1,square).
2.247 kp(X):-color(O1,blue),in(O1,X),in(O2,X),shape(O2,triangle).
2.247 kp(X):-color(O2,blue),in(O1,X),in(O2,X),shape(O1,triangle).
2.215 kp(X):-color(O1,blue),in(O1,X),in(O2,X),shape(O2,square).
2.12 kp(X):-color(O2,red),in(O1,X),in(O2,X),shape(O2,circle).
2.12 kp(X):-color(O1,red),in(O1,X),in(O2,X),shape(O1,circle).
1.885 kp(X):-color(O1,yellow),in(O1,X),in(O2,X),shape(O1,triangle).
1.885 kp(X):-color(O2,yellow),in(O1,X),in(O2,X),shape(O2,triangle).
1.771 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X).
1.771 kp(X):-closeby(O1,O2),color(O1,red),in(O1,X),in(O2,X).
1.721 kp(X):-closeby(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
1.721 kp(X):-closeby(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
1.39 kp(X):-color(O1,blue),in(O1,X),in(O2,X),shape(O1,triangle).
1.204 kp(X):-closeby(O1,O2),color(O2,yellow),in(O1,X),in(O2,X).
1.204 kp(X):-closeby(O1,O2),color(O1,yellow),in(O1,X),in(O2,X).
1.081 kp(X):-closeby(O1,O2),in(O1,X),in(O2,X),shape(O1,square).
1.081 kp(X):-closeby(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
0.898 kp(X):-closeby(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
0.898 kp(X):-closeby(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
0.725 kp(X):-closeby(O1,O2),color(O2,blue),in(O1,X),in(O2,X).
0.184 kp(X):-color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X).
0.184 kp(X):-color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X).
0.168 kp(X):-color(O1,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X).
0.168 kp(X):-color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X).
0.154 kp(X):-diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
0.154 kp(X):-diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
0.153 kp(X):-diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
0.153 kp(X):-diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
0.152 kp(X):-diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
0.152 kp(X):-diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
0.14 kp(X):-diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
0.14 kp(X):-diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
0.134 kp(X):-closeby(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X).
0.133 kp(X):-color(O1,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X).
0.133 kp(X):-color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X).
0.132 kp(X):-color(O2,blue),diff_color_pair(O1,O2),in(O1,X),in(O2,X).
0.132 kp(X):-color(O1,blue),diff_color_pair(O1,O2),in(O1,X),in(O2,X).
0.13 kp(X):-diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,square).
0.13 kp(X):-diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
0.129 kp(X):-color(O2,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X).
0.129 kp(X):-color(O1,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X).
0.129 kp(X):-closeby(O1,O2),diff_color_pair(O1,O2),in(O1,X),in(O2,X).
0.126 kp(X):-diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,square).
0.126 kp(X):-diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
0.109 kp(X):-color(O1,blue),diff_shape_pair(O1,O2),in(O1,X),in(O2,X).
0.109 kp(X):-color(O2,blue),diff_shape_pair(O1,O2),in(O1,X),in(O2,X).
0.094 kp(X):-color(O1,red),in(O1,X),in(O2,X),same_color_pair(O1,O2).
0.094 kp(X):-color(O2,red),in(O1,X),in(O2,X),same_color_pair(O1,O2).
0.092 kp(X):-diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X).
0.078 kp(X):-color(O2,red),in(O1,X),in(O2,X),same_shape_pair(O1,O2).
0.078 kp(X):-color(O1,red),in(O1,X),in(O2,X),same_shape_pair(O1,O2).
0.069 kp(X):-in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
0.069 kp(X):-in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,triangle).
0.069 kp(X):-in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,circle).
0.069 kp(X):-in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,circle).
0.068 kp(X):-in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,triangle).
0.068 kp(X):-in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
0.062 kp(X):-color(O2,yellow),in(O1,X),in(O2,X),same_shape_pair(O1,O2).
0.062 kp(X):-color(O1,yellow),in(O1,X),in(O2,X),same_shape_pair(O1,O2).
0.061 kp(X):-in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,square).
0.061 kp(X):-in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,square).
0.059 kp(X):-color(O1,yellow),in(O1,X),in(O2,X),same_color_pair(O1,O2).
0.059 kp(X):-color(O2,yellow),in(O1,X),in(O2,X),same_color_pair(O1,O2).
0.057 kp(X):-in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,square).
0.057 kp(X):-in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,square).
0.054 kp(X):-in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,circle).
0.054 kp(X):-in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,circle).
0.054 kp(X):-color(O2,blue),in(O1,X),in(O2,X),same_shape_pair(O1,O2).
0.054 kp(X):-color(O1,blue),in(O1,X),in(O2,X),same_shape_pair(O1,O2).
0.043 kp(X):-diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2).
0.041 kp(X):-diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2).
0.031 kp(X):-color(O2,blue),in(O1,X),in(O2,X),same_color_pair(O1,O2).
0.031 kp(X):-color(O1,blue),in(O1,X),in(O2,X),same_color_pair(O1,O2).
0.02 kp(X):-closeby(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2).
0.017 kp(X):-in(O1,X),in(O2,X),same_color_pair(O1,O2),same_shape_pair(O1,O2).
0.014 kp(X):-closeby(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2).
0.0 kp(X):-diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2).
0.0 kp(X):-diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2).
-142.899 kp(X):-closeby(O1,O2),color(O1,blue),in(O1,X),in(O2,X).
Logits for the sampling:
[ -142.9 1.77 1.2 0.73 1.77 1.2 0.13 0.13 0.02 0.01 0.9 1.08 1.72 0.9 1.08 1.72 0.13 0.11 0.03 0.05 3.6 2.26 1.39 2.64 2.21 2.25
0.17 0.18 0.09 0.08 2.12 2.73 6.53 3.3 2.91 4.97 0.13 0.13 0.06 0.06 1.89 2.8 0.13 0.11 0.03 0.05 2.25 3.6 0.17 0.18 0.09 0.08
4.97 2.12 0.13 0.13 0.06 0.06 2.8 3 2.65 3.27 3.21 1.89 0.09 0 0.04 0.15 0.13 0.15 0.15 0.13 0.15 0.04 0 0.14 0.13 0.15
0.14 0.13 0.15 0.02 0.05 0.06 0.07 0.05 0.06 0.07 0.07 0.06 0.07 0.07 0.06 0.07]
=== CLAUSES TO BE REFINED ===
0 : kp(X):-color(O1,red),in(O1,X),in(O2,X),shape(O2,square).
1 : kp(X):-color(O1,red),in(O1,X),in(O2,X),shape(O1,triangle).
2 : kp(X):-diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
3 : kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X).
4 : kp(X):-color(O1,blue),in(O1,X),in(O2,X),shape(O2,circle).
5 : kp(X):-color(O1,red),in(O1,X),in(O2,X),shape(O2,circle).
6 : kp(X):-color(O1,blue),in(O1,X),in(O2,X),shape(O1,circle).
7 : kp(X):-color(O2,red),in(O1,X),in(O2,X),shape(O1,triangle).
8 : kp(X):-closeby(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
9 : kp(X):-color(O2,yellow),in(O1,X),in(O2,X),shape(O2,square).
Initializing reasoning graph...
Adding edges to the graph...
Converting to PyG object ...
Reasoning Graph(N_atom_nodes=926, N_conj_nodes=2371)
20 train images loaded!!
20 val images loaded!!
40 test images loaded!!
tensor([-1.52824e+02, 6.44453e-01, 4.45176e+00, 1.45545e+01, 6.93771e+00, 6.80209e+00, 5.62004e-01, 9.30241e+00, 8.44775e-02, 3.70721e-01, 3.93842e-01, 3.08964e-02, 7.67072e-03, 6.93771e+00, 6.80209e+00, 5.62004e-01, 4.75743e-01, 4.23110e-01, 1.45545e+01, 5.78875e+00, 6.23192e-01, 3.65397e-01,
2.04682e-01, 3.89823e-01, 3.29223e-02, 8.38693e-03, 3.73350e-01, 1.76763e-01, 3.27431e-01, 1.34187e-01, 8.21714e-02, 7.70729e-02, 1.28295e-01, 1.19839e-01, 6.83040e-01, 6.39479e-01, 2.99802e-01, 7.95033e-01, 6.37559e-01, 4.04042e-01, 3.61102e-01, 1.70646e-01, 2.07048e-01, 2.48623e-01,
1.72576e-01, 1.02345e-01, 2.03853e-01, 3.27431e-01, 1.96441e-01, 3.06511e-01, 2.10724e-01, 3.39314e-01, 2.28764e-01, 2.98262e-01, 4.70580e-01, 3.09570e-01, 2.10874e-01, 1.99514e-01, 2.26456e-01, 8.79081e-02, 7.71878e-25])
==== CLAUSE SCORES ===
14.555 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),shape(O2,triangle).
14.555 kp(X):-closeby(O1,O2),color(O1,red),in(O1,X),in(O2,X),shape(O1,triangle).
9.302 kp(X):-closeby(O1,O2),color(O1,yellow),in(O1,X),in(O2,X),shape(O2,triangle).
6.938 kp(X):-closeby(O1,O2),color(O1,red),in(O1,X),in(O2,X),shape(O2,circle).
6.938 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),shape(O1,circle).
6.802 kp(X):-closeby(O1,O2),color(O1,red),in(O1,X),in(O2,X),shape(O2,square).
6.802 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),shape(O1,square).
5.789 kp(X):-closeby(O1,O2),color(O2,yellow),in(O1,X),in(O2,X),shape(O2,square).
4.452 kp(X):-closeby(O1,O2),color(O1,blue),in(O1,X),in(O2,X),shape(O2,triangle).
0.795 kp(X):-color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
0.683 kp(X):-color(O1,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
0.644 kp(X):-closeby(O1,O2),color(O1,blue),in(O1,X),in(O2,X),shape(O2,circle).
0.639 kp(X):-color(O1,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
0.638 kp(X):-color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
0.623 kp(X):-closeby(O1,O2),color(O2,yellow),in(O1,X),in(O2,X),shape(O2,triangle).
0.562 kp(X):-closeby(O1,O2),color(O1,red),in(O1,X),in(O2,X),shape(O2,triangle).
0.562 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),shape(O1,triangle).
0.476 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),shape(O2,circle).
0.471 kp(X):-color(O2,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
0.423 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),shape(O2,square).
0.404 kp(X):-color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
0.394 kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X).
0.39 kp(X):-closeby(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
0.373 kp(X):-color(O1,blue),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
0.371 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X).
0.365 kp(X):-closeby(O1,O2),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
0.361 kp(X):-color(O1,red),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
0.339 kp(X):-color(O2,red),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
0.327 kp(X):-color(O1,blue),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
0.327 kp(X):-color(O2,blue),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
0.31 kp(X):-color(O2,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
0.307 kp(X):-color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
0.3 kp(X):-color(O1,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
0.298 kp(X):-color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
0.249 kp(X):-color(O1,red),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,triangle).
0.229 kp(X):-color(O2,red),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,triangle).
0.226 kp(X):-diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
0.211 kp(X):-color(O2,yellow),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,square).
0.211 kp(X):-color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
0.207 kp(X):-color(O1,red),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,square).
0.205 kp(X):-closeby(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
0.204 kp(X):-color(O1,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
0.2 kp(X):-color(O2,yellow),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,square).
0.196 kp(X):-color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
0.177 kp(X):-color(O1,blue),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
0.173 kp(X):-color(O1,red),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,circle).
0.171 kp(X):-color(O1,red),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,circle).
0.134 kp(X):-color(O1,blue),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,circle).
0.128 kp(X):-color(O1,blue),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,circle).
0.12 kp(X):-color(O1,blue),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,circle).
0.102 kp(X):-color(O1,red),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,square).
0.088 kp(X):-diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,circle).
0.084 kp(X):-closeby(O1,O2),color(O2,blue),in(O1,X),in(O2,X),shape(O2,triangle).
0.082 kp(X):-color(O1,blue),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,circle).
0.077 kp(X):-color(O1,blue),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,circle).
0.033 kp(X):-closeby(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,triangle).
0.031 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),same_color_pair(O1,O2).
0.008 kp(X):-closeby(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
0.008 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),same_shape_pair(O1,O2).
0.0 kp(X):-diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,circle).
-152.824 kp(X):-closeby(O1,O2),color(O1,blue),in(O1,X),in(O2,X),shape(O1,circle).
Logits for the sampling:
[ -152.82 0.64 4.45 14.55 6.94 6.8 0.56 9.3 0.08 0.37 0.39 0.03 0.01 6.94 6.8 0.56 0.48 0.42 14.55 5.79 0.62 0.37 0.2 0.39 0.03 0.01
0.37 0.18 0.33 0.13 0.08 0.08 0.13 0.12 0.68 0.64 0.3 0.8 0.64 0.4 0.36 0.17 0.21 0.25 0.17 0.1 0.2 0.33 0.2 0.31 0.21 0.34
0.23 0.3 0.47 0.31 0.21 0.2 0.23 0.09 0]
=== CLAUSES TO BE REFINED ===
0 : kp(X):-closeby(O1,O2),color(O1,yellow),in(O1,X),in(O2,X),shape(O2,triangle).
1 : kp(X):-color(O1,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
2 : kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),shape(O1,square).
3 : kp(X):-closeby(O1,O2),color(O2,yellow),in(O1,X),in(O2,X),shape(O2,square).
4 : kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),shape(O1,circle).
5 : kp(X):-closeby(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
6 : kp(X):-color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
7 : kp(X):-closeby(O1,O2),color(O1,red),in(O1,X),in(O2,X),shape(O1,triangle).
8 : kp(X):-closeby(O1,O2),color(O1,blue),in(O1,X),in(O2,X),shape(O2,triangle).
9 : kp(X):-closeby(O1,O2),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
Initializing reasoning graph...
Adding edges to the graph...
Converting to PyG object ...
Reasoning Graph(N_atom_nodes=926, N_conj_nodes=1891)
20 train images loaded!!
20 val images loaded!!
40 test images loaded!!
tensor([-3.94218e+02, 4.23977e+00, 4.38842e-23, 4.38991e-23, 9.96816e+00, 4.46519e+00, 2.51413e-02, 1.06492e+01, 6.82871e-01, 1.25447e-11, 1.17206e-11, 5.24133e+00, 5.54492e+00, 4.53708e-01, 1.49320e-01, 8.15461e-02, 4.20787e-23, 5.25422e+00, 4.46519e+00, 9.96816e+00, 5.89034e+00, 4.27557e+00,
8.10355e-01, 6.37780e-01, 1.49493e-01, 4.64079e-14, 3.39589e-01, 1.25447e-11, 3.35336e+00, 1.84227e-02, 3.10027e+00, 4.67280e-01, 7.21046e-01, 1.50521e-01, 2.83646e+00, 5.96439e-23, 1.19614e-11, 5.70273e-23, 4.16013e-02, 2.27898e+00, 8.08480e-23, 4.89682e-01, 6.12192e-01, 2.83348e+00,
9.84305e-23])
==== CLAUSE SCORES ===
10.649 kp(X):-closeby(O1,O2),color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
9.968 kp(X):-closeby(O1,O2),color(O1,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
9.968 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
5.89 kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
5.545 kp(X):-closeby(O1,O2),color(O1,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
5.254 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
5.241 kp(X):-closeby(O1,O2),color(O1,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
4.465 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,square).
4.465 kp(X):-closeby(O1,O2),color(O1,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
4.276 kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,square).
4.24 kp(X):-closeby(O1,O2),color(O1,blue),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
3.353 kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
3.1 kp(X):-closeby(O1,O2),color(O2,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
2.836 kp(X):-closeby(O1,O2),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
2.833 kp(X):-color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
2.279 kp(X):-color(O1,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
0.81 kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
0.721 kp(X):-closeby(O1,O2),color(O2,yellow),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,square).
0.683 kp(X):-closeby(O1,O2),color(O1,red),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
0.638 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,circle).
0.612 kp(X):-color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
0.49 kp(X):-color(O1,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,square).
0.467 kp(X):-closeby(O1,O2),color(O2,yellow),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,square).
0.454 kp(X):-closeby(O1,O2),color(O1,yellow),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,triangle).
0.34 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,square).
0.151 kp(X):-closeby(O1,O2),color(O2,yellow),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
0.149 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,square).
0.149 kp(X):-closeby(O1,O2),color(O1,yellow),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
0.082 kp(X):-closeby(O1,O2),color(O2,blue),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
0.042 kp(X):-closeby(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),same_shape_pair(O1,O2),shape(O2,triangle).
0.025 kp(X):-closeby(O1,O2),color(O1,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
0.018 kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
0.0 kp(X):-closeby(O1,O2),color(O1,red),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,triangle).
0.0 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
0.0 kp(X):-closeby(O1,O2),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
0.0 kp(X):-closeby(O1,O2),color(O1,red),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
0.0 kp(X):-closeby(O1,O2),color(O2,red),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,circle).
0.0 kp(X):-color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,triangle).
0.0 kp(X):-color(O1,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,square).
0.0 kp(X):-closeby(O1,O2),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,triangle).
0.0 kp(X):-closeby(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
0.0 kp(X):-closeby(O1,O2),color(O1,blue),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
0.0 kp(X):-closeby(O1,O2),color(O1,blue),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,triangle).
0.0 kp(X):-closeby(O1,O2),color(O2,blue),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
-394.218 kp(X):-closeby(O1,O2),color(O1,blue),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
Logits for the sampling:
[ -394.22 4.24 0 0 9.97 4.47 0.03 10.65 0.68 0 0 5.24 5.54 0.45 0.15 0.08 0 5.25 4.47 9.97 5.89 4.28 0.81 0.64 0.15 0
0.34 0 3.35 0.02 3.1 0.47 0.72 0.15 2.84 0 0 0 0.04 2.28 0 0.49 0.61 2.83 0]
=== CLAUSES TO BE REFINED ===
0 : kp(X):-closeby(O1,O2),color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
1 : kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
2 : kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
3 : kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
4 : kp(X):-closeby(O1,O2),color(O2,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
5 : kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
6 : kp(X):-closeby(O1,O2),color(O1,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
7 : kp(X):-closeby(O1,O2),color(O1,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
8 : kp(X):-color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
9 : kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,square).
Initializing reasoning graph...
Adding edges to the graph...
Converting to PyG object ...
Reasoning Graph(N_atom_nodes=926, N_conj_nodes=1351)
20 train images loaded!!
20 val images loaded!!
40 test images loaded!!
tensor([-4.31858e+02, 1.88325e+00, 2.66330e-21, 1.13034e+01, 2.78595e-21, 8.20429e-11, 8.25801e-01, 2.68203e-21, 1.12869e+01, 1.04460e+01, 2.40136e+01, 2.31212e-21, 2.71849e-21, 3.90464e-13, 8.75097e-11, 1.89817e+00, 2.50705e-01, 2.14886e+00, 2.26139e-21, 2.50704e-21, 5.90220e+00, 2.56420e-21,
1.10192e+00, 8.66520e-01, 2.57956e-21, 3.41576e-21, 3.05989e-21])
==== CLAUSE SCORES ===
24.014 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
11.303 kp(X):-closeby(O1,O2),color(O1,yellow),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
11.287 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
10.446 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,square).
5.902 kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
2.149 kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
1.898 kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,circle).
1.883 kp(X):-closeby(O1,O2),color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
1.102 kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,square).
0.867 kp(X):-closeby(O1,O2),color(O2,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,square).
0.826 kp(X):-closeby(O1,O2),color(O1,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,triangle).
0.251 kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,square).
0.0 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
0.0 kp(X):-closeby(O1,O2),color(O1,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
0.0 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,circle).
0.0 kp(X):-color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
0.0 kp(X):-color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),same_shape_pair(O1,O2),shape(O1,triangle).
0.0 kp(X):-closeby(O1,O2),color(O1,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,triangle).
0.0 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,triangle).
0.0 kp(X):-closeby(O1,O2),color(O1,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,triangle).
0.0 kp(X):-closeby(O1,O2),color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,triangle).
0.0 kp(X):-closeby(O1,O2),color(O2,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,square).
0.0 kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O2,square).
0.0 kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,square).
0.0 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,circle).
0.0 kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O1,circle).
-431.858 kp(X):-closeby(O1,O2),color(O1,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
Logits for the sampling:
[ -431.86 1.88 0 11.3 0 0 0.83 0 11.29 10.45 24.01 0 0 0 0 1.9 0.25 2.15 0 0 5.9 0 1.1 0.87 0 0
0]
=== CLAUSES TO BE REFINED ===
0 : kp(X):-closeby(O1,O2),color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
1 : kp(X):-closeby(O1,O2),color(O1,yellow),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
2 : kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
3 : kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,circle).
4 : kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
5 : kp(X):-color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
6 : kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
7 : kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,square).
8 : kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
9 : kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,square).
Initializing reasoning graph...
Adding edges to the graph...
Converting to PyG object ...
Reasoning Graph(N_atom_nodes=926, N_conj_nodes=1051)
generated clauses:
kp(X):-closeby(O1,O2),color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
kp(X):-closeby(O1,O2),color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
kp(X):-closeby(O1,O2),color(O1,yellow),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
kp(X):-closeby(O1,O2),color(O1,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
kp(X):-closeby(O1,O2),color(O1,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,square).
kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,circle).
kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,square).
kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,square).
kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
kp(X):-closeby(O1,O2),color(O2,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
kp(X):-color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
kp(X):-color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
Loading YOLO Perception Module...
Loading YOLO model...
Pretrained neural predicate closeby have been loaded!
Initializing reasoning graph...
Adding edges to the graph...
Converting to PyG object ...
Reasoning Graph(N_atom_nodes=926, N_conj_nodes=1141)
Parameter containing:
tensor([[0.54881, 0.71519, 0.60276, 0.54488, 0.42365, 0.64589, 0.43759, 0.89177, 0.96366, 0.38344, 0.79173, 0.52889, 0.56804, 0.92560, 0.07104, 0.08713, 0.02022, 0.83262, 0.77816, 0.87001]], requires_grad=True)
[kp(X):-closeby(O1,O2),color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle)., kp(X):-closeby(O1,O2),color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle)., kp(X):-closeby(O1,O2),color(O1,yellow),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle)., kp(X):-closeby(O1,O2),color(O1,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle)., kp(X):-closeby(O1,O2),color(O1,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle)., kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle)., kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,square)., kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle)., kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle)., kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle)., kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,circle)., kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle)., kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle)., kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,square)., kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square)., kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,square)., kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square)., kp(X):-closeby(O1,O2),color(O2,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square)., kp(X):-color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle)., kp(X):-color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).]
40 train images loaded!!
40 val images loaded!!
40 test images loaded!!
loss: 4.528297662734985
loss: 4.363272726535797
loss: 4.392780959606171
loss: 3.125437080860138
loss: 3.4447989463806152
loss: 2.7321572601795197
loss: 2.847614049911499
loss: 2.2939457297325134
loss: 2.4421826601028442
loss: 2.1526046991348267
loss: 2.0909996032714844
loss: 1.8213646411895752
loss: 1.9507822394371033
loss: 1.749041348695755
loss: 1.586152046918869
loss: 1.7040654420852661
loss: 1.5496396124362946
loss: 1.509324461221695
loss: 1.377676323056221
loss: 1.4936670362949371
loss: 1.3022082895040512
loss: 1.4650053083896637
loss: 1.3026680648326874
loss: 1.333385020494461
loss: 1.3177252411842346
loss: 1.3249213099479675
loss: 1.1349694430828094
loss: 1.1716455817222595
loss: 1.1563401222229004
loss: 1.1284889578819275
===== LOGIC PROGRAM =====
C_0: 0.01 kp(X):-closeby(O1,O2),color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
C_1: 0.02 kp(X):-closeby(O1,O2),color(O1,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,triangle).
C_2: 0.01 kp(X):-closeby(O1,O2),color(O1,yellow),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
C_3: 0.01 kp(X):-closeby(O1,O2),color(O1,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
C_4: 0.01 kp(X):-closeby(O1,O2),color(O1,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
C_5: 0.01 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
C_6: 0.01 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,square).
C_7: 0.79 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
C_8: 0.03 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
C_9: 0.01 kp(X):-closeby(O1,O2),color(O2,red),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,triangle).
C_10: 0.01 kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,circle).
C_11: 0.01 kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
C_12: 0.01 kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,circle).
C_13: 0.03 kp(X):-closeby(O1,O2),color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O1,square).
C_14: 0.0 kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
C_15: 0.0 kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),same_shape_pair(O1,O2),shape(O2,square).
C_16: 0.0 kp(X):-closeby(O1,O2),color(O2,yellow),diff_color_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
C_17: 0.01 kp(X):-closeby(O1,O2),color(O2,yellow),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),shape(O2,square).
C_18: 0.01 kp(X):-color(O2,red),diff_color_pair(O1,O2),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
C_19: 0.03 kp(X):-color(O2,red),diff_shape_pair(O1,O2),in(O1,X),in(O2,X),same_color_pair(O1,O2),shape(O1,triangle).
C_20: 1.0 same_shape_pair(X,Y):-shape(X,Z),shape(Y,Z).
C_21: 1.0 same_color_pair(X,Y):-color(X,Z),color(Y,Z).
C_22: 1.0 diff_shape_pair(X,Y):-shape(X,Z),shape(Y,W),diff_shape(Z,W).
C_23: 1.0 diff_color_pair(X,Y):-color(X,Z),color(Y,W),diff_color(Z,W).
Predicting on validation data set...
ths [ inf 0.68481 0.65416 0.11059]
target_set: [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] (40,)
predicted: [ 0.67289 0.66621 0.67507 0.67389 0.68371 0.6657 0.66178 0.6801 0.65416 0.68449 0.67492 0.68481 0.66886 0.6613 0.67268 0.66851 0.66848 0.67557 0.68101 0.67171 0.11077 0.11103 0.11062 0.11059 0.11061 0.11062
0.11062 0.11061 0.11084 0.11098 0.1106 0.11108 0.1106 0.11062 0.1106 0.1106 0.11081 0.11068 0.11068 0.21451] (40,)
accuracy: 0.975
threshold: 0.65415627
recall: [ 0.05 1]
Predicting on test data set...
val acc: 0.975 threashold: 0.65415627 recall: [ 0.05 1]
test acc: 0.9 threashold: 0.65415627 recall: [ 0.95 0.85]