Conv NetworksのMaxPooling層にfpropを実装しようとしていますが、重複していない領域と2x2をプールしています。これを行うには、入力行列を2x2の行列に分割して最大値を抽出する必要があります。私は後でbprop
で使用できるマスクを作成しています。分割を実行するには、入力行列を最初に垂直方向に分割してから水平方向に分割し、次にvsplit
,hsplit
およびamax
をそれぞれ使用して最大値を見つけます。ただし、インデックス外の例外を使用してクラッシュすることはありますが、エラーの原因はわかりません。 24×24の入力行列を144の2×2行列に分割する簡単な方法がありますので、最大値を得ることができます。行列を正方形の2x2サブ行列に分割する - maxpooling fprop
私はそうするには、以下のやっている:これは、リシェイプによって生成された出力である
:
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]
EDITを
私が代わりに希望は何されて
[0 1
4 5]
[2 3
6 7]
のように...
サンプルケースを追加し、期待される出力を表示しますか? – Divakar
@Divakarは編集の例を追加 – Alk
しかし、最終的に期待される出力は何ですか?これはブロックの作成に役立ちます - https://stackoverflow.com/questions/16856788/slice-2d-array-into-smaller-2d-arrays – Divakar