簡答
這是一個不會消失的問題。這是CPU到GPU緩衝的帶寬問題。您已經增加了必須通過總線發送的大量數據。
可能的解決方法
的你正在嘗試做的實質是在您的模型之前的幀。如果這就是你想要完成的,那麼還有另一種方法。
如果訓練批次不是堆疊圖像的隨機選擇,而是訓練批次是常規圖像,但是全部按時間順序排列。
在第二種情況下,您將發送只有3個通道的圖像,但圖像不會出現故障。
我們來探討一下假設。
首先,您仍然可以通過更改每個批次的開始時間和結束時間來創建隨機抽樣,並隨機選擇要選擇的視頻。
其次,可以使用[批次,身高,體重,信道]張量來在GPU上生成一個新的張量是
[ batch[1:], height, width, channel] - [ batch[:-1], height, width, channel]
and assign it to diffTensor
,然後連接以下張量
origTensor [ batch[5:-0], height, width, channel]
diffTensor [ batch[5:-0], height, width, channel]
diffTensor [ batch[4:-1], height, width, channel]
diffTensor [ batch[3:-2], height, width, channel]
diffTensor [ batch[2:-3], height, width, channel]
diffTensor [ batch[1:-4], height, width, channel]
diffTensor [ batch[0:-5], height, width, channel]
如果你想5「回頭看」
這會完成什麼?那麼,如果你發送了100張圖片給GPU,那麼這個網絡將能夠生成95張圖片+差異圖片,這個圖片僅用於發送100張圖片的網絡價格,就好像你試圖發送95張圖片+每個人都必須支付發送500張圖片的網絡價格。基本上你可以減少你的網絡成本差不多x5
你在修改啓動代碼來增加通道? – ktb
我發現視頻中的七個幀的差異,然後堆疊它們,在這種情況下,而不是具有3個通道的圖像,我有18個通道的圖像作爲輸入到CNN。我已經修改了「donkey_simple.lua」,它獲取圖像並獲取視頻中幀的差異並堆疊它們,並且CNN的第一層而不是3,將其更改爲18個通道並在代碼中有一些張量大小。「main.lua」的這個部分「輸入:複製(data_im:squeeze())」需要很多時間。我發現這不是擠壓的問題。 –
您是否嘗試減小批量大小以將包含相同字節數的批次發送到gpu? – fonfonx