我试图在没有重叠和池区2x2的Conv网络中实现fprop的MaxPooling层。为此,我需要将输入矩阵拆分为2x2大小的矩阵,以便提取最大值。然后我正在创建一个掩码,稍后可以在bprop
中使用。为了进行拆分,我首先垂直拆分输入矩阵,然后水平拆分,然后分别使用vsplit
、hsplit
和{
为此,我将执行以下操作:
for i in range(inputs.shape[0]):
for j in range(inputs.shape[1]):
for k in range(inputs.shape[2] // 2):
for h in range(inputs.shape[3] // 2):
outputs[i,j,k,h] = np.amax(np.hsplit(np.vsplit(inputs[i,j], inputs.shape[2] // 2)[k], inputs.shape[1] // 2)[h])
max_ind = np.argmax(np.hsplit(np.vsplit(inputs[i,j], inputs.shape[2] // 2)[k], inputs.shape[1] // 2)[h])
max_ind_y = max_ind // inputs.shape[2]
if (max_ind_y == 0):
max_ind_x = max_ind
else:
max_ind_x = max_ind % inputs.shape[3]
self.mask[i,j,max_ind_y + 2 * k, max_ind_x + 2 * h] = outputs[i,j,k,h]
编辑:
这是通过整形产生的输出:
我想要的是
^{pr2}$等等。。。在
步骤1:获取
max_ind_x
,max_ind_y
我们需要得到每个块的max元素的行、列索引-
步骤2:使用argmax places从输入设置输出数组
然后,看看你的代码,你似乎在试图创建一个输出数组,其中的
^{pr2}$argmax
个位置是用输入数组中的值设置的。因此,我们可以-最后,我们可以得到输出的2D形状,这将是一个很好的验证步骤来验证原始输入
inputs
-样本输入,输出-
这在} :
skimage.util
中实现为^{相关问题 更多 >
编程相关推荐