如何将Python外部变量传入ProbLog?DeepProbLog神经符号应用需求
在DeepProbLog中传入Python变量的可行方法
DeepProbLog作为ProbLog与深度学习框架的结合工具,直接支持多种将Python变量传入ProbLog程序的方式,以下是几种实用方案:
1. 动态生成ProbLog事实注入
对于普通数值、字符串等静态变量,可直接在Python中生成ProbLog格式的事实语句,拼接进基础ProbLog程序后加载运行。示例代码:
from deepproblog import DeepProbLog # 基础ProbLog逻辑 base_program = """ query(valid(X, Y)). valid(X, Y) :- num_x(X), num_y(Y), X >= 0, Y <= 1.0. """ # Python变量 x_val = 3 y_val = 0.7 # 生成包含变量值的ProbLog事实 dynamic_facts = f""" num_x({x_val}). num_y({y_val}). """ # 合并并运行 full_program = base_program + dynamic_facts engine = DeepProbLog(full_program) result = engine.query("valid(X, Y)") print(result)
这种方式适合传递无需实时更新的离散/连续数值变量。
2. 通过神经谓词传递张量变量
如果变量是PyTorch张量(深度学习场景常用),可借助DeepProbLog的NeuralPredicate,在查询时通过substitutions参数直接传入张量元素。示例代码:
import torch from deepproblog.model import Model from deepproblog.neural_networks import TorchNetwork # 定义简单PyTorch网络 class ScoreNet(torch.nn.Module): def __init__(self): super().__init__() self.fc = torch.nn.Linear(2, 1) def forward(self, x): return torch.sigmoid(self.fc(x)) # 初始化DeepProbLog模型 net = TorchNetwork("score_net", ScoreNet(), batching=True) model = Model(""" query(score_result(Res)). score_result(Res) :- neural(score_net, [A, B], Res). """, [net]) # Python张量变量 input_tensor = torch.tensor([[1.2, 3.4]]) # 传入变量查询 result = model.query("score_result(Res)", substitutions={"A": input_tensor[0][0], "B": input_tensor[0][1]}) print(result)
该方案适用于需要深度学习处理的连续型变量。
3. 注册外部Python函数调用变量
对于需要动态获取的Python变量(比如实时更新的全局变量),可将变量封装为Python函数,在ProbLog中通过external关键字调用。示例代码:
from deepproblog import DeepProbLog # Python全局变量与对应函数 current_threshold = 5 def get_threshold(): return current_threshold # ProbLog程序定义外部函数调用 problog_code = """ external(get_threshold/0). query(check_threshold(V)). check_threshold(V) :- V = get_threshold(). """ # 注册并运行 engine = DeepProbLog(problog_code) engine.register_external_function("get_threshold", get_threshold) result = engine.query("check_threshold(V)") print(result)
这种方式适合变量值会动态变化的场景,ProbLog运行时会实时调用Python函数获取最新值。
内容的提问来源于stack exchange,提问作者Joaquin
相关产品推荐
相关产品推荐

