Skip to main content

PymoNNtorch is a Pytorch version of PymoNNto

Project description

PymoNNtorch

https://img.shields.io/pypi/v/pymonntorch.svg https://img.shields.io/travis/cnrl/pymonntorch.svg Documentation Status

PymoNNtorch is a Pytorch-adapted version of PymoNNto.

Features

  • Use torch tensors and Pytorch-like syntax to create a spiking neural network (SNN).

  • Simulate an SNN on CPU or GPU.

  • Define dynamics of SNN components as Behavior modules.

  • Control over the order of applying different behaviors in each simulation time step.

Usage

You can use the same syntax as PymoNNto to create you network:

from pymonntorch import *

net = Network()
ng = NeuronGroup(net=net, tag="my_neuron", size=100, behavior=None)
SynapseGroup(src=ng, dst=ng, net=net, tag="recurrent_synapse")
net.initialize()
net.simulate_iterations(1000)

Similarly, you can write your own Behavior Modules with the same logic as PymoNNto; except using torch tensors instead of numpy ndarrays.

from pymonntorch import *

class BasicBehavior(Behavior):
    def initialize(self, neurons):
        super().initialize(neurons)
        neurons.voltage = neurons.vector(mode="zeros")
        self.threshold = 1.0

    def forward(self, neurons):
        firing = neurons.voltage >= self.threshold
        neurons.spike = firing.byte()
        neurons.voltage[firing] = 0.0 # reset

        neurons.voltage *= 0.9 # voltage decay
        neurons.voltage += neurons.vector(mode="uniform", density=0.1)

class InputBehavior(Behavior):
    def initialize(self, neurons):
        super().initialize(neurons)
        for synapse in neurons.afferent_synapses['GLUTAMATE']:
            synapse.W = synapse.matrix('uniform', density=0.1)
            synapse.enabled = synapse.W > 0

    def forward(self, neurons):
        for synapse in neurons.afferent_synapses['GLUTAMATE']:
            neurons.voltage += synapse.W@synapse.src.spike.float() / synapse.src.size * 10

net = Network()
ng = NeuronGroup(net=net,
                size=100,
                behavior={
                    1: BasicBehavior(),
                    2: InputBehavior(),
                    9: Recorder(['voltage']),
                    10: EventRecorder(['spike'])
                })
SynapseGroup(ng, ng, net, tag='GLUTAMATE')
net.initialize()
net.simulate_iterations(1000)

import matplotlib.pyplot as plt

plt.plot(net['voltage',0][:, :10])
plt.show()

plt.plot(net['spike.t',0], net['spike.i',0], '.k')
plt.show()

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template. It changes the codebase of PymoNNto to use torch rather than numpy and tensorflow numpy.

History

0.1.0 (2023-03-17)

  • Repository made public.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pymonntorch-0.1.0.tar.gz (215.8 kB view details)

Uploaded Source

Built Distribution

pymonntorch-0.1.0-py2.py3-none-any.whl (36.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pymonntorch-0.1.0.tar.gz.

File metadata

  • Download URL: pymonntorch-0.1.0.tar.gz
  • Upload date:
  • Size: 215.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for pymonntorch-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e1adac5bdbb911c29ff3d7328fdf44cb4e7a2ec141227359cb83ea8ca9e4bfe1
MD5 f1e055537f406cfdcf6516f4bb5c9f89
BLAKE2b-256 b160bddff8abc731915f35c9bbd916548b97aac055bb91c2b92f863e93dbce1e

See more details on using hashes here.

File details

Details for the file pymonntorch-0.1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for pymonntorch-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 26c719ee77940b142d97f337477bc9e2a1ed4419396ee0b5d95e6791c0040159
MD5 258c81030c023a7b5a7ce5653a608033
BLAKE2b-256 42017f61a6957e5c302fde1d2c54c586bd3bd800cce4c88a82e753ca0418a798

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page