A `Neural = Symbolic` framework for sound and complete weighted real-value logic

Overview

Build Status License

Logical Neural Networks

LNNs are a novel Neuro = symbolic framework designed to seamlessly provide key properties of both neural nets (learning) and symbolic logic (knowledge and reasoning).

  • Every neuron has a meaning as a component of a formula in a weighted real-valued logic, yielding a highly interpretable disentangled representation.
  • Inference is omnidirectional rather than focused on predefined target variables, and corresponds to logical reasoning, including classical first-order logic (FOL) theorem proving as a special case.
  • The model is end-to-end differentiable, and learning minimizes a novel loss function capturing logical contradiction, yielding resilience to inconsistent knowledge.
  • It also enables the open-world assumption by maintaining bounds on truth values which can have probabilistic semantics, yielding resilience to incomplete knowledge.

Quickstart

To install the LNN:

  1. Install GraphViz
  2. Run:
    pip install git+https://github.com/IBM/LNN.git
    

Documentation

Read the Docs Academic Papers Educational Resources Neuro-Symbolic AI API Overview Python Module
Docs Academic Papers Getting Started Neuro-Symbolic AI API Python Module

Citation

If you use Logical Neural Networks for research, please consider citing the reference paper:

@article{riegel2020logical,
  title={Logical neural networks},
  author={Riegel, Ryan and Gray, Alexander and Luus, Francois and Khan, Naweed and Makondo, Ndivhuwo and Akhalwaya, Ismail Yunus and Qian, Haifeng and Fagin, Ronald and Barahona, Francisco and Sharma, Udit and others},
  journal={arXiv preprint arXiv:2006.13155},
  year={2020}
}
Comments
  • pycddlib cannot be installed on MacOS Monterey M1

    pycddlib cannot be installed on MacOS Monterey M1

    The pycddlib installation problem cannot be resolved with the commands provided at the ReadMe unfortunately. I've done some digging at the github page of pycddlib and it seems like the currently available version (2.1.6) isn't compatible with MacOS. It seems like they experimented with new versions that are compatible (2.1.7a0) but aren't available to install yet. I've inferred all these information from the page https://github.com/mcmtroffaes/pycddlib/actions

    So, how can we work around this issue and be able to install & test LNN regardless?

    Currently running the code brew install gmp; env "CFLAGS=-I/usr/local/include -L/usr/local/lib" pip install pycddlib returns the following error:

    `Collecting pycddlib Using cached pycddlib-2.1.6.tar.gz (159 kB) Preparing metadata (setup.py) ... done Building wheels for collected packages: pycddlib Building wheel for pycddlib (setup.py) ... error error: subprocess-exited-with-error

    × python setup.py bdist_wheel did not run successfully. │ exit code: 1 ╰─> [18 lines of output] running bdist_wheel running build running build_ext cythoning cdd.pyx to cdd.c building 'cdd' extension creating build creating build/temp.macosx-10.9-x86_64-3.9 creating build/temp.macosx-10.9-x86_64-3.9/cddlib creating build/temp.macosx-10.9-x86_64-3.9/cddlib/lib-src clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /Users/ub/opt/anaconda3/envs/lnn/include -arch x86_64 -I/Users/ub/opt/anaconda3/envs/lnn/include -fPIC -O2 -isystem /Users/ub/opt/anaconda3/envs/lnn/include -arch x86_64 -I/usr/local/include -L/usr/local/lib -DGMPRATIONAL -Icddlib/lib-src -I/Users/ub/opt/anaconda3/envs/lnn/include/python3.9 -c cdd.c -o build/temp.macosx-10.9-x86_64-3.9/cdd.o clang: warning: argument unused during compilation: '-L/usr/local/lib' [-Wunused-command-line-argument] In file included from cdd.c:749: In file included from cddlib/lib-src/cdd.h:17: cddlib/lib-src/cddmp.h:30:11: fatal error: 'gmp.h' file not found #include "gmp.h" ^~~~~~~ 1 error generated. error: command '/usr/bin/clang' failed with exit code 1 [end of output]

    note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for pycddlib Running setup.py clean for pycddlib Failed to build pycddlib Installing collected packages: pycddlib Running setup.py install for pycddlib ... error error: subprocess-exited-with-error

    × Running setup.py install for pycddlib did not run successfully. │ exit code: 1 ╰─> [18 lines of output] running install running build running build_ext skipping 'cdd.c' Cython extension (up-to-date) building 'cdd' extension creating build creating build/temp.macosx-10.9-x86_64-3.9 creating build/temp.macosx-10.9-x86_64-3.9/cddlib creating build/temp.macosx-10.9-x86_64-3.9/cddlib/lib-src clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /Users/ub/opt/anaconda3/envs/lnn/include -arch x86_64 -I/Users/ub/opt/anaconda3/envs/lnn/include -fPIC -O2 -isystem /Users/ub/opt/anaconda3/envs/lnn/include -arch x86_64 -I/usr/local/include -L/usr/local/lib -DGMPRATIONAL -Icddlib/lib-src -I/Users/ub/opt/anaconda3/envs/lnn/include/python3.9 -c cdd.c -o build/temp.macosx-10.9-x86_64-3.9/cdd.o clang: warning: argument unused during compilation: '-L/usr/local/lib' [-Wunused-command-line-argument] In file included from cdd.c:749: In file included from cddlib/lib-src/cdd.h:17: cddlib/lib-src/cddmp.h:30:11: fatal error: 'gmp.h' file not found #include "gmp.h" ^~~~~~~ 1 error generated. error: command '/usr/bin/clang' failed with exit code 1 [end of output]

    note: This error originates from a subprocess, and is likely not a problem with pip. error: legacy-install-failure

    × Encountered error while trying to install package. ╰─> pycddlib

    note: This is an issue with the package mentioned above, not pip. hint: See above for output from the failure.`

    opened by ubayram 3
  • Throws exception when Predicate is not called

    Throws exception when Predicate is not called

    In [1]: from lnn import Predicate, And
       ...: 
       ...: P = Predicate("P", arity=0)
       ...: 
    
    In [2]: And(P(), P())
    Out[2]: <lnn.symbolic.logic.And at 0x1107e4d30>
    
    In [3]: And(P(), P)
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    Input In [3], in <module>
    ----> 1 And(P(), P)
    
    File ~/Gits/LNN/lnn/symbolic/logic.py:1110, in _NAryNeuron.__init__(self, *formula, **kwds)
       1109 def __init__(self, *formula, **kwds):
    -> 1110     super().__init__(*formula, arity=len(formula), **kwds)
    
    File ~/Gits/LNN/lnn/symbolic/logic.py:976, in _ConnectiveNeuron.__init__(self, *formula, **kwds)
        975 def __init__(self, *formula, **kwds):
    --> 976     super().__init__(*formula, **kwds)
        977     self.neuron = _NeuralActivation(kwds.get("neuron", {}).get("type"))(
        978         self.propositional, self.arity, self.world, **kwds.get("neuron", {})
        979     )
        980     self.func = self.neuron.function(
        981         self.__class__.__name__, direction=Direction.UPWARD
        982     )
    
    File ~/Gits/LNN/lnn/symbolic/logic.py:971, in _ConnectiveFormula.__init__(self, *formula, **kwds)
        970 def __init__(self, *formula: _Formula, **kwds):
    --> 971     super().__init__(*formula, **kwds)
    
    File ~/Gits/LNN/lnn/symbolic/logic.py:156, in _Formula.__init__(self, name, arity, world, *formula, **kwds)
        154     for subformula in formula:
        155         if isinstance(subformula, Predicate):
    --> 156             raise ValueError(
        157                 f"predicate {subformula} inside formula must be called"
        158             )
        160 # formula naming
        161 self.name = (
        162     name
        163     if name
        164     else (f"{self.class_name}_{_Formula.unique_num[self.class_name]}")
        165 )
    
    ValueError: predicate P inside formula must be called
    
    opened by mikulatomas 3
  • Can LNN generates logic rules/hypothesis from the input data (facts)?

    Can LNN generates logic rules/hypothesis from the input data (facts)?

    The given examples and tutorial shows LNN can do the logical reasoning from given data and root formulae. Can LNN generate logic hypothesis from the given data? Like, can it output the possible logic rules induced from background knowledges?

    Thank you.

    opened by midoriririta 2
  • Throw exception for predicates in compound formulae w/o variables

    Throw exception for predicates in compound formulae w/o variables

    Compound formulae expect predicates to be called (call)

    e.g. given:

    P = Predicate('P')
    Q = Predicate('Q', arity=2)
    

    correct

    And(P(x), Q(x, y))
    

    incorrect

    And(P, Q)
    

    not having called compound formulae is only the syntax for propositional inputs e.g.

    P = Proposition('P')
    Q = Proposition('Q')
    And(P, Q)
    

    right now it seems to fail silently by reverting to the default configuration

    good first issue 
    opened by NaweedAghmad 2
  • add **kwds to argument list of Not.upward

    add **kwds to argument list of Not.upward

    When **kwds is not part of the argument list, the following error is thrown when training a network which contains a negation: "TypeError: upward() got an unexpected keyword argument 'losses'"

    This script generates this error in the original code: https://drive.google.com/file/d/16mUagX7-zZw4iF8x972D6B-Ct9_l0cWB/view?usp=sharing

    opened by mwbaert 2
  • FIX: 1 inconsistency in add_knowledge sentence in examples/reasoning.md

    FIX: 1 inconsistency in add_knowledge sentence in examples/reasoning.md

    Hello Team, There are 2 out of 3 predicates in add_knowledge sentence, it would be best to add all 3 of them or none. I made a fix to add none.

    Signed-off-by: michal [email protected]

    opened by michalkordyzon 1
  • fix: update README for Windows Graphviz install

    fix: update README for Windows Graphviz install

    Signed-off-by: HannaAbiAkl [email protected]

    Update README for Windows Graphviz conda install as per official PyGraphviz documentation: https://pygraphviz.github.io/documentation/stable/install.html

    opened by HannaAbiAkl 1
  • Quickstart instructions update

    Quickstart instructions update

    Quickstart instructions

    "3. Install the LNN as a library: pip install git+https://github.com/IBM/LNN.git"

    should be updated to agree with the Box Note instructions;

    "3. Install the LNN as a library: pip install git+https://github.com/GitHubUserName/LNN.git"

    opened by tingey 1
  • LNN fails installing pygraphviz on windows

    LNN fails installing pygraphviz on windows

    If you run in this error running the command pip install git+https://github.com/IBM/LNN.git on Windows

      Building wheel for pygraphviz (setup.py) ... error
      ERROR: Command errored out with exit status 1:
      ....
    

    install pygraphvizwith the command below and then install LNN

    pip install --global-option=build_ext --global-option="-IC:\Program Files\Graphviz\include" --global-option="-LC:\Program Files\Graphviz\lib" pygraphviz
    
    opened by univisionsrl 1
  • Refactor **kwds to **kwargs

    Refactor **kwds to **kwargs

    Hi,

    **kwargs is probbaly more common in Python projects, but even standard libs sometimes uses **kwds. So feel free to close this PR if you prefer **kwds.

    Tomas

    opened by mikulatomas 1
  • PEP: imports

    PEP: imports

    Hi,

    I have reordered imports according to PEP8 (https://www.python.org/dev/peps/pep-0008/#imports). Not sure if there is some specific reason to have them in original order, feel free to close this PR :)

    Also I can also fix (if needed) following:

    • there are places where import itertools and same time from itertools import chain is used in other file, maybe first should be preferred?
    • in general I am missing more blank lines in the code, maybe some strict formatter can be use (like black)?

    TM

    opened by mikulatomas 1
  • Runtime questions

    Runtime questions

    Hi there, sorry for another question:

    This is the full program for the Missle logic program:

    from lnn import (Predicate, Variable, Join, And,
                     Exists, Implies, ForAll, Model, Fact, World)
    
    model = Model()  # Instantiate a model.
    x, y, z, w = map(Variable, ['x', 'y', 'z', 'w'])
    
    missile = Predicate('missile')
    american = Predicate('american')
    hostile = Predicate('hostile')
    criminal = Predicate('criminal')
    weapon = Predicate('weapon')
    owns = Predicate('owns', 2)    # binary predicate
    enemy = Predicate('enemy', 2)  # binary predicate
    sells = Predicate('sells', 3)  # ternary predicate
    
    americaenemyishostile = ForAll(x, Implies(enemy(x, 'america'), hostile(x)))
    missleareweapon = ForAll(x, Implies(missile(x), weapon(x)))
    nonomisslesoldbywest = ForAll(x, Implies(And(missile(x), owns('nono', x)),sells('west', x, 'nono')))
    youarecriminalif = ForAll(x,y,z, Implies(And(american(x), sells(x,y,z), weapon(y), hostile(z)), criminal(x)))
    
    query = Exists(x, criminal(x))
    model.add_knowledge(americaenemyishostile, missleareweapon, nonomisslesoldbywest, youarecriminalif, query)
    
    model.add_data({
        owns: {('nono', 'm1'): Fact.TRUE},
        missile: {'m1': Fact.TRUE},
        american: {'west': Fact.TRUE},
        enemy: {('nono', 'america'): Fact.TRUE, ('wakanda', 'america'): Fact.TRUE, ('gotham', 'america'): Fact.TRUE},
    })
    
    model[query].print()
    model.infer()
    model[query].print()
    model[query].true_groundings
    

    Running with

    model.add_data({
        owns: {('nono', 'm1'): Fact.TRUE},
        missile: {'m1': Fact.TRUE},
        american: {'west': Fact.TRUE},
        enemy: {('nono', 'america'): Fact.TRUE, ('wakanda', 'america'): Fact.TRUE, ('gotham', 'america'): Fact.TRUE},
    })
    

    yields the correct result in less than 2s:

    OPEN Exists: (∃0, criminal(0))                              TRUE (1.0, 1.0)
    
    {'west'}
    

    However, running with two extra facts that should not impact the results

    model.add_data({
        owns: {('nono', 'm1'): Fact.TRUE}, ('wakanda', 'm2'): Fact.TRUE}, ('gotham', 'm3'): Fact.TRUE}
        missile: {'m1': Fact.TRUE, 'm2': Fact.TRUE, 'm3': Fact.TRUE},
        american: {'west': Fact.TRUE},
        enemy: {('nono', 'america'): Fact.TRUE, ('wakanda', 'america'): Fact.TRUE, ('gotham', 'america'): Fact.TRUE},
    })
    

    stalls for > 1hr.

    Is this common and do you know if LNN in general will be able to scale to much larger problems?

    opened by loc-trinh 0
  • Clarification on bounds

    Clarification on bounds

    From the tutorial, it seems like a CONTRADICTION is when L > U: however, the results bellow happens quite often when L > U is considered APPROX TRUE.

    Can someone help to clarify this?

    Model before inference:


                                LNN Model
    

    OPEN And: (A ∧ B) APPROX_TRUE (0.51, 0.52)

    OPEN Proposition: B APPROX_TRUE (0.9, 0.99)

    OPEN Proposition: A APPROX_TRUE (0.9, 0.99)


    Model after inference:


                                LNN Model
    

    OPEN And: (A ∧ B) APPROX_TRUE (0.8, 0.52)

    OPEN Proposition: B APPROX_TRUE (0.9, 0.99)

    OPEN Proposition: A APPROX_TRUE (0.9, 0.99)

    opened by loc-trinh 2
  • Feature Request: Add the other jupyter notebook tutorials in the tutorials folder.

    Feature Request: Add the other jupyter notebook tutorials in the tutorials folder.

    Hello, I am interested in doing a final year project for my bachelor's degree in this topic, and I need more guidance and tutorials.

    Within the tutorials/README.md of this repo, an image of 9 jupyter notebook tutorials is shown, but the repo only has 3.

    What happened to the other .ipynb files? Furthermore is there a tutorial on applying LNN's to knowledge graphs?

    Thank you.

    opened by deror007 0
  • Error running Smoking Example

    Error running Smoking Example

    From the Usage page I have abstracted the following code

    from lnn import Predicates
    from lnn import Variables
    from lnn import Implies, Equivalent
    from lnn import World
    from lnn import Fact
    
    Smokes, Cancer = Predicates('Smokes', 'Cancer')
    Friends = Predicates('Friends', arity=2)
    
    x, y = Variables('x', 'y')
    
    Smoking_causes_Cancer = Implies(Smokes(x), Cancer(x))
    Smokers_befriend_Smokers = Implies(Friends(x, y), Equivalent(Smokes(x), Smokes(y)))
    
    formulae = [
        Smoking_causes_Cancer,
        Smokers_befriend_Smokers
    ]
    model.add_knowledge(*formulae, world=World.AXIOM)
    
    # add data to the model
    model.add_data({
        Friends: {
            ('Anna', 'Bob'): Fact.TRUE,
            ('Bob', 'Anna'): Fact.TRUE,
            ('Anna', 'Edward'): Fact.TRUE,
            ('Edward', 'Anna'): Fact.TRUE,
            ('Anna', 'Frank'): Fact.TRUE,
            ('Frank', 'Anna'): Fact.TRUE,
            ('Bob', 'Chris'): Fact.TRUE},
        Smokes.name: {
            'Anna': Fact.TRUE,
            'Edward': Fact.TRUE,
            'Frank': Fact.TRUE,
            'Gary': Fact.TRUE},
        Cancer.name: {
            'Anna': Fact.TRUE,
            'Edward': Fact.TRUE}
        })
    model.print()
    

    I added a comma in the formulae. When I run this, I get

    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    Cell In [17], line 27
         23 model.add_knowledge(*formulae, world=World.AXIOM)
         26 # add data to the model
    ---> 27 model.add_data({
         28     Friends: {
         29         ('Anna', 'Bob'): Fact.TRUE,
         30         ('Bob', 'Anna'): Fact.TRUE,
         31         ('Anna', 'Edward'): Fact.TRUE,
         32         ('Edward', 'Anna'): Fact.TRUE,
         33         ('Anna', 'Frank'): Fact.TRUE,
         34         ('Frank', 'Anna'): Fact.TRUE,
         35         ('Bob', 'Chris'): Fact.TRUE},
         36     Smokes.name: {
         37         'Anna': Fact.TRUE,
         38         'Edward': Fact.TRUE,
         39         'Frank': Fact.TRUE,
         40         'Gary': Fact.TRUE},
         41     Cancer.name: {
         42         'Anna': Fact.TRUE,
         43         'Edward': Fact.TRUE}
         44     })
         45 model.print()
    
    File ~/src/pas-notebooks/env/lib64/python3.9/site-packages/lnn/model.py:346, in Model.add_data(self, data)
        344 for formula, fact in data.items():
        345     if not isinstance(formula, Formula):
    --> 346         raise TypeError(
        347             "formula expected of type Formula, received "
        348             f"{formula.__class__.__name__}"
        349         )
        350     _exceptions.AssertFormulaInModel(self, formula)
        351     if formula.propositional:
    
    TypeError: formula expected of type Formula, received str
    
    opened by buddha314 1
  • Creating example of LNNs with Traditional NN

    Creating example of LNNs with Traditional NN

    Hi, We had a discussion with the IBM Neuro-Symbolic AI Team regarding contributing to LNN. One particular application type I became interested in is using them with traditional NN-based approaches. I suggest LNN repository should have some examples with public datasets like keras and Theseus. These examples help practitioners get a head-first experience of the framework. I look forward to contributing such one-click examples. Thanks.

    opened by anas-r-dev 1
Owner
International Business Machines
International Business Machines
Peek-a-Boo: What (More) is Disguised in a Randomly Weighted Neural Network, and How to Find It Efficiently

Peek-a-Boo: What (More) is Disguised in a Randomly Weighted Neural Network, and How to Find It Efficiently This repository is the official implementat

VITA 4 Dec 20, 2022
ATOMIC 2020: On Symbolic and Neural Commonsense Knowledge Graphs

(Comet-) ATOMIC 2020: On Symbolic and Neural Commonsense Knowledge Graphs Paper Jena D. Hwang, Chandra Bhagavatula, Ronan Le Bras, Jeff Da, Keisuke Sa

AI2 152 Dec 27, 2022
Source code and Dataset creation for the paper "Neural Symbolic Regression That Scales"

NeuralSymbolicRegressionThatScales Pytorch implementation and pretrained models for the paper "Neural Symbolic Regression That Scales", presented at I

null 35 Nov 25, 2022
DeepProbLog is an extension of ProbLog that integrates Probabilistic Logic Programming with deep learning by introducing the neural predicate.

DeepProbLog DeepProbLog is an extension of ProbLog that integrates Probabilistic Logic Programming with deep learning by introducing the neural predic

KU Leuven Machine Learning Research Group 94 Dec 18, 2022
Neural Logic Inductive Learning

Neural Logic Inductive Learning This is the implementation of the Neural Logic Inductive Learning model (NLIL) proposed in the ICLR 2020 paper: Learn

null 36 Nov 28, 2022
A PyTorch Implementation of "Neural Arithmetic Logic Units"

Neural Arithmetic Logic Units [WIP] This is a PyTorch implementation of Neural Arithmetic Logic Units by Andrew Trask, Felix Hill, Scott Reed, Jack Ra

Kevin Zakka 181 Nov 18, 2022
Theano is a Python library that allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently. It can use GPUs and perform efficient symbolic differentiation.

============================================================================================================ `MILA will stop developing Theano <https:

null 9.6k Dec 31, 2022
Theano is a Python library that allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently. It can use GPUs and perform efficient symbolic differentiation.

============================================================================================================ `MILA will stop developing Theano <https:

null 9.6k Jan 6, 2023
Theano is a Python library that allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently. It can use GPUs and perform efficient symbolic differentiation.

============================================================================================================ `MILA will stop developing Theano <https:

null 9.3k Feb 12, 2021
Data and Code for ACL 2021 Paper "Inter-GPS: Interpretable Geometry Problem Solving with Formal Language and Symbolic Reasoning"

Introduction Code and data for ACL 2021 Paper "Inter-GPS: Interpretable Geometry Problem Solving with Formal Language and Symbolic Reasoning". We cons

Pan Lu 81 Dec 27, 2022
PyBullet CartPole and Quadrotor environments—with CasADi symbolic a priori dynamics—for learning-based control and reinforcement learning

safe-control-gym Physics-based CartPole and Quadrotor Gym environments (using PyBullet) with symbolic a priori dynamics (using CasADi) for learning-ba

Dynamic Systems Lab 300 Dec 28, 2022
Applications using the GTN library and code to reproduce experiments in "Differentiable Weighted Finite-State Transducers"

gtn_applications An applications library using GTN. Current examples include: Offline handwriting recognition Automatic speech recognition Installing

Facebook Research 68 Dec 29, 2022
Implementation of Advantage-Weighted Regression: Simple and Scalable Off-Policy Reinforcement Learning

advantage-weighted-regression Implementation of Advantage-Weighted Regression: Simple and Scalable Off-Policy Reinforcement Learning, by Peng et al. (

Omar D. Domingues 1 Dec 2, 2021
Multiple-criteria decision-making (MCDM) with Electre, Promethee, Weighted Sum and Pareto

EasyMCDM - Quick Installation methods Install with PyPI Once you have created your Python environment (Python 3.6+) you can simply type: pip3 install

Labrak Yanis 6 Nov 22, 2022
Official implementation for "Symbolic Learning to Optimize: Towards Interpretability and Scalability"

Symbolic Learning to Optimize This is the official implementation for ICLR-2022 paper "Symbolic Learning to Optimize: Towards Interpretability and Sca

VITA 8 Dec 19, 2022
A complete end-to-end demonstration in which we collect training data in Unity and use that data to train a deep neural network to predict the pose of a cube. This model is then deployed in a simulated robotic pick-and-place task.

Object Pose Estimation Demo This tutorial will go through the steps necessary to perform pose estimation with a UR3 robotic arm in Unity. You’ll gain

Unity Technologies 187 Dec 24, 2022
Monocular Depth Estimation - Weighted-average prediction from multiple pre-trained depth estimation models

merged_depth runs (1) AdaBins, (2) DiverseDepth, (3) MiDaS, (4) SGDepth, and (5) Monodepth2, and calculates a weighted-average per-pixel absolute dept

Pranav 39 Nov 21, 2022
Code for paper: Group-CAM: Group Score-Weighted Visual Explanations for Deep Convolutional Networks

Group-CAM By Zhang, Qinglong and Rao, Lu and Yang, Yubin [State Key Laboratory for Novel Software Technology at Nanjing University] This repo is the o

zhql 98 Nov 16, 2022
Automatic differentiation with weighted finite-state transducers.

GTN: Automatic Differentiation with WFSTs Quickstart | Installation | Documentation What is GTN? GTN is a framework for automatic differentiation with

null 100 Dec 29, 2022