資料:nhwc
權重:oihw
void convop(blob input,blob* output,conv_s convinfo, wtparam param)
}} }
output->data = malloc(sizeof(float) * output->n * output->h * output->w * output->c);
memset(output->data, 0, sizeof(float) * output->n * output->h * output->w * output->c);
//卷積計算
for(int n = 0; n < padedblob.n; n++)}}
blobset(n, inh / sh, inw / sw, oc, *output, sum);}}
}}
}
def convop(inblob, node_size, node_shape, param):
"""param : oihw
return: outblob->nparray
"""param = param[0]
kh = int(node_shape[1][0])
kw = int(node_shape[1][1])
sh = int(node_shape[2][0])
sw = int(node_shape[2][1])
ph = int(node_shape[3][0])
pw = int(node_shape[3][1])
if ph != 0 or pw != 0:
# 補邊兒
newn = inblob.shape[0]
newh = inblob.shape[1] + 2 * ph
neww = inblob.shape[2] + 2 * pw
newc = inblob.shape[3]
paddedblob = np.zeros((newn, newh, neww, newc), dtype=np.float32)
paddedblob[:, ph:ph + inblob.shape[1], pw:pw + inblob.shape[2], :] = inblob
else:
paddedblob = inblob
outblob = np.zeros(tuple(node_size), dtype=np.float32)
# 權重是oihw,而資料是nhwc,為了h與w能夠在numpy中通過廣播的方式計算,需要把權重轉置成ohwi,numpy的轉置幾乎不消耗時間,因為該轉置是不改變資料在記憶體中表示的。
# 權重:oihw ohwi
# 資料: nhwc
param = np.transpose(param, [0, 2, 3, 1])
#卷積計算
for oc in range(param.shape[0]): # o of weight
for h in range(outblob.shape[1]): # h of outblob
for w in range(outblob.shape[2]):
outblob[:, h, w, oc] = np.sum(paddedblob[
:,h * sh: h * sh + param.shape[1],
w * sw: w * sw + param.shape[2],
:] * param[oc, :, :, :])
return outblob
四維陣列 遊戲
小g正在玩一款遊戲,遊戲地圖上有n個點 1到n編號 這些點之間有m條無向邊 沒有重邊 一次系統重新整理會在某個時刻在某點重新整理出一定數量的怪物,系統重新整理出來的怪物只會存在1秒,下一秒就會消失。如果那個時刻小g正好在那個點,那麼小g可以秒殺 秒殺所用時間忽略不計,下同 這個點上的所有怪物。另外,...
四維陣列 遊戲
題目描述 小g正在玩一款遊戲,遊戲地圖上有n個點 1到n編號 這些點之間有m條無向邊 沒有重邊 一次系統重新整理會在某個時刻在某點重新整理出一定數量的怪物,系統重新整理出來的怪物只會存在1秒,下一秒就會消失。如果那個時刻小g正好在那個點,那麼小g可以秒殺 秒殺所用時間忽略不計,下同 這個點上的所有怪...
專題 四維DP
題目描述 設有n n的方格圖 n 9 我們將其中的某些方格中填入正整數,而其他的方格中則放入數字0。如下圖所示 見樣例 a0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4 0 0 0 0 15...