stigmergic神经网络的pytorch实现
torchsnn的Python项目详细描述
火炬
本文Using stigmergy to incorporate the time into artificial neural networks中stigmergic神经网络的pytorch实现。
该软件包的编写意图是使As{{ STR 1 } $易< /强>尽可能地将SiggSyric神经网络集成到已有的模型中。
您可以安全地mix使用我们的本地pytorch模块。
唯一的catch应该使用stigmergicmodule(它扩展了pytorch的module)作为模型的基类,以便能够tick()和reset()它们。
实现我们的proposed architecture to solve MNIST变得非常简单:
importtorchimporttorchsnnnet=torchsnn.Sequential(torchsnn.SimpleLayer(28,10),torchsnn.FullLayer(10,10),torchsnn.TemporalAdapter(10,28),torch.nn.Linear(10*28,10),torch.nn.Sigmoid())
您可以像使用pytorch的module那样训练stigmergicmodule,但不要忘记reset()和tick()它!
optimizer=torch.optim.Adam(net.parameters(),lr=0.001)foriinrange(0,N):forX,Yinzip(dataset_X,dataset_Y):net.reset()out=NoneforxiinX:out=net(torch.tensor(xi,dtype=torch.float32))net.tick()loss=(Y-out)**2loss.backward()optimizer.step()
它支持批量输入吗?
是的!如果将一批输入转发到stigmergicmodule,它将返回一批输出
fortinrange(0,num_ticks):batch_out[0],batch_out[1],...=net(torch.tensor([batch_in[0][t],batch_in[1][t],...]))net.tick()
它能在库达身上运行吗?
是的,正如你所期望的那样,从Pythorch模块!
您只需调用模型上的to(device)方法即可将其移动到gpu内存中。
device=torch.device("cuda")net=net.to(device)net.forward(torch.tensor(...,device=device))
文档
扭矩传感器模块
stigmergic网络或层的基类。
如果您正在编写自己的stigmergicmodule则必须实现函数
- 滴答声()
- reset()
如果您正在使用其他stigmergicmodule它将在其子树中传播这些调用。
例如,如果您想用linear和simplelayer构建一个网络,您可以执行如下操作:
importtorchimporttorchsnnclassTestNetwork(torchsnn.StigmergicModule):def__init__(self):torchsnn.StigmergicModule.__init__(self)self.linear=torch.nn.Linear(2,5)self.stigmergic=torchsnn.SimpleLayer(5,2)defforward(self,input):l1=torch.sigmoid(self.linear(input))l2=self.stigmergic(l1)returnl2net=TestNetwork()
顺序转矩
具有相同接口torch.nn.sequential的函数,用于构建顺序网络。
上一示例的相同网络可以使用:
importtorchimporttorchsnnnet=torchsnn.Sequential(torch.nn.Linear(2,5),torch.nn.Sigmoid(),torchsnn.SimpleLayer(5,2))
简单火炬手
在这一层中,只有阈值是stigmergic变量,它们的{em1}$stimuli是输出值。
全层火炬
在这一层中,阈值和权重都是stigmergic变量,它们的{em1}$stimuli分别是输出值和输入值。
引用
我们迫不及待地想看看你会用stigmergic神经网络来构建什么!
当你发表你的作品时,你可以用这个bibtex来引用我们:)
@article{galatolo_snn
, author = {Galatolo, Federico A and Cimino, Mario GCA and Vaglini, Gigliola}
, title = {Using stigmergy to incorporate the time into artificial neural networks}
, journal = {MIKE 2018}
, year = {2018}
}
贡献
这段代码是在gnu/gplv3下发布的,所以请随意分叉并提交更改,每个pr都有帮助。
如果您需要帮助,请致电galatolo.federico@gmail.com或致电@galatolo