Python三維矩陣的歸一化操作

在深度學(xué)習(xí)任務(wù)中,把數(shù)據(jù)丟給模型訓(xùn)練之前一般都要對數(shù)據(jù)進行歸一化操作,操作的方法有很多,這里用常見的減均值除方差舉例。
在對三維矩陣的每層進行歸一化操作之后,關(guān)鍵一步是要記著要對每層進行疊加操作,否則參加訓(xùn)練的數(shù)據(jù)內(nèi)容還是未經(jīng)歸一化的數(shù)據(jù)。
例如對一個z軸方向有20層,大小為256*256的三維矩陣imgs進行歸一化

    for i , brain_slice in enumerate(imgs):
        brain_slice = (brain_slice - np.mean(brain_slice))/np.std(brain_slice)
        #下面的if...else很關(guān)鍵,如果沒有這個疊加操作,你會發(fā)現(xiàn)for循環(huán)結(jié)束后imgs里面的數(shù)據(jù)還是未歸一化的數(shù)據(jù)
        if i == 0:
            imgs = np.reshape(brain_slice, [1,brain_slice.shape[0],brain_slice.shape[1]])
        else:
            imgs = np.concatenate((imgs, np.reshape(brain_slice, [1,brain_slice.shape[0],brain_slice.shape[1]])), axis = 0)     

此代碼是在Keras框架中使用,因此數(shù)據(jù)第一個維度是z軸。
還有一種更加簡便的操作,但是這種操作要確定imgs的數(shù)據(jù)類型是否為float型,如果是int型要先轉(zhuǎn)成float型。因為在進行歸一化操作的時候,肯定會產(chǎn)生float型數(shù)據(jù),如果imgs原始是int型,那歸一化產(chǎn)生的數(shù)據(jù)也會轉(zhuǎn)為int型,這樣會大大降低歸一化的準(zhǔn)確性。

    #如果原始imgs是int型,那下面的第一句代碼是很有必要的
    imgs = np.array(imgs, np.float32)
    for i in range(imgs.shape[0]):
        imgs[i,:,:] = (imgs[i,:,:] - np.mean(imgs[i,:,:]))/np.std(imgs[i,:,:])

順便也介紹一下數(shù)據(jù)類型的查看方式。舉個例子,brain_label是一個三維矩陣,下圖是它屬性的查看方式。

print.png


result.png

要注意區(qū)分dtype和type的不同。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容