我(仍然)試圖在Tensorflow 2.0后端上使用Keras實現一個簡單的Unet網絡。我的模板和蒙版是1536x1536 RGB圖像(蒙版是黑白的)。根據本文,可以測量所需的內存量。我的模型在張量 [1,16,1536,1536] 上因內存分配錯誤而崩潰。使用上面文章中給出的等式,我計算了此張量所需的內存量:1 * 16 * 1536 * 1536 * 4 = 144 MB。我有GTX 1080 Ti,其中大約9 GB可用于Tensorflow。哪里出錯了?我錯過了什么嗎?以下是幾乎完全的回溯:我正在嘗試將嗅探時間轉換為秒數。我已經在Python Pandas DataFrame中查看了將timedelta64[ns]列轉換為秒,但是該解決方案不起作用。我想也許熊貓線可能有錯。print(sniffTime)print(type(sniffTime))輸出:821693000 nanoseconds<class 'numpy.timedelta64'>錯誤AttributeError: 'numpy.timedelta64' object has no attribute 'total_seconds'在線:df['PerSec']=df['PerSec'].div(sniffTime.total_seconds())2020-03-02 15:59:13.841967: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll2020-03-02 15:59:16.083234: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX22020-03-02 15:59:16.087240: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll2020-03-02 15:59:16.210856: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties: name: GeForce GTX 1080 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.607
2 回答

喵喔喔
TA貢獻1735條經驗 獲得超5個贊
您的情況是圖像的尺寸。
它不是像其他人在評論中所說的那樣的模型尺寸,而是圖像的輸入尺寸,需要更多的GPU內存才能進行處理。
在這種情況下,解決方案是用二倍的系數對圖像進行下采樣。您需要使用完全相同的因子劃分寬度和高度,以保持寬高比,從而使網絡即使在較小的圖像上也能學習,而不會丟失太多信息并引入失真。
您將能夠在768x768的GTX 1080上使用batch_size 1進行訓練(我有一臺GTX 1080Ti,我測試了幾個具有多個輸入維度的分段網絡)。如果由于某些原因,您的GPU消耗被其他進程(例如YT或類似進程)所消耗,那么將其降低到512x512肯定會起作用(即使在batch_size = 1上使用768x768,它也應該有效)

慕虎7371278
TA貢獻1802條經驗 獲得超4個贊
當然,一個張量可能會占用那么多內存,但你還必須保存網絡中的所有變量,以及要向后傳播的值。這使得計算操作要求變得復雜(盡管并非不可能)。網絡的操作空間非常大。
添加回答
舉報
0/150
提交
取消