【发布时间】:2018-05-07 14:21:05
【问题描述】:
我正在尝试为 Conv Networks 中的 MaxPooling 层实现 fprop,没有重叠和池化区域 2x2。为此,我需要将输入矩阵拆分为大小为 2x2 的矩阵,以便提取最大值。然后我正在创建一个掩码,稍后我可以在bprop 中使用它。为了进行拆分,我首先垂直拆分输入矩阵,然后水平拆分,然后分别使用vsplit、hsplit 和amax 找到最大值。但是,由于索引超出范围异常,这一直在崩溃,我不确定错误在哪里。有没有更简单的方法将 24 x 24 输入矩阵拆分为 144 个 2x2 矩阵,以便获得最大值。
为此,我正在执行以下操作:
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]
编辑:
这是reshape产生的输出:
我想要的是
[0 1
4 5]
[2 3
6 7]
等等……
【问题讨论】:
-
添加一个示例案例并向我们展示预期的输出?
-
@Divakar 在编辑中添加了示例
-
但是最终的预期输出是什么?这将有助于创建块 - stackoverflow.com/questions/16856788/…
标签: python numpy matrix machine-learning deep-learning