利用可微可满足性求解器实现深度学习与逻辑推理的衔接

satnet的Python项目详细描述


卫星网络•PyPicolabLicense

使用可微可满足性求解器将深度学习和逻辑推理连接起来。

此存储库包含源代码,用于通过Po-Wei WangPriya L. DontiBryan WilderJ. Zico Kolter在ICML2019论文SATNet: Bridging deep learning and logical reasoning using a differentiable satisfiability solver中复制实验。

什么是satnet

SATNet是一个可分(平滑)最大可满足性(Max SAT)求解器,它可以被集成到更大的深度学习系统的回路中。这个(近似)解算器是基于快速坐标下降法求解与Max SAT问题相关的半定程序(SDP)。

卫星网络的工作原理

satnet层以已知maxsat变量的离散或概率赋值为输入,通过maxsat-sdp松弛输出未知变量赋值的猜测,其权值为s。下面显示了描述该层正向通过的示意图。为了得到后向通道,我们通过sdp松弛进行解析微分(详见论文)。

Forward pass

实验概述

我们证明,通过将satnet集成到端到端学习系统中,我们可以以最小监督的方式学习具有挑战性的问题的逻辑结构。特别是,我们可以:

  • 学习奇偶校验函数使用单位监督(对于深层网络来说,这是一项传统的艰巨任务)
  • 仅从示例中学习如何玩9×9数独(原创和排列)
  • 解决一个“视觉数独”问题,该问题将数独谜题的图像映射到相关的逻辑解决方案。(下面显示了一个“视觉数独”输入示例。)

安装

通过PIP

pip install satnet

来源

git clone https://github.com/locuslab/SATNet
cd SATNet && python setup.py install

包依赖关系

conda install -c pytorch tqdm

通过Docker图像

cd docker
sh ./build.sh
sh ./run.sh

运行实验

jupyter笔记本和google colab

Jupyter notebook 以及Google Colab

手动运行它们

获取数据集

可以通过

下载Sudoku datasetParity dataset
wget -cq powei.tw/sudoku.zip && unzip -qq sudoku.zip
wget -cq powei.tw/parity.zip && unzip -qq parity.zip

数独实验(原始、排列和视觉)

python exps/sudoku.py
python exps/sudoku.py --perm
python exps/sudoku.py --mnist --batchSz=50

奇偶性实验

python exps/parity.py --seq=20
python exps/parity.py --seq=40

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么这个代码段不会产生结果?   在OSGi下使用SnakeYaml的java?   java可扩展列表视图能否移动自定义图标(指示器)?   java如何将文件从html保存为pdf   java如何将字符串转换为长字符串   java使用来自无限输入的原始数据并在设备上播放   通过spring数据使用复合PK集合的java查询(Hibernate JPA)   使用Sax解析器通过按钮单击java解析数据所有按钮返回相同的数据,而不是独占数据   JavaSWT:将shell切换到全屏模式   如果IsRechable抛出Java中的IOException,那么应该采取什么适当的操作?为什么?   java重定向到另一个带有@RequestBody的页面   密码学可以组织起来。弹跳船舱。openssl。PEMReader阅读java。安全私钥?   java MYSQL列中的空值要求为通配符   文件io如何将res文件夹链接到java项目