神经回路策略(适用于 PyTorch 和 TensorFlow)
📜 论文
神经回路策略实现可审计自主性(开放获取)。
闭形式连续时间神经网络(开放获取)
神经回路策略(NCPs)是设计稀疏循环神经网络,其灵感来自于有机体C. elegans的神经系统。 本包的目标是使在 PyTorch 和 keras 中使用 NCP 变得尽可能简单。
import torch
from ncps.torch import CfC
rnn = CfC(20,50) # (输入, 隐藏单元)
x = torch.randn(2, 3, 20) # (批量, 时间, 特征)
h0 = torch.zeros(2,50) # (批量, 单元)
output, hn = rnn(x,h0)
安装
pip install ncps
🔖 Colab 笔记本
我们创建了一些 Google Colab 笔记本,用于对该包进行交互式介绍
- Google Colab (Pytorch) 基本用法
- Google Colab (Tensorflow): 基本用法
- Google Colab (Tensorflow): 处理不规则采样时间序列
- Google Colab (Tensorflow) 将 NCP 与其他层堆叠
端到端示例
使用:模型和连接结构
该包提供了两种模型,液体时间常数(LTC)和闭形式连续时间(CfC)模型。
两种模型都可以作为 tf.keras.layers.Layer
或 torch.nn.Module
RNN 层使用。
from ncps.torch import CfC, LTC
input_size = 20
units = 28 # 28 个神经元
rnn = CfC(input_size, units)
rnn = LTC(input_size, units)
上述 RNN 认为是全连接层,即像 LSTM、GRUs 和其他 RNN 一样。 NCPs 的独特之处在于它们的结构化连接图。 要将 LTC 或 CfC 模型与
from ncps.torch import CfC, LTC
from ncps.wirings import AutoNCP
wiring = AutoNCP(28, 4) # 28 个神经元,4 个输出
input_size = 20
rnn = CfC(input_size, wiring)
rnn = LTC(input_size, wiring)
Tensorflow
通过 ncps.tf
模块可以使用 Tensorflow 绑定。
from ncps.tf import CfC, LTC
from ncps.wirings import AutoNCP
units = 28
wiring = AutoNCP(28, 4) # 28 个神经元,4 个输出
input_size = 20
rnn1 = LTC(units) # 全连接 LTC
rnn2 = CfC(units) # 全连接 CfC
rnn3 = LTC(wiring) # NCP 连接的 LTC
rnn4 = CfC(wiring) # NCP 连接的 CfC
然后我们可以将 NCP 单元与任意的 tf.keras.layers
结合,例如构建一个强大的图像序列分类器:
from ncps.wirings import AutoNCP
from ncps.tf import LTC
import tensorflow as tf
height, width, channels = (78, 200, 3)
ncp = LTC(AutoNCP(32, output_size=8), return_sequences=True)
model = tf.keras.models.Sequential(
[
tf.keras.layers.InputLayer(input_shape=(None, height, width, channels)),
tf.keras.layers.TimeDistributed(
tf.keras.layers.Conv2D(32, (5, 5), activation="relu")
),
tf.keras.layers.TimeDistributed(tf.keras.layers.MaxPool2D()),
tf.keras.layers.TimeDistributed(
tf.keras.layers.Conv2D(64, (5, 5), activation="relu")
),
tf.keras.layers.TimeDistributed(tf.keras.layers.MaxPool2D()),
tf.keras.layers.TimeDistributed(tf.keras.layers.Flatten()),
tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(32, activation="relu")),
ncp,
tf.keras.layers.TimeDistributed(tf.keras.layers.Activation("softmax")),
]
)
model.compile(
optimizer=tf.keras.optimizers.Adam(0.01),
loss='sparse_categorical_crossentropy',
)
@article{lechner2020neural,
title={Neural circuit policies enabling auditable autonomy},
author={Lechner, Mathias and Hasani, Ramin and Amini, Alexander and Henzinger, Thomas A and Rus, Daniela and Grosu, Radu},
journal={Nature Machine Intelligence},
volume={2},
number={10},
pages={642--652},
year={2020},
publisher={Nature Publishing Group}
}