我正在探索这些“神经元”之间的神经网络模拟,如下图所示。我遇到的困难是把每个神经元连接到它最近的邻居。我第一次想到我可以通过元组解压来做这件事,但是它变得非常复杂。
def _connect_cells(self):
for source, target in zip(self.cells, self.cells[1:] + [self.cells[0]]):
nc = h.NetCon(source.soma(0.5)._ref_v, target.syn, sec=source.soma)
nc.weight[0] = self._syn_w
nc.delay = self._syn_delay
source._ncs.append(nc)
在本示例代码片段中,元组解压缩被配置为I神经元连接到i+1神经元直到神经元n,当它到达神经元n时,n神经元将连接回第一神经元。这个元组解包是为了一个类似于神经元环的网络结构。
然而,在我的例子中,这个结构是一个由n个神经元组成的网格。下面的列表对应于神经元:
20 21 22 23 24
15 16 17 18 19
10 11 12 13 14
5 6 7 8 9
0 1 2 3 4
上面的元组解压不适用于此,因为神经元4不应该连接到神经元5。由于神经元是如何创建的,这个列表从左到右。我正试图实现的确切联系如下图所示。可以手动完成它(这将需要大量代码),但是如何使用for循环与示例代码相同的方式来处理它呢?
发布于 2022-02-28 11:17:33
如果我正确理解,你希望每个神经元在一个方格中连接到每一个相邻的神经元,水平,垂直或对角线。这将完成以下工作:
def connect(side):
maxcol = side-1
maxrow = side*maxcol
neurons = list(range(side**2))
conns = []
for col in range(side):
for row in range(0, side**2, side):
if col < maxcol: #connect left
conns.append((neurons[row+col],neurons[row+col+1]))
if row > 0: #connect left up
conns.append((neurons[row+col],neurons[row+col+1-side]))
if row < maxrow: #connect left down
conns.append((neurons[row+col],neurons[row+col+1+side]))
if row < maxrow: #connect down
conns.append((neurons[row+col],neurons[row+col+side]))
return conns
connect(5)
[(0, 1), (0, 6), (0, 5), (5, 6), (5, 1), (5, 11), (5, 10), (10, 11), (10, 6), (10, 16), (10, 15), (15, 16), (15, 11), (15, 21), (15, 20), (20, 21), (20, 16), (1, 2), (1, 7), (1, 6), (6, 7), (6, 2), (6, 12), (6, 11), (11, 12), (11, 7), (11, 17), (11, 16), (16, 17), (16, 12), (16, 22), (16, 21), (21, 22), (21, 17), (2, 3), (2, 8), (2, 7), (7, 8), (7, 3), (7, 13), (7, 12), (12, 13), (12, 8), (12, 18), (12, 17), (17, 18), (17, 13), (17, 23), (17, 22), (22, 23), (22, 18), (3, 4), (3, 9), (3, 8), (8, 9), (8, 4), (8, 14), (8, 13), (13, 14), (13, 9), (13, 19), (13, 18), (18, 19), (18, 14), (18, 24), (18, 23), (23, 24), (23, 19), (4, 9), (9, 14), (14, 19), (19, 24)]
https://stackoverflow.com/questions/71293782
复制相似问题