ValueError: invalid axis for this array in `source` argument

1、bug背景

在我訓練模型的過程中,我的模型輸入本來是一個(batchsize,H,W,channel)的tensor,但是我想要換成(batchsize,channel,H,W),也就是我想把第一維度和第三維度(初始值是0維)調換。

2、解決方案

網上介紹的解決方案是採用moveaxis這個函數,具體的使用方法如下:

import numpy as np
x = np.moveaxis(x, 1, 3)
#將第一維移到第三維位置,其餘不變
#即(batch,H,W,channel)變成(batch,channel,H,W)

當然,moveaxis這個函數也可以把第三維移到第一維的位置其餘不變,只要換一下參數即可。
但是,就在我使用了上面的函數後,我報了題目中這個錯,經過思考我明白了:因爲這個moveaxis針對的對象x應該是一個np.ndarray的類型,而我們的x呢,是一個tensor類型,類型不匹配,所以報錯!!

那麼,我們的問題就變成了如何將一個tensor類型轉換爲np.array了。查網上講的話可能會說先創建一個session會話後用eval函數轉換,如果你的tensor是一個常量,自然可以。但如果你的tensor只是一個placeholder tensor,那麼新的bug又出現了,詳見我的bug之路中這篇:將placeholder轉換爲numpy——feed

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章