SNN 模块的容器,用于组合各个 matterhorn_pytorch.snn.Module
。
在介绍本章之前,首先需要介绍单时间步 SNN 模型和多时间步 SNN 模型。
单时间步 SNN 模型与 ANN 模型类似,接受形状为 [B, ...]
(n
维)的输入。单时间步 SNN 模型一次输入循环一个时间步。
多时间步 SNN 模型异步地在计算机中作时间循环,其接受形状为 [T, B, ...]
(n + 1
维)的输入,一次循环 T
个时间步。
空间容器,与 torch.nn.Sequential
类似,然而:
(1)其仅接受来自 matterhorn_pytorch.snn.Module
的 SNN 模块。
(2)其会保持模块内的模型同为单步模型或多步模型。
Spatial(
*args: Tuple[nn.Module]
)
*args (*nn.Module)
:按空间顺序传入的各个模块。
import torch
import matterhorn_pytorch as mth
model = mth.snn.Spatial(
mth.snn.Linear(784, 10),
mth.snn.LIF()
)
print(model)
时间容器:
(1)包裹单时间步 SNN 模块,通过时间循环实现多时间步。
(2)其本身为多时间步模块,因此要比单时间步模块多消耗一个维度 T
,默认将第一个维度视作时间维度。
Temporal(
module: nn.Module
)
module (nn.Module)
:单时间步 SNN 模块。
import torch
import matterhorn_pytorch as mth
model = mth.snn.Temporal(
mth.snn.LIF()
)
print(model)
SNN 序列容器,结合了 Spatial
容器与 Temporal
容器的产物。其与 Spatial
用法类似,然而:
(1)其可以接受任何 torch.nn.Module
模块,并且对这个模块应用 matterhorn_pytorch.snn.Module
独有的方法时,其仅会对其中的 matterhorn_pytorch.snn.Module
模块生效。
(2)其会保持模块内的模型同为单步模型或多步模型。
Sequential(
*args: Tuple[nn.Module]
)
*args (*nn.Module)
:按空间顺序传入的各个模块。
import torch
import matterhorn_pytorch as mth
model = mth.snn.Sequential(
mth.snn.Linear(784, 10),
mth.snn.LIF()
).multi_step_mode_()
print(model)
ANN 模型的套壳容器,将 ANN 模型看作单时间步模式的 SNN 模型,赋予 matterhorn.snn
模块中所特有的属性与方法。
Agent(
nn_module: nn.Module,
force_spike_output: bool = False
)
nn_module (nn.Module)
:ANN 模块。
force_spike_output (bool)
:是否强制脉冲输出。默认不强制。
import torch
import matterhorn_pytorch as mth
model = mth.snn.Agent(
nn.Linear(784, 10)
)
print(model)