part 4: topologically structured networks

incorporating structure in networks of point neurons

如果我们使用神经元的生物学详细模型,那么很容易理解和实现拓扑的概念,因为我们已经有树突状乔木,轴突等,它们是神经系统内连接的物理先决条件。 但是,我们仍然可以通过使用点神经元网络来获得一定程度的特异性。

无论是在拓扑结构还是日常意义上,结构都可以被看作是一组规则,用于规定对象的位置以及它们之间的关系。 在点神经元的网络中,我们可以区分三种类型的特异性:

  • 细胞类型特异性 - 那里有什么种类的细胞?
  • 位置特异性 - 细胞在哪里?
  • 投影特异性 - 他们投射哪些细胞,以及如何?
  • 在之前的讲义中,我们看到我们可以使用Connect()在网络之间创建确定性或随机选择的连接。 如果我们想创建融合了空间位置和空间连通性配置文件的网络模型,现在是时候转向拓扑模块。 注意:有关拓扑模块使用的完整文档在NEST拓扑用户手册(NTUM)[1]中提供,后者在以下页面中被引用为完整源代码。

    the nest.topology module

    nest.topology模块允许我们创建具有给定空间组织的节点群体,指定神经元如何连接的连接配置文件,并提供高级连接例程。 因此,我们可以通过设计连接配置文件来创建结构化网络,从而为细胞类型,位置和投影提供所需的特异性。

    结构化网络的生成分三步进行,每个步骤将在后面的章节中进行更详细的介绍:

  • 定义图层,在其中我们在网络的一层中分配神经元的布局和类型。

  • 定义连接配置文件,我们在那里生成我们希望我们的连接具有的配置文件。 每个连接字典指定一个连接类的属性,并包含允许我们调整配置文件的参数。 这些与选择目标(掩码和内核)的依赖位置的可能性以及单元类型特异性有关,即层中的哪些类型的单元可以参与连接类(源和目标)。

  • 连接图层,我们在图层之间应用连接字典,等同于群体特异性。 请注意,可以在两个图层之间应用多个字典,就像一个图层可以连接到它自己一样。

  • 辅助,其中我们通过nest.PrintNetwork()或包含在拓扑模块中的可视化功能可视化上述步骤的结果,并查询连接以供进一步分析。

  • defining layers

    用于定义图层的代码遵循以下模板:

    1. import nest.topology as topp
    2. my_layer_dict = {...} # see below for options
    3. my_layer = topp.CreateLayer(my_layer_dict)

    其中my_layer_dict将定义图层的元素及其位置。i

    填充图层的节点的选择是使用元素键指定的。 目前,我们只关心创建简单图层,其中每个元素来自同质群体。 然后,该字典条目的对应值应该是神经元的模型类型,它可以是NEST集合中的现有模型,或者是我们之前使用CopyModel()定义的模型。

    我们接下来必须决定节点是否应该以基于网格或自由(离网)的方式放置,这相当于要求“我们的网络元素能否定期和均匀地放置在2D网络中,或者 我们需要告诉他们他们应该在哪里?“。

    1 - On-grid

    我们必须明确指定网格的大小和间距,数量或行数m和列数n以及范围(图层大小)。 由此确定网格间距,并且n×m个元素对称排列。 请注意,我们也可以为网格指定一个中心,否则默认偏移量就是原点。

    以下片段产生图A:

    1. layer_dict_ex = {"extent" : [2.,2.], # the size of the layer in mm
    2. "rows" : 10, # the number of rows in this layer ...
    3. "columns" : 10, # ... and the number of columns
    4. "elements" : "iaf_psc_alpha"} # the element at each (x,y) coordinate in the grid

    2 - Off grid

    我们只定义元素,它们的位置和范围。 创建的元素的数量等于位置列表的长度。 这个选项允许我们分配神经元的方式有更多的灵活性。 请注意,我们还应该指定范围,如果这些头寸超出了默认值(范围大小= [1,1]和原点为中心)。 有关更多详细信息,请参见NUTM中的第2.2节。

    以下片段产生图B:

    1. import numpy as np
    2. # grid with jitter
    3. jit = 0.03
    4. xs = np.arange(-0.5,.501,0.1)
    5. poss = [[x,y] for y in xs for x in xs]
    6. poss = [[p[0]+np.random.uniform(-jit,jit),p[1]+np.random.uniform(-jit,jit)] for p in poss]
    7. layer_dict_ex = {"positions": poss,
    8. "extent" : [1.1,1.1],
    9. "elements" : "iaf_psc_alpha"}

    注意:拓扑模块确实支持3D图层,但这不在本讲义范围内。

    以下是可以使用的所有参数以及它们主要用于基于网格还是空闲层的概述:

    Advanced

    复合图层也可以创建。 此图层类型扩展了基于网格的图层,并允许我们在每个网格位置定义大量神经元和其他元素,例如poisson_generators。 NTUM的第2.5节提供了完整的解释。 这种方法的优点是,如果我们想要一个图层,其中每个元素或子网络具有相同的组件组成,那么定义一个具有这些属性的图层非常容易。 举一个简单的例子,我们考虑一个元素的网格,其中每个元素包含4个锥体细胞,1个中间神经元,1个泊松生成器和1个噪声发生器。 相应的代码是:

    1. nest.CopyModel("iaf_psc_alpha","pyr")
    2. nest.CopyModel("iaf_psc_alpha","inh", {"V_th": -52.})
    3. comp_layer = topp.CreateLayer({"rows":5,"columns":5,
    4. "elements": ["pyr",4,"inh","poisson_generator","noise_generator"]})

    defining connection profiles

    为了定义我们想要的神经元群体之间的连接类型,我们指定了一个连接字典。

    任何连接字典的唯一两个必需参数是connection_type和mask。 所有其他人都允许我们通过调整连接的可能性,突触类型,与连接相关的权重和/或延迟,或连接数量来调整我们的连接配置文件,并指定可以参与的单元类型的限制 连接类。

    NTUM的第3章全面讨论了所有不同的可能性,建议您在那里了解不同的约束条件,并阅读其中列出的不同示例。 以下是设置连接配置文件的一些代表性示例,下表列出了可以使用的参数。

    1. # Circular mask, gaussian kernel.
    2. conn1 = { "connection_type":"divergent",
    3. "mask": {"circular":{"radius":0.75}},
    4. "kernel": {"gaussian":{"p_center":1.,"sigma":0.2}},
    5. "allow_autapses":False
    6. }
    7. # Rectangular mask, constant kernel, non-centered anchor
    8. conn2 = { "connection_type":"divergent",
    9. "mask": {"rectangular":{"lower_left":[-0.5,-0.5],"upper_right":[0.5,0.5]},
    10. "anchor": [0.5,0.5],
    11. },
    12. "kernel": 0.75,
    13. "allow_autapses":False
    14. }
    15. # Donut mask, linear kernel that decreases with distance
    16. # Commented out line would allow connection to target the pyr neurons (useful for composite layers)
    17. conn3 = { "connection_type": "divergent",
    18. "mask": {"doughnut":{"inner_radius":0.1,"outer_radius":0.95}},
    19. "kernel": {"linear": {"c":1.,"a":-0.8}},
    20. #"targets":"pyr"
    21. }
    22. # Rectangular mask, fixed number of connections, gaussian weights, linear delays
    23. conn4 = { "connection_type":"divergent",
    24. "mask": {"rectangular":{"lower_left":[-0.5,-0.5],"upper_right":[0.5,0.5]}},
    25. "number_of_connections": 40,
    26. "weights": {"gaussian":{"p_center":J,"sigma":0.25}},
    27. "delays" : {"linear" :{"c":0.1,"a":0.2}},
    28. "allow_autapses":False
    29. }

    connecting layers

    连接图层是最简单的步骤:定义了源图层,目标图层和连接字典,我们只需使用函数topp.ConnectLayers():

    1. ex_layer = topp.CreateLayer({"rows":5,"columns":5,"elements":"iaf_psc_alpha"})
    2. in_layer = topp.CreateLayer({"rows":4,"columns":4,"elements":"iaf_psc_alpha"})
    3. conn_dict_ex = {"connection_type":"divergent","mask":{"circular":{"radius":0.5}}}
    4. # And now we connect E->I
    5. topp.ConnectLayers(ex_layer,in_layer,conn_dict_ex)

    请注意,我们可以定义多个字典,多次使用相同的字典并连接到同一个图层:

    1. # Extending the code from above ... we add a conndict for inhibitory neurons
    2. conn_dict_in = {"connection_type":"divergent",
    3. "mask":{"circular":{"radius":0.75}},"weights":-4.}
    4. # And finish connecting the rest of the layers:
    5. topp.ConnectLayers(ex_layer,ex_layer,conn_dict_ex) # Connect E->E
    6. topp.ConnectLayers(in_layer,in_layer,conn_dict_in) # Connect I->I
    7. topp.ConnectLayers(in_layer,ex_layer,conn_dict_in) # Connect I->E

    visualising and querying the network structure

    有两种主要方法可用于检查我们的网络是否正确构建:


  • nest.PrintNetwork(depth=1)

    以文本形式打印网络中的所有神经元和子网。 这是检查复合图层层次结构的好方法;

  • create plots using functions in nest.topology

    有三种功能可以结合使用:

    这使我们能够生成与NUTM和本讲义一起使用的情节。 有关更多详细信息,请参阅NTUM的4.2节。

  • 除了已经在NTUM 4.1节中列出的功能之外,其他有用的功能可能有所帮助:

    PyNest——part 4: topologically structured networks的更多相关文章

    1. Pixel Recurrent Neural Networks翻译

      Pixel Recurrent Neural Networks 目前主要在用的文档存放: https://www.yuque.com/lart/papers/prnn github存档: https: ...

    2. [转]GAN论文集

      really-awesome-gan A list of papers and other resources on General Adversarial (Neural) Networks. Th ...

    3. ArcEngine开发各种几何错误代码

      E_GEOMETRY_AMBIGUOUSPARTTYPE - Static variable in interface com.esri.arcgis.geometry.esriGeometryErr ...

    4. Text Classification

      Text Classification For purpose of word embedding extrinsic evaluation, especially downstream task. ...

    5. STA之RC网

      STA的主要工作是计算电路网络的延时,如今的电路网络还是由CMOS cell和net组成的,所以STA所要计算的延时仍是电容的充放电时间.等量子计算机普及的时候,如今的这一套理论都将随着科技的进步被丢 ...

    6. PyNest——part 3: connecting networks with synapses

      part 3: connecting networks with synapses parameterising synapse models NEST提供了各种不同的突触模型. 您可以使用命令nes ...

    7. PyNest——Part1:neurons and simple neural networks

      neurons and simple neural networks pynest – nest模拟器的界面 神经模拟工具(NEST:www.nest-initiative.org)专为仿真点神经元的 ...

    8. Temporal Action Detection with Structured Segment Networks (ssn)【转】

      Action Recognition: 行为识别,视频分类,数据集为剪辑过的动作视频 Temporal Action Detection: 从未剪辑的视频,定位动作发生的区间,起始帧和终止帧并预测类别 ...

    9. [转]Neural Networks, Manifolds, and Topology

      colah's blog Blog About Contact Neural Networks, Manifolds, and Topology Posted on April 6, 2014 top ...

    随机推荐

    1. continue和pass測试

      >>> for i in range(1,10): print i try:int('sdfa') except:pass 1 2 3 4 5 6 7 8 9 >>> ...

    2. Unix系统编程()main函数的命令行参数

      命令行参数输入双引号是什么效果? 好像可以去空格化.

    3. 手把手教你Chrome扩展开发:本地存储篇

      手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩展二:为html添加行为 手把手教你开发Chrome扩展三:关于本地存储数据 HTML5 ...

    4. 【Mac + Python + Selenium】之PyCharm配置Selenium自动化

      一.安装PyCharm 1.下载地址: Pycharm编辑器官网下载地址 2.安装完成之后打开,一路下去点击,直到填写注册码,参考: <[转载][Pycharm编辑器破解步骤]之idea和Pyc ...

    5. datagrid 溢出文本显示省略号

      .datagrid-cell, .datagrid-cell-group, .datagrid-header-rownumber, .datagrid-cell-rownumber{ -o-text- ...

    6. Easyui data方法扩展finder

      finder: function(jq, conditions){ if(!$(jq).data("OriginalData")){ $(jq).data("Origin ...

    7. 一步一步安装Git控件版本工具

      Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git的读音为/gɪt/.Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.[2 ...

    8. MFC多国语言——资源副本

      此随笔主要参考了http://www.cnblogs.com/xianyunhe/archive/2011/09/02/2163842.html 为软件提供多国语言的支持的具体实现方法有很多,但基本原 ...

    9. servlet各版本区别以及dynamic web module 版本之间的区别

      java的web系统有多种类型,比如静态的和动态的,然后动态的java web project要设置dynamic web module,也就是动态网页模型,他必须要喝对应的服务器搭配好了才能跑,今天 ...

    10. linux DNS服务

      DNS服务器的安装和配置 首先在终端输入命令#vi  /etc/apt/sources.list 输入更新源 # kali repos installed by TARDIS deb http://h ...