s
许多元素。阵列
new_h = (h - k_h)//s + 1
new_w = (w - k_w)//s + 1
s_h, s_w = in.strides
new_shape = (new_h, new_w,k_h,k_w)
new_strides = (s_h * s, s_w * s, s_h, s_w)
strided_in = np.lib.stride_tricks.as_strided(in,new_shape, new_strides)
由给出
(k_h, k_w)
我给出了形状的阵列。
我需要计算形状的数组in
,每个条目都(几乎)给出:
s
I.E。对于每个块映射到
out
的每个块中,
out = np.max(strided_arr, axis = (2,3))
递增。
问题是grad_out
可以重复的元素,这种方法将超越最好用一个例子说明这个问题。
,我有基本阵列
out.shape
grad_in
我需要能够区分
in.shape
和
grad_in[i,j] = 0
for m, row in enumerate(strided_in):
for n, block in enumerate(row):
grad_in[i,j] += grad_out[m,n] * (np.max(block) == in[i,j])
我知道存在grad_out[m,n]
存在,但是此功能是用于数组的,而不是数组的元素
我想出了一个非常刺耳的解决方案,但是它优化了,希望有人能提出更好的东西。我们做:
in[i,j]
我们保持数组结构,并能够将内存位置与out
进行比较