Python 不同大小的两层神经元之间的高斯连接模式

Python 不同大小的两层神经元之间的高斯连接模式,python,neural-network,gaussian,Python,Neural Network,Gaussian,我有代码来解决以下问题,但是它似乎太慢了(我认为是O(n^4))。帮助python初学者将正确的代码转换为可用的代码 神经元可以通过其层和二维索引来指定。例如,N{0}(1,1)是第一层、第二行、第二列中的神经元。 每个神经元位于二维空间,两层均匀地填充同一空间。因此,我们可以根据每个神经元的二维索引和其所在层的行/列数,为每个神经元分配一个(x,y)坐标。例如:假设第一层有s0行和列。然后,N{0}(1,1)将位于(x,y)=(1.5/s0,1.5/s0) 我必须指定两层神经元之间的连接模式。

我有代码来解决以下问题,但是它似乎太慢了(我认为是O(n^4))。帮助python初学者将正确的代码转换为可用的代码

神经元可以通过其层和二维索引来指定。例如,N{0}(1,1)是第一层、第二行、第二列中的神经元。 每个神经元位于二维空间,两层均匀地填充同一空间。因此,我们可以根据每个神经元的二维索引和其所在层的行/列数,为每个神经元分配一个(x,y)坐标。例如:假设第一层有s0行和列。然后,N{0}(1,1)将位于(x,y)=(1.5/s0,1.5/s0)

我必须指定两层神经元之间的连接模式。假设第一层是s0乘s0,下一层是s1乘s1。对于每一层,我可以通过先列给神经元一个唯一的索引。然后,我的函数的输出将是一个包含s0*s0行和s1*s1列的矩阵:每个条目指定从层0到层1的连接强度。我希望这个连接的强度是高斯函数的值,在两个神经元的空间位置(x,y)之间的差值处计算

我的第一种方法是使用嵌套for循环,但速度非常慢:

def multiscaleNormalConnection(s0,s1,standardDeviationOfGaussian):  
  C = zeros((scale1**2),(scale2**2))  #connection matrix
  sigma = matrix([[standardDeviationOfGaussian**2, 0],[0, standardDeviationOfGaussian**2]])
  coeff = power(2*pi*linalg.det(sigma),-.5)
  for i in range(C.shape[0]):
    for j in range(C.shape[1]):
      inColumn = i/scale1
      inX = float(inColumn)/s0
      inRow = mod(i,scale1)
      inY = float(inRow)/s0
      outColumn = j/s1
      outX = float(outColumn)/s1
      outRow = mod(j,scale1)
      outY = float(outRow)/s1
      dev = array([outX-inX,outY-inY])
      C[i,j] = coeff*exp(-0.5*dot(dot(dev.T,sigma.I),dev))              
  return C
也许有某种方法可以计算出您事先需要的所有值? 有什么python技巧可以帮助我加快速度吗?如果是matlab,我会尝试将代码矢量化,但我需要用python编写


欢迎有任何想法!谢谢。

您正在使用NumPy,对吗?(如果不是,你真的应该)NumPy像Matlab一样对事物进行矢量化…我已经在使用NumPy了,但我不知道有什么函数/特性可以让我对其进行矢量化。我在MATLAB中得到的唯一改进是尝试在GPUarray上使用arrayfun。