
用於使用Pytorch Tensor功能在CPU或GPU上模擬尖峰神經網絡(SNN)的Python軟件包。
bindsnet是一個尖峰神經網絡模擬庫,旨在開發以生物學啟發的機器學習算法。
該軟件包被用作正在進行的有關應用於生物學啟發的神經和動力系統(BINDS)實驗室和塔夫茨大學的艾倫發現中心的有關應用SNN,機器學習(ML)和增強學習(RL)問題的研究的一部分。
查看bindsnet示例,以獲取實驗的集合,用於分析結果的函數,實驗結果圖等。包裝的文檔可以在此處找到。

要從GitHub存儲庫中安裝最新的穩定版本
pip install git+https://github.com/BindsNET/bindsnet.git
或者,要從源構建bindsnet軟件包,請克隆github存儲庫,將目錄更改為該項目的最高級別,然後發出
pip install .
或者,以可編輯模式安裝(允許在不重新安裝的情況下修改包裝):
pip install -e .
要安裝與OpenAI Gym RL環境庫接口所需的軟件包,請按照其說明安裝運行RL環境模擬器所需的軟件包(在Linux / MacOS上)。
鏈接到Docker存儲庫。
我們還提供了一個dockerfile,其中bindsnet及其所有依賴項都安裝在其中。
docker build .
在此項目的頂級目錄處,以創建Docker映像。
要更改新構建的圖像的名稱,請發行
docker tag <IMAGE_ID> <NEW_IMAGE_ID>
要運行一個容器並在其中獲取bash終端,請發出
docker run -it <NEW_IMAGE_ID> bash
要從本文中運行SNN的近乎複製,請發行
cd examples/mnist
python eth_mnist.py
有許多可選的命令行參數可以傳遞,包括--plot (顯示有用的監視圖), --n_neurons [int] (興奮性,抑制神經元模擬的數量), --mode ['train' | 'test'] (將網絡操作設置為培訓或測試階段),等等。使用--help或-h標誌以更多信息運行腳本。
examples目錄中還有許多其他示例,這些示例旨在展示bindsnet的功能。看看,讓我們知道您的想法!
發出以下內容來運行測試:
python -m pytest test/
如果您的機器上未安裝打開的AI gym則某些測試將失敗。
生物學上合理的尖峰神經元動力學的模擬可能具有挑戰性。通常是通過求解描述所述動力學的普通微分方程(OD)來完成的。 Pytorch並未明確支持微分方程的解(例如,與brian2相反),但是我們可以將定義動力學的ODES轉換為差異方程式,並以常規的短時間間隔(按1毫秒為1毫秒的dt )求解為近似值。當然,在引擎蓋下,像brian2這樣的包裹正在做同樣的事情。在PyTorch中這樣做令人興奮,原因有幾個:
我們可以使用功能強大且靈活的torch.Tensor對象, numpy.ndarray周圍的包裝器,可以從GPU設備轉移。
我們可以通過在我們的SNN體系結構中的torch.nn.functional pytorch子模塊中重新利用功能來避免“重新發明車輪”。例如,卷積或合併功能。
神經元尖峰順序及其相對時機編碼信息的概念是神經科學的中心主題。 Markram等。 (1997年)提出,神經元之間的突觸應基於這個相對時機加強或降解,在此之前,唐納德·赫布(Donald Hebb)提出了赫比亞學習理論,通常簡單地說為“將神經元一起發射,將其連接在一起”。 Markram等人的Hebbian理論擴展被稱為峰值依賴性可塑性(STDP)。
我們有興趣將SNN應用於ML和RL問題。我們使用STDP修改SNN中連接神經元對的突觸的權重。在ML的背景下,我們想學習一個突觸權重的設置,該設置將在SNN中產生數據依賴於數據的尖峰活動。這項活動將使我們隨後執行一些感興趣的ML任務;例如,區分或聚類輸入數據。在RL的背景下,我們可以將尖峰神經網絡視為RL代理,其尖峰活動可以轉換為環境動作空間中的動作。
We have provided some simple starter scripts for doing unsupervised learning (learning a fully-connected or convolutional representation via STDP), supervised learning (clamping output neurons to desired spiking behavior depending on data labels), and reinforcement learning (converting observations from the Atari game Space Invaders to input to an SNN, and converting network activity back to actions in the game).
我們模擬了一個Nevent,該網絡具有N Poisson輸入神經元,其發射速率(In Hertz)隨機從U(0,100)繪製,並與同等大小的洩漏的集成和火(LIF)神經元群體連接,並從N(0,1)中採樣連接權重。我們以250的步驟從系統地從250到10,000,每個庫中的每個庫都以1,000ms的速度進行了時間分辨率DT = 1.0。我們測試了BINDSNET(使用CPU和GPU計算),Brian2,Pynest(運行C ++ Nest Core Simulator的Nest SLI接口的Python接口),NAND CORE SIMULATOR),ENNARCHY(帶有CPU和GPU計算)和Brian2Genn(Brian2Genn(Brian2 to to Brian2 to to genn nimulator)。
包括Brian和Pynest在內的幾個軟件包允許設定某些全球偏好;例如,CPU線程的數量,OpenMP進程的數量等。我們為基準研究選擇了這些設置,以試圖最大化每個庫的速度,但請注意,Bindsnet不需要此類選項的設置。我們的方法繼承了Pytorch的計算模型,似乎可以充分利用可用的硬件,因此使從業者可以輕鬆地從系統中獲得最佳性能,從而最大程度地利用了他們的最佳性能。

所有模擬在Ubuntu 16.04 LT上運行,帶有Intel(R)Xeon(R)CPU E5-2687W v3 @ 3.10GHz,128GB RAM @ 2133MHz和兩個Geforce GTX Titan X(GM200)GPU。在所有情況下,使用Python 3.6。每次模擬運行記錄時鐘時間。
如果您在研究中使用bindsnet,請引用以下文章:
@ARTICLE{10.3389/fninf.2018.00089,
AUTHOR={Hazan, Hananel and Saunders, Daniel J. and Khan, Hassaan and Patel, Devdhar and Sanghavi, Darpan T. and Siegelmann, Hava T. and Kozma, Robert},
TITLE={BindsNET: A Machine Learning-Oriented Spiking Neural Networks Library in Python},
JOURNAL={Frontiers in Neuroinformatics},
VOLUME={12},
PAGES={89},
YEAR={2018},
URL={https://www.frontiersin.org/article/10.3389/fninf.2018.00089},
DOI={10.3389/fninf.2018.00089},
ISSN={1662-5196},
}
用貢獻製成。
GNU AFFERO通用公共許可證v3.0