Learning synapse-level brain circuit networks. Include training, inferring, evaluation, and visualization.
Project description
NCPNet
1. Brief Introduction
Neuronal Circuit Prediction Network (NCPNet), a simple and effective model for inferring neuron-level connections in a brain circuit network.
2. Installation
Requirements
- Linux
- CUDA environment
- Python 3.7~3.11
- NVIDIA CUDA Compiler Driver NVCC version>=10.0. This is used for compiling the dependencies of torch_geometric: torch-cluster,torch-sparse,torch-scatter.
- Pytorch>=2.0.1
- Pytorch Geometric>=2.3.1
Step 1
- Ensure that nvcc is accessible from terminal and version >=10.0
nvcc --version
>>>nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2018 NVIDIA Corporation Built on Sat_Aug_25_21:08:01_CDT_2018 Cuda compilation tools, release 10.0, V10.0.130
If NVCC is not not included in your device, it can be installed through the CUDA Toolkit. NVCC is a part of the CUDA Toolkit.
- Ensure that CUDA is usable and version >=11.6
nvidia-smi |grep Version
>>>CUDA Version: >=11.6
Step 2
Use pip to install NCPNet
pip install NCPNet
Note that it takes a long time to build torch-cluster,torch-sparse,and torch-scatter by pip. Don`t worry, just wait for a while.
Or clone this repository and install:
git clone https://github.com/mxz12119/NCPNet.git
cd NCPNet
python setup.py install
Our main dependencies:
torch==2.0.1
torch_geometric==2.3.1
torch-cluster==1.6.1
torch-sparse==0.6.17
torch-scatter==2.1.1
navis==1.3.1
neuprint-python==0.4.25
If you would like to reproduce our experiments and plots, please also install jupyter.
pip install jupyter
Code structure:
Source Code
├── data
| ├──Hemibrain
| └──C.Elegans
├── example
├── runs
├── configs
├── NCPNet
| ├── approaches
| ├── brain_data.py
| ├── task.py
| ├── trainer.py
| └── utils.py
└── requirements.txt
Examples
1. Easy train a model on Drosophila HemiBrain
NCPNet uses a configuration file (yaml) to control training and test. You can run 'example/train-eval.py' with 'configs/linkpred_example.yaml':
Run
python example/train-eval.py -c configs/linkpred_example.yaml
configs/linkpred_example.yaml include the hyperparameters of NCPNet.
Results:
Task num:1
********************************************************************************************************************************************************************************************************
Begin 0 Task
{'Experiment': 'HemiBrain', 'val': 0.85, 'test': 0.1, 'train': 0.05, 'lr': 0.005, 'epoch': 400, 'weight_decay': 5e-06, 'seed': 68, 'device': 'cuda:1', 'optimizer': 'adam', 'save': './saved', 'loss': 'bce', 'eval_step': 2, 'negtive_num': 1, 'task_save': 'mlp_demo_model3', 'use_tensor_board': True, 'batch_size': 10000, 'save_dataset': True, 'Model': 'LinkPred', 'node_encoder': 'GCN', 'pair_encoder': 'NeighEnco2', 'use_type_info': False, 'in_channels': 5555, 'hidden_channels': 128, 'out_channels': 64, 'dim': 100, 'dropout': 0.5, 'score_func': 'mlptri', 'num_layer': 2, 'hop': 2}
|::Training::|Epoch:0|Iter:36 |Training loss:0.5731|epoch_time_cost:10.0 s|
|::Training::|Epoch:1|Iter:72 |Training loss:0.4414|epoch_time_cost:4.6 s|
|::Training::|Epoch:2|Iter:108 |Training loss:0.3764|epoch_time_cost:4.4 s|
|::Testing::|Epoch:2|Iter:108|Loss:0.3572|Accuracy:0.841|AUC:0.921|
|::Training::|Epoch:3|Iter:144 |Training loss:0.3377|epoch_time_cost:4.7 s|
|::Training::|Epoch:4|Iter:180 |Training loss:0.2822|epoch_time_cost:4.8 s|
|::Testing::|Epoch:4|Iter:180|Loss:0.2675|Accuracy:0.897|AUC:0.958|
|::Training::|Epoch:5|Iter:216 |Training loss:0.2565|epoch_time_cost:3.7 s|
|::Training::|Epoch:6|Iter:252 |Training loss:0.2430|epoch_time_cost:3.9 s|
|::Testing::|Epoch:6|Iter:252|Loss:0.2575|Accuracy:0.903|AUC:0.962|
|::Training::|Epoch:7|Iter:288 |Training loss:0.2348|epoch_time_cost:3.7 s|
|::Training::|Epoch:8|Iter:324 |Training loss:0.2271|epoch_time_cost:3.9 s|
|::Testing::|Epoch:8|Iter:324|Loss:0.2420|Accuracy:0.908|AUC:0.966|
|::Training::|Epoch:9|Iter:360 |Training loss:0.2209|epoch_time_cost:3.7 s|
|::Training::|Epoch:10|Iter:396 |Training loss:0.2163|epoch_time_cost:4.1 s|
|::Testing::|Epoch:10|Iter:396|Loss:0.2347|Accuracy:0.912|AUC:0.968|
|::Training::|Epoch:11|Iter:432 |Training loss:0.2123|epoch_time_cost:4.5 s|
|::Training::|Epoch:12|Iter:468 |Training loss:0.2072|epoch_time_cost:4.7 s|
|::Testing::|Epoch:12|Iter:468|Loss:0.2364|Accuracy:0.914|AUC:0.969|
|::Training::|Epoch:13|Iter:504 |Training loss:0.2042|epoch_time_cost:3.7 s|
|::Training::|Epoch:14|Iter:540 |Training loss:0.2021|epoch_time_cost:4.1 s|
|::Testing::|Epoch:14|Iter:540|Loss:0.2312|Accuracy:0.916|AUC:0.970|
|::Training::|Epoch:15|Iter:576 |Training loss:0.1997|epoch_time_cost:4.5 s|
|::Training::|Epoch:16|Iter:612 |Training loss:0.1980|epoch_time_cost:4.7 s|
|::Testing::|Epoch:16|Iter:612|Loss:0.2393|Accuracy:0.917|AUC:0.971|
2. Predict neuronal connection
Once you train a model, such as 'model.ncpnet', then use the following command to predict the probility between two neurons:
python -m NCPNet -pred 1721996278 1722670151 -m model.ncpnet
Response:
Inferring the connection probability of (1721996278->1722670151)
The score of (1721996278->1722670151): 0.874
Reproducibility of Our Paper
Please try to use jupyter to reproduce our experiments in ./example/
Access Data
Raw Data
The Drosophila connectome is available at https://www.janelia.org/project-team/flyem/hemibrain.
The C.elegans connectome is available at https://wormwiring.org/
Preprocessed Data
The data will be released after the review process.
Acknowledgments
We thank for the great contributions on reconstructing connectomes by HHMI Janelia and Cook S J, Jarrell T A, Brittin C A, et al. Nature, 2019, 571(7763): 63-71.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file NCPNet-1.0.4.tar.gz.
File metadata
- Download URL: NCPNet-1.0.4.tar.gz
- Upload date:
- Size: 18.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21224e8b69a3598e687268e241eeec75a355d963b1f36f31d6dd695acc21da38
|
|
| MD5 |
f41c8fb0d164ff48282f97ed36fd96c3
|
|
| BLAKE2b-256 |
6e009d442ada5ce6721923ef43d2c24c28704ac5811bcd6f7a2593f99f26294e
|
File details
Details for the file NCPNet-1.0.4-py3-none-any.whl.
File metadata
- Download URL: NCPNet-1.0.4-py3-none-any.whl
- Upload date:
- Size: 22.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e66e4b4e638ae15a6c4dbbb0cb3650647f9754fa9984fed32228548ed6f6dfed
|
|
| MD5 |
7b74907e3528514bef8291c3269abfbd
|
|
| BLAKE2b-256 |
704573c449fd6bc316154a1f0bec6384f691900dd51ff8a1234b62ce66d75091
|