优化python循环numpy
我正在手动实现神经网络的卷积层(要求),速度非常慢(每个实验12小时?) 不幸的是,我在python或numpy方面不是很好,我不知道如何摆脱导致这种情况的for循环 我曾尝试将numba与@jit(nopython=true)注释一起使用,但速度仍然非常慢。有人能帮我以优化的方式重写这个方法吗?或者至少给我指出正确的方向 我提到我必须使用python,所以没有办法摆脱它优化python循环numpy,python,numpy,machine-learning,vectorization,conv-neural-network,Python,Numpy,Machine Learning,Vectorization,Conv Neural Network,我正在手动实现神经网络的卷积层(要求),速度非常慢(每个实验12小时?) 不幸的是,我在python或numpy方面不是很好,我不知道如何摆脱导致这种情况的for循环 我曾尝试将numba与@jit(nopython=true)注释一起使用,但速度仍然非常慢。有人能帮我以优化的方式重写这个方法吗?或者至少给我指出正确的方向 我提到我必须使用python,所以没有办法摆脱它 @jit(nopython=True) def sum1(sliced, kernel, bias): retu
@jit(nopython=True)
def sum1(sliced, kernel, bias):
return np.sum(sliced*kernel) + bias
@jit(nopython=True)
def getfprop1(inputs, kernels, biases, noinputs, nooutputsc, kdim1, kdim2, outdim1, outdim2):
outputs = zero(noinputs, nooutputsc, outdim1, outdim2)
for i in range (noinputs):
input = inputs[i, :, :, :]
for h in range(outdim1):
for w in range(outdim2):
for c in range(nooutputsc):
vert_start = h
vert_end = h + kdim1
horiz_start = w
horiz_end = w + kdim2
sliced = input[:, vert_start:vert_end, horiz_start:horiz_end]
outputs[i, c, h, w] = sum1(sliced, kernels[c,:,:,:], biases[c])
return outputs
不使用内置卷积函数的任何原因?我想这会更合适-他们不允许我们:(问题似乎是
np.sum(
),你需要“手工”这也是。通过内联sum1
而不是将其作为函数调用,您可能会获得一些好处,并避免在4个级别的for循环中进行不必要的分配。这在C中无关紧要,但在Python中可以。我这样做是因为在numba中,他们建议使用jit来修饰我们正在使用的任何函数1.3.2节中没有使用的任何原因内置卷积函数-?我想这会更合适-他们不允许我们:(问题似乎是np.sum(
),你需要“手工”这也是。通过内联sum1
而不是将其作为函数调用,您可能会获得一些好处,并避免在4个级别的for循环中进行不必要的分配。这在C中无关紧要,但在Python中可以。我这样做是因为在numba中,他们建议使用jit来修饰我们在第1.3.2节中使用的任何函数