Skip to main content

PymoNNtorch is a Pytorch version of PymoNNto

Project description

PymoNNtorch

https://img.shields.io/pypi/v/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.1 (2023-05-26)

  • Every NetworkObject can have a recorder behavior.

  • Netowrk settings accept “index” entry.

  • Bug fixes and general improvement.

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.1.tar.gz (216.4 kB view details)

Uploaded Source

Built Distribution

pymonntorch-0.1.1-py2.py3-none-any.whl (36.8 kB view details)

Uploaded Python 2 Python 3

File details

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

File metadata

  • Download URL: pymonntorch-0.1.1.tar.gz
  • Upload date:
  • Size: 216.4 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.1.tar.gz
Algorithm Hash digest
SHA256 edce03e7e88902ec72b01b2c32f25d4d5545fb4f55a42c23eb8e60045c6162de
MD5 2e8795f4487ffbed7afd6827799e3694
BLAKE2b-256 5c3c1a10c09c801708c6e746ea5fd719bac3df59b2ea366265e49fbb699d0485

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pymonntorch-0.1.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 711f2e7a7f480560a74ededd1609d9e22100b3ee269acdcd62de19f29d2e6423
MD5 00034c0e237c96965f7379eff01914ee
BLAKE2b-256 2ef816f478f01bdde2c854b7f86a838c0b0f8394a4611b748f799ec3de2b60c2

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