A Python implementation of active inference for Markov Decision Processes

Related tags

Deep Learningpymdp
Overview

A Python package for simulating Active Inference agents in Markov Decision Process environments. Please see our companion preprint on arxiv for an overview of the package, its structure, and a mathematical overview of active inference in partially-observable Markov Decision Processes: "pymdp: A Python library for active inference in discrete state spaces".

This package is hosted on the infer-actively GitHub organization, which was built with the intention of hosting open-source active inference and free-energy-principle related software.

Most of the low-level mathematical operations are NumPy ports of their equivalent functions from the SPM implementation in MATLAB. We have benchmarked and validated most of these functions against their SPM counterparts.

Status

status PyPI version

pymdp in action

Here's a visualization of pymdp agents in action. One of the defining features of active inference agents is the drive to maximize "epistemic value" (i.e. curiosity). Equipped with such a drive in environments with uncertain yet disclosable hidden structure, active inference can ultimately allow agents to simultaneously learn about the environment as well as maximize reward.

The simulation below (see associated notebook here) demonstrates what might be called "epistemic chaining," where an agent (here, analogized to a mouse seeking food) forages for a chain of cues, each of which discloses the location of the subsequent cue in the chain. The final cue (here, "Cue 2") reveals the location a hidden reward. This is similar in spirit to "behavior chaining" used in operant conditioning, except that here, each successive action in the behavioral sequence doesn't need to be learned through instrumental conditioning. Rather, active inference agents will naturally forage the sequence of cues based on an intrinsic desire to disclose information. This ultimately leads the agent to the hidden reward source in the fewest number of moves as possible.

You can run the code behind simulating tasks like this one and others in the Examples section of the official documentation.


Cue 2 in Location 1, Reward on Top


Cue 2 in Location 3, Reward on Bottom

Quick-start: Installation and Usage

In order to use pymdp to build and develop active inference agents, we recommend installing it with the the package installer pip, which will install pymdp locally as well as its dependencies. This can also be done in a virtual environment (e.g. with venv).

When pip installing pymdp, use the package name inferactively-pymdp:

pip install inferactively-pymdp

Once in Python, you can then directly import pymdp, its sub-packages, and functions.

import pymdp
from pymdp import utils
from pymdp.agent import Agent

num_obs = [3, 5] # observation modality dimensions
num_states = [3, 2, 2] # hidden state factor dimensions
num_controls = [3, 1, 1] # control state factor dimensions
A_matrix = utils.random_A_matrix(num_obs, num_states) # create sensory likelihood (A matrix)
B_matrix = utils.random_B_matrix(num_states, num_controls) # create transition likelihood (B matrix)

C_vector = utils.obj_array_uniform(num_obs) # uniform preferences

# instantiate a quick agent using your A, B and C arrays
my_agent = Agent( A = A_matrix, B = B_matrix, C = C_vector)

# give the agent a random observation and get the optimized posterior beliefs

observation = [1, 4] # a list specifying the indices of the observation, for each observation modality

qs = my_agent.infer_states(observation) # get posterior over hidden states (a multi-factor belief)

# Do active inference

q_pi, neg_efe = my_agent.infer_policies() # return the policy posterior and return (negative) expected free energies of each policy as well

action = my_agent.sample_action() # sample an action

# ... and so on ...

Getting started / introductory material

We recommend starting with the Installation/Usage section of the official documentation for the repository, which provides a series of useful pedagogical notebooks for introducing you to active inference and how to build agents in pymdp.

For new users to pymdp, we specifically recommend stepping through following three Jupyter notebooks (can also be used on Google Colab):

Special thanks to Beren Millidge and Daphne Demekas for their help in constructing these tutorials, which were originally based on a set of tutorial notebooks written by Alec Tschantz.

Contributing

This package is under active development. If you would like to contribute, please refer to this file

If you would like to contribute to this repo, we recommend using venv and pip

cd <path_to_repo_fork>
python3 -m venv env
source env/bin/activate
pip install -r requirements.txt
pip install -e ./ # This will install pymdp as a local dev package

You should then be able to run tests locally with pytest

pytest test

Authors

Comments
  • einsum while calculating free energy

    einsum while calculating free energy

    hi, guys, i have a question about calculating the free energy. While calculating einsum, why only sum to the first dim:

    arg_list = [X, list(range(X.ndim))] + list(chain(*([x[xdim_i],[dims[xdim_i]]] for xdim_i in range(len(x))))) + [[0]]

    and then use:

    spm_dot(likelihood, qs)[0]

    to fetch only the first level of s0 (suppose hidden state s is factorized as s0, s1, ... ) ?

    in my opinion, we should sum over all the tensor by removing the last + [[0]] and the Y should just be a scalar. am I totally wrong, if i am, please correct me, thanks a lot!

    opened by lqiang2003cn 4
  • Is it possible to do model fitting using this package?

    Is it possible to do model fitting using this package?

    Hi~

    I want to know if this package can fit model to behavior datas collected by my experiment? Or will there be future plans to implement this functionality?

    Thanks~

    question 
    opened by yaowang1111 4
  • Bump pillow from 8.2.0 to 8.3.2

    Bump pillow from 8.2.0 to 8.3.2

    Bumps pillow from 8.2.0 to 8.3.2.

    Release notes

    Sourced from pillow's releases.

    8.3.2

    https://pillow.readthedocs.io/en/stable/releasenotes/8.3.2.html

    Security

    • CVE-2021-23437 Raise ValueError if color specifier is too long [hugovk, radarhere]

    • Fix 6-byte OOB read in FliDecode [wiredfool]

    Python 3.10 wheels

    • Add support for Python 3.10 #5569, #5570 [hugovk, radarhere]

    Fixed regressions

    • Ensure TIFF RowsPerStrip is multiple of 8 for JPEG compression #5588 [kmilos, radarhere]

    • Updates for ImagePalette channel order #5599 [radarhere]

    • Hide FriBiDi shim symbols to avoid conflict with real FriBiDi library #5651 [nulano]

    8.3.1

    https://pillow.readthedocs.io/en/stable/releasenotes/8.3.1.html

    Changes

    8.3.0

    https://pillow.readthedocs.io/en/stable/releasenotes/8.3.0.html

    Changes

    ... (truncated)

    Changelog

    Sourced from pillow's changelog.

    8.3.2 (2021-09-02)

    • CVE-2021-23437 Raise ValueError if color specifier is too long [hugovk, radarhere]

    • Fix 6-byte OOB read in FliDecode [wiredfool]

    • Add support for Python 3.10 #5569, #5570 [hugovk, radarhere]

    • Ensure TIFF RowsPerStrip is multiple of 8 for JPEG compression #5588 [kmilos, radarhere]

    • Updates for ImagePalette channel order #5599 [radarhere]

    • Hide FriBiDi shim symbols to avoid conflict with real FriBiDi library #5651 [nulano]

    8.3.1 (2021-07-06)

    • Catch OSError when checking if fp is sys.stdout #5585 [radarhere]

    • Handle removing orientation from alternate types of EXIF data #5584 [radarhere]

    • Make Image.array take optional dtype argument #5572 [t-vi, radarhere]

    8.3.0 (2021-07-01)

    • Use snprintf instead of sprintf. CVE-2021-34552 #5567 [radarhere]

    • Limit TIFF strip size when saving with LibTIFF #5514 [kmilos]

    • Allow ICNS save on all operating systems #4526 [baletu, radarhere, newpanjing, hugovk]

    • De-zigzag JPEG's DQT when loading; deprecate convert_dict_qtables #4989 [gofr, radarhere]

    • Replaced xml.etree.ElementTree #5565 [radarhere]

    ... (truncated)

    Commits
    • 8013f13 8.3.2 version bump
    • 23c7ca8 Update CHANGES.rst
    • 8450366 Update release notes
    • a0afe89 Update test case
    • 9e08eb8 Raise ValueError if color specifier is too long
    • bd5cf7d FLI tests for Oss-fuzz crash.
    • 94a0cf1 Fix 6-byte OOB read in FliDecode
    • cece64f Add 8.3.2 (2021-09-02) [CI skip]
    • e422386 Add release notes for Pillow 8.3.2
    • 08dcbb8 Pillow 8.3.2 supports Python 3.10 [ci skip]
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 4
  • Action indices need to be cast to `int` in T-maze learning demo

    Action indices need to be cast to `int` in T-maze learning demo

    Thanks @conorheins and @Arun-Niranjan, things getting better. The A-matrix worked with your my-A-matrix but B-matrix was not fixed I think. A sample pandas matrix might help. An issue remained with T-maze-learning (T-maze-demo works fine), that I pase it here but I can open an issue if needed. image

    Best

    Originally posted by @osaaso3 in https://github.com/infer-actively/pymdp/issues/26#issuecomment-877800539

    bug 
    opened by conorheins 4
  • Fix warnings in unit tests

    Fix warnings in unit tests

    This PR adds the optional dtype=object argument to np.array(...) when the input lists/arrays are of different dimensions in order to suppress warnings when running tests.

    We should revisit how arrays of different dimensions are handled in general, it is likely that an abstraction exists which will be safer and easier to use/test

    opened by Arun-Niranjan 4
  • Sampling action when using deep policy

    Sampling action when using deep policy

    Hi, thank you for this package I'm really enjoying learning about active inference.

    I deeply appreciate the contributors to this package.

    However, I have a question when I tried to implement the explore-exploit task in this article (Smith et al., A step-by-step tutorial on active inference and its application to empirical data, https://doi.org/10.1016/j.jmp.2021.102632) which is already implemented in MATLAB and "pymdp".

    I tried to run a loop for active inference of deep policy (two time-steps) according to the "complete recipe for active inference" as written in the "pymdp" tutorial notebook, but I found that the "sample_action" method of the "Agent" class only sample action from the first timestep of policy (each policy has the shape of (2,2), the first dim is the number of timesteps and the second dim is the number of factors) using "control.sample_policy" function as below:

    (line 674-675, control.py)

    for factor_i in range(num_factors):
         selected_policy[factor_i] = policies[policy_idx][0, factor_i]
    

    My setting of the agent class was:

    timepoints = [0,1,2]
    agent = Agent(
        A = A_gm,
        B = B,
        C = C,
        D = D_gm,
        E = E,
        pA = pA,
        pD = pD,
        policies = policies,
        policy_len = policies[0].shape[0],
        inference_horizon = len(timepoints),  
        inference_algo="MMP",
        sampling_mode="full",
        modalities_to_learn=[1],
        use_BMA = True,
        policy_sep_prior = False,
    )
    

    In my thought, to sample the action of the other timestep in each policy, line 675 would be better if changed like this:

    selected_policy[factor_i] = policies[policy_idx][timestep, factor_i]
    

    If I didn't understand this package well, then please let me know how to correct it.

    Thank you!

    good first issue 
    opened by sunghwan87 2
  • Incorrect error message when ensuring normalized A/B matrices

    Incorrect error message when ensuring normalized A/B matrices

    In line 95 of agent.py

    assert utils.is_normalized(self.B), "A matrix is not normalized (i.e. A.sum(axis = 0) must all equal 1.0"

    I believe this is an error, as it should be the B matrix not the A matrix.

    Originally posted by @mahault in https://github.com/infer-actively/pymdp/discussions/4#discussioncomment-2575940

    better_errors 
    opened by conorheins 2
  • Paper branch

    Paper branch

    • JOSS manuscript now in paper folder
    • initial changes based on reviews from @seankmartin (added Summary section to paper, added documentation for Agent API)
    • other minor tweaks (some minor variable renaming in the internals of Agent)
    opened by conorheins 2
  • Note Arxiv reference

    Note Arxiv reference

    The following new Arxiv reference may be noted in the readme and/or docs, etc.:

    https://arxiv.org/abs/2201.03904

    pymdp: A Python library for active inference in discrete state spaces

    documentation enhancement 
    opened by impredicative 2
  • A matrix stub bug

    A matrix stub bug

    Hi, Will this new method fix the error I get with A-Matrix and B-Matrix examples?


    AssertionError Traceback (most recent call last) in ----> 1 A = utils.convert_A_stub_to_ndarray(A_stub, model_labels)

    ~\pymdp\core\utils.py in convert_A_stub_to_ndarray(A_stub, model_labels) 490 for g, modality_name in enumerate(model_labels['observations'].keys()): 491 A[g] = A_stub.loc[modality_name].to_numpy().reshape(num_obs[g], *num_states) --> 492 assert (A[g].sum(axis=0) == 1.0).all(), 'A matrix not normalized! Check your initialization....\n' 493 494 return A

    AssertionError: A matrix not normalized! Check your initialization....

    or unrelated? Thanks

    Originally posted by @osaaso3 in https://github.com/infer-actively/pymdp/issues/26#issuecomment-876492249

    bug 
    opened by conorheins 2
  • lack of time symmetry in run_mmp when creating messages

    lack of time symmetry in run_mmp when creating messages

    When going through mmpwith @conorheins yesterday, I noticed this section:

                    # past message
                    if t == 0:
                        lnB_past = spm_log(prior[f])
                    else:
                        past_msg = B[f][:, :, int(policy[t - 1, f])].dot(qs_seq[t - 1][f])
                        lnB_past = spm_log(past_msg)
    
                    # future message
                    if t >= future_cutoff:
                        lnB_future = qs_T[f]
                    else:
                        future_msg = trans_B[f][:, :, int(policy[t, f])].dot(qs_seq[t + 1][f])
                        lnB_future = spm_log(future_msg)
    

    I am not sure if the past_msgand future_msglines are consistent with their use of t-1, t and t +1. I think this is worth checking against 1) the original SPM to see what they do and 2) deciding what the correct behaviour should be.

    question 
    opened by Arun-Niranjan 2
  • Habit learning and precision

    Habit learning and precision

    Hello! I couldn't find implementation of habit learning (updating of prior over policies E) and precision(gamma) updating through betta prior. Am I missing it? And if not, is it planned for future releases? Thanks!

    enhancement help wanted open 
    opened by PetrAnokhin 4
  • Better error messages for MMP

    Better error messages for MMP

    Add better error /warning messages when you try to initialise an Agent() instance with the MMP inference algorithm (inference_algo="MMP") , but that choice doesn't make sense (inconsistent other choices of policy_depth, etc.).

    better_errors 
    opened by conorheins 0
  • State inference: Considerable performance difference with MATLAB implementation?

    State inference: Considerable performance difference with MATLAB implementation?

    Hi all,

    First of, many thanks for your work, it looks very promising!

    I was comparing some simple agents between the current and matlab implementation and noticed that in terms of reversal learning, the pymdp version appears to adapt considerably slower. I've played around with a variety of setups and hyperparameters but the difference is quite significant.

    Example setup: slot machine task without hints 2 actions: 'button' 0 and 'button' 1 A 'button 0 is better' context and a 'button 1 is better' context.

    40 trials, with the hidden context switching after 20 trials. Here I plot the state posterior (black) of 100 agents starting with flat context priors, compared to the true but unknown state/context (red). Below I'll include the pymdp code. I'm assuming I'm using the package wrong, and would love to know my misunderstanding.

    image image

    import pymdp
    from pymdp import utils
    from pymdp.agent import Agent
    import numpy as np
    import matplotlib.pyplot as plt
    
    num_obs = [3, 3] # 3 Rewards, 3 choice observations
    num_states = [3, 2] # 3 choice states, 2 hidden states
    num_factors = len(num_states)
    
    # Press one of two buttons
    num_controls = [2, 1] 
    
    A_shapes = [[o_dim] + num_states for o_dim in num_obs]
    
    # initialize the A array to all 0's
    A = utils.obj_array_zeros(A_shapes)
    
    # reward probabilities
    r1=0.9
    r2=0.9
    
    # Reward observations
    # STATE 1     Start a0 a1
    A[0][0,:,0] = [0, 1-r1, r2  ] # Positive reward
    A[0][1,:,0] = [0, r1  , 1-r2] # Negative reward
    A[0][2,:,0] = [1, 0   , 0   ] # Neutral (start state)
    # STATE 2     Start a0 a1
    A[0][0,:,1] = [0, r1  , 1-r2] # Positive
    A[0][1,:,1] = [0, 1-r1, r2  ] # Negative
    A[0][2,:,1] = [1, 0   , 0   ] # Neutral (start state)
    
    # No uncertainty about choice observations
    A[1][:,:,0] = np.eye(num_obs[1])
    A[1][:,:,1] = np.eye(num_obs[1])
    
    
    B_shapes = [[s_dim, s_dim, num_controls[f]] for f, s_dim in enumerate(num_states)]
    
    B = utils.obj_array_zeros(B_shapes)
    
    for i in range(2):
        B[0][0,:,i] = np.ones(3)
        
    B[0][:,0,0] = [0, 1, 0] # action 0: Start  -> a0
    B[0][:,0,1] = [0, 0, 1]  # action 1: Start  -> a1
    
    B[1][:,:,0] = np.eye(num_states[1])
    
    C = utils.obj_array_zeros(num_obs)
    C[0] = np.array([1, -1, 0]) # Prefer rewards
    
    D = utils.obj_array_uniform(num_states)
    D[0] = np.array([1, 0, 0]) # Start in the 'start'-state
    
    # ENVIRONMENT
    class my_env():
        
        def __init__(self, A):
            
            self.A = A
            
        def step(self, action, state):
                    
            obs = utils.sample(self.A[0][:, action[0].astype(int)+1, state])
                
            return [obs, action[0].astype(int)+1]
    
    # SIMULATIONS
    T = 40
    alpha = 16
    gamma = 16
    AS = "deterministic"
    
    for run in range(100):
        D2 = D.copy()
    
        model = Agent(A=A, B=B, C=C, D=D, policy_len=1, action_selection=AS)
        switches = [20,40,50]
        state = 0
        states = []
        pstate = []
        pact = []
        e = my_env(A)
    
        model.infer_states([2,0]) # 2 = neutral obs, 0 = start state
    
        for t in range(T):
    #         if t > 0: 
    #             D2[1] = model.qs[1]
    #             model = Agent(A=A, B=B, C=C, D=D2, policy_len=1, action_selection=AS)
    
            if t in switches:
                state = 1 - state
            states.append(state)
    
            # Start position for the trial (I believe you don't use this in the tutorial, but it doesnt seem to matter much)
            model.infer_states([2,0]) # 2 = neutral reward, 0 = start state observation
    
            q_pi, neg_efe = model.infer_policies()
    
            action = model.sample_action()
    
            obs = e.step(action, state=state)
            model.infer_states(obs)
    
            # Save belief and output
            pstate.append(model.qs[1][0])
            pact.append(q_pi[0])
    
        plt.plot([1-s for s in pstate], label="p(s)", linewidth=3, alpha=0.1, color='k')
        
    plt.plot([s*1.1-0.05 for s in states], label="s", color="r", linewidth=3)
    plt.xlabel("trial")
    plt.ylim([-0.05, 1.05])
    plt.title("Python")
    
    question 
    opened by SamGijsen 4
  • Incorrect error message when ensuring normalization of D array/vectors

    Incorrect error message when ensuring normalization of D array/vectors

    In line 180 of agent.py, error message should be changed to:

    "D vector is not normalized (i.e. D[f].sum() must all equal 1.0)"
    

    Originally posted by @helenegu in https://github.com/infer-actively/pymdp/issues/73#issuecomment-1165899263

    better_errors 
    opened by conorheins 0
  • B matrix navigation problem

    B matrix navigation problem

    Hello,

    Thanks so much with your work on bringing Active Inference to Python.

    While going through your epistemic chaining demo, it appears there is a problem with the agent navigation. When I moved cue1 location from (2,0) to (0,1), the agent takes two moves downward and then tries to move "left" into the wall. The agent never recovers from this and doesn't seem to know to try a different direction.

    I assume this is a problem with the B Matrix but I'm not smart enough to figure out if this is some challenge in the agent class or in the rules set up during the demo itself for (["UP", "DOWN", "LEFT", "RIGHT", "STAY"]); elif

    Any help/advice would be greatly appreciated! Please see the output log from the agent movements below . The only change I make to your demo is the my_env section where I change the cue1_loc to (0,1) - you'll see that once it completes the second action it tries to go LEFT... then STAY, then tries LEFT a few more times:

    Action at time 0: DOWN Grid location at time 0: (1, 0) Reward at time 0: Null Action at time 1: DOWN Grid location at time 1: (2, 0) Reward at time 1: Null Action at time 2: LEFT Grid location at time 2: (2, 0) Reward at time 2: Null Action at time 3: STAY Grid location at time 3: (2, 0) Reward at time 3: Null Action at time 4: STAY Grid location at time 4: (2, 0) Reward at time 4: Null Action at time 5: STAY Grid location at time 5: (2, 0) Reward at time 5: Null Action at time 6: LEFT Grid location at time 6: (2, 0) Reward at time 6: Null Action at time 7: LEFT Grid location at time 7: (2, 0) Reward at time 7: Null Action at time 8: LEFT Grid location at time 8: (2, 0) Reward at time 8: Null Action at time 9: LEFT Grid location at time 9: (2, 0) Reward at time 9: Null

    question 
    opened by thanos927 1
  • Polish tutorial 2

    Polish tutorial 2

    I really enjoyed this tutorial, overall. It shows the power of Agent. I think it's a little hard to read in some places, and I wanted to flag some of these issues:

    1. It's a non-standard bandit task, because there's a third action, HINT. It would be nice to indicate this in the intro - or to refer to a version of the task which includes the hint action, because there's no indication in the only reference, which is the Wikipedia link.
    2. Going from tutorial 1 to tutorial 2, there's an unexplained shift in the definition of A. In tutorial 1, it was a two-dimensional array p(o|s), but now it's a four-dimensional array. I realized a bit late in the process that this was all explained in the pymdp fundamentals part of the doc - a backlink would be nice.
    3. Generally I find using raw arrays to define states difficult to read. I presume that this is an artifact of the history of the package (Matlab cell arrays). It would be helpful to remind people the definition of the axes as we go along. OTOH, I did find the diagrams very helpful.
    4. I found the last part about manipulating the reward very confusing. I had to go back to definitions to figure out that the last manipulation changed the loss into a reward (+5) - if I just look at the output, it looks like the agent always picks the arm resulting in a loss.

    One thing that's not explained here is how the agent's inference mechanism differs from those of other, more well-known agents from the RL literature. Having read the first few chapters of Richard Sutton's book eons ago, I wondered whether the inference was equivalent to a finite horizon dynamic programming solution, or similar in spirit to an agent that uses a UCB heuristic or Thompson sampling. If you could have a few references in the tutorial about this, it would be great.

    documentation 
    opened by patrickmineault 1
Releases(v0.0.7)
  • v0.0.7(Dec 8, 2022)

    What's Changed

    • plot_beliefs, plot_likelihood now functions in utils.py
    • Bug fix in calculation of variational free energy during message passing routines (see #98)
    • Allow optional distributional observations in agent.infer_states(obs) with a new optional boolean argument distrib_obs, for use in hierarchical set-ups
    • added two new environments (envs.visual_foraging.SceneConstruction and envs.visual_foraging.RandomDotMotion)
    • added functions for quickly initialising empty A and B arrays

    Full Changelog: https://github.com/infer-actively/pymdp/compare/v0.0.6...v0.0.7

    Source code(tar.gz)
    Source code(zip)
  • v0.0.6(Aug 24, 2022)

    What's Changed

    • Bug fixes (see #84, #86)
    • Optional action sampling precision as input to Agent (equivalent of alpha parameter in SPM) to address Issue #81: https://github.com/infer-actively/pymdp/pull/88
    • Can sample directly from policy posterior using new sample_policy() function in control.py: https://github.com/infer-actively/pymdp/pull/89
    • Fixed failing documentation: https://github.com/infer-actively/pymdp/pull/92

    Full Changelog: https://github.com/infer-actively/pymdp/compare/v0.0.5...v0.0.6

    Source code(tar.gz)
    Source code(zip)
  • v0.0.5(Apr 25, 2022)

    Release notes

    • bug fixes, notably fix in B matrix learning (pymdp.learning.update_state_likelihood_dirichlet()), see here
    • more full documentation based on JOSS reviews, see here
    • include archived version (using Zenodo) with 0.0.5 release (doi: 10.5281/zenodo.6484849), for simultaneous publication of JOSS paper
    Source code(tar.gz)
    Source code(zip)
  • v0.0.4(Jan 10, 2022)

    Updates include:

    • Read the Docs / Sphinx-based documentation, with references thereto in a cleaned-up/shortened README.md
    • new epistemic chaining demo (on README.md and in documentation)
    • renaming of many inference.py and learning.py functions to make them more understandable

    BUG FIXES:

    • corrected action sampling routine (in pymdp.control.sample_action()) so that when marginalizing posterior probabilities from each policy, per action, we only sum the probabilities assigned to action for the next / successive timestep, not for all timesteps. Before this fix, this can lead to maladaptive behavior in many scenarios where temporally-deep planning is required.
    Source code(tar.gz)
    Source code(zip)
  • v0.0.3(Oct 27, 2021)

    Updates include:

    • more demo colab notebooks now linked on main page
    • model checks in when constructing an Agent() (e.g. normalization checks)
    • D vector learning / bayesian model reduction
    • can pass in E vector (prior over policies) to Agent() constructor
    • time-varying prior preferences (i.e. C can now be a matrix rather than having to be a vector)
    • updated dependencies in setup.py to allow forwards compatibility with newer versions of various packages
    Source code(tar.gz)
    Source code(zip)
The official implementation of ICCV paper "Box-Aware Feature Enhancement for Single Object Tracking on Point Clouds".

Box-Aware Tracker (BAT) Pytorch-Lightning implementation of the Box-Aware Tracker. Box-Aware Feature Enhancement for Single Object Tracking on Point C

Kangel Zenn 5 Mar 26, 2022
Implementation of CrossViT: Cross-Attention Multi-Scale Vision Transformer for Image Classification

CrossViT : Cross-Attention Multi-Scale Vision Transformer for Image Classification This is an unofficial PyTorch implementation of CrossViT: Cross-Att

Rishikesh (ऋषिकेश) 103 Nov 25, 2022
Data Augmentation Using Keras and Python

Data-Augmentation-Using-Keras-and-Python Data augmentation is the process of increasing the number of training dataset. Keras library offers a simple

Happy N. Monday 3 Feb 15, 2022
2D&3D human pose estimation

Human Pose Estimation Papers [CVPR 2016] - 201511 [IJCAI 2016] - 201602 Other Action Recognition with Joints-Pooled 3D Deep Convolutional Descriptors

133 Jan 02, 2023
Python implementation of the multistate Bennett acceptance ratio (MBAR)

pymbar Python implementation of the multistate Bennett acceptance ratio (MBAR) method for estimating expectations and free energy differences from equ

Chodera lab // Memorial Sloan Kettering Cancer Center 169 Dec 02, 2022
StarGAN2 for practice

StarGAN2 for practice This version of StarGAN2 (coined as 'Post-modern Style Transfer') is intended mostly for fellow artists, who rarely look at scie

vadim epstein 87 Sep 24, 2022
Putting NeRF on a Diet: Semantically Consistent Few-Shot View Synthesis Implementation

Putting NeRF on a Diet: Semantically Consistent Few-Shot View Synthesis Implementation This project attempted to implement the paper Putting NeRF on a

254 Dec 27, 2022
Rethinking Transformer-based Set Prediction for Object Detection

Rethinking Transformer-based Set Prediction for Object Detection Here are the code for the ICCV paper. The code is adapted from Detectron2 and AdelaiD

Zhiqing Sun 62 Dec 03, 2022
Code for Fully Context-Aware Image Inpainting with a Learned Semantic Pyramid

SPN: Fully Context-Aware Image Inpainting with a Learned Semantic Pyramid Code for Fully Context-Aware Image Inpainting with a Learned Semantic Pyrami

12 Jun 27, 2022
Pytorch implementation of paper Semi-supervised Knowledge Transfer for Deep Learning from Private Training Data

Pytorch implementation of paper Semi-supervised Knowledge Transfer for Deep Learning from Private Training Data

Hrishikesh Kamath 31 Nov 20, 2022
A Simple Example for Imitation Learning with Dataset Aggregation (DAGGER) on Torcs Env

Imitation Learning with Dataset Aggregation (DAGGER) on Torcs Env This repository implements a simple algorithm for imitation learning: DAGGER. In thi

Hao 66 Nov 23, 2022
Official PyTorch Implementation of SSMix (Findings of ACL 2021)

SSMix: Saliency-based Span Mixup for Text Classification (Findings of ACL 2021) Official PyTorch Implementation of SSMix | Paper Abstract Data augment

Clova AI Research 52 Dec 27, 2022
tf2onnx - Convert TensorFlow, Keras and Tflite models to ONNX.

tf2onnx converts TensorFlow (tf-1.x or tf-2.x), tf.keras and tflite models to ONNX via command line or python api.

Open Neural Network Exchange 1.8k Jan 08, 2023
ALBERT: A Lite BERT for Self-supervised Learning of Language Representations

ALBERT ***************New March 28, 2020 *************** Add a colab tutorial to run fine-tuning for GLUE datasets. ***************New January 7, 2020

Google Research 3k Jan 01, 2023
Code for paper Decoupled Dynamic Spatial-Temporal Graph Neural Network for Traffic Forecasting

Decoupled Spatial-Temporal Graph Neural Networks Code for our paper: Decoupled Dynamic Spatial-Temporal Graph Neural Network for Traffic Forecasting.

S22 43 Jan 04, 2023
Official PyTorch code of Holistic 3D Scene Understanding from a Single Image with Implicit Representation (CVPR 2021)

Implicit3DUnderstanding (Im3D) [Project Page] Holistic 3D Scene Understanding from a Single Image with Implicit Representation Cheng Zhang, Zhaopeng C

Cheng Zhang 149 Jan 08, 2023
Adabelief-Optimizer - Repository for NeurIPS 2020 Spotlight "AdaBelief Optimizer: Adapting stepsizes by the belief in observed gradients"

AdaBelief Optimizer NeurIPS 2020 Spotlight, trains fast as Adam, generalizes well as SGD, and is stable to train GANs. Release of package We have rele

Juntang Zhuang 998 Dec 29, 2022
Pytorch implementation of PCT: Point Cloud Transformer

PCT: Point Cloud Transformer This is a Pytorch implementation of PCT: Point Cloud Transformer.

Yi_Zhang 265 Dec 22, 2022
This is a Pytorch implementation of the paper: Self-Supervised Graph Transformer on Large-Scale Molecular Data.

This is a Pytorch implementation of the paper: Self-Supervised Graph Transformer on Large-Scale Molecular Data.

212 Dec 25, 2022
A PyTorch library for Vision Transformers

VFormer A PyTorch library for Vision Transformers Getting Started Read the contributing guidelines in CONTRIBUTING.rst to learn how to start contribut

Society for Artificial Intelligence and Deep Learning 142 Nov 28, 2022