三维Numpy阵列索引(卷积网络)

2024-05-01 20:59:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个执行卷积的函数,我在尝试使用numpy创建输出卷时遇到了一些挑战。具体来说,我有一个输入图像,它表示为一个维度数组(150150,3)。现在,我想用一组kernels num\u kernels来卷积这个图像,它们是维(4,4,3)的数组,我希望这些kernels以2的步长在图像上移动。我的思考过程是:

(1)我将创建一个输出数组,该数组由从输入数组中取出(4,4,3)个大小的块组成,并将这些块扩展到行中,最后生成一个大的矩阵。你知道吗

(2)然后,我将创建一个由所有(4,4,3)内核组成的参数数组,这些内核将展开成行,这也将生成一个大的矩阵。你知道吗

(3)然后我可以将这些矩阵点积在一起,并将输出矩阵重塑为适当的维数。你知道吗

我的粗略psuedo代码开始数字(1)如下。你知道吗

def Convolution(input, filter_size, num_filters, stride):
    X = input 
    output_Volume = np.zeros(#dimensions)
    weights = np.zeros(#dimensions)
    #get weights from other function
    for width in range(0,150,2):
        for height in range(0,150,2):
            row = X(#indexes here to take out chunk).flatten
            output_Volume.append(row) #something of this sort
    return #dot product output volume and weights   

如果有人能提供一个具体的代码示例,说明如何在Python中实现这一点(最有帮助的是对(1)和(2)的回答)(我使用的是numpy),那将不胜感激。谢谢您!你知道吗


Tags: 代码图像numpyinputoutputnpzeros矩阵