【发布时间】:2019-10-11 14:26:51
【问题描述】:
我正在使用 numpy 构建卷积神经网络,但我不确定我对 3D (HxWxD) 输入图像的池化处理是否正确。
例如,我有一个形状为 (12x12x3) 的图像,我将其卷积为 (6x6x3),并且我想执行最大池化以获得 (3x3x3) 图像。为此,我选择了 (2x2) 的过滤器大小和 2 的步幅。
output_size = int((conv.shape[0]-F)/S + 1)
pool = np.zeros((output_size,output_volume,3)) # pool array
for k in range(conv.shape[-1]): # loop over conv depth
i_stride = 0
for i in range(output_size):
j_stride = 0
for j in range(output_size):
pool[i,j,k] = np.amax(conv[i_stride:i_stride+F,
j_stride:j_stride+F,k],0)
j_stride+=S
i_stride+=S
对于我的卷积数组conv[:,:,0]I obtain the following的第一个通道。
将此与最大池化数组pool[:,:,0]I get 的第一个通道进行比较。乍一看,我可以看出池化操作不正确,conv[0:2,0:2,0](大部分是灰色)绝对不是pool[0,0,0](黑色),你会认为它是灰色阴影之一。所以,我确信这里肯定有问题。我的 for 循环或我正在进行的两个比较都关闭了。
如果有人能帮助我更好地理解对 3 维数组的池化操作,那肯定会有所帮助。
【问题讨论】:
标签: python arrays tensorflow neural-network conv-neural-network