手寫四維卷積,python and C

2021-09-25 13:47:45 字數 1815 閱讀 8218

資料: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...