我想用來訓練網路的影像4000px*3000px
與40k
它們的大小差不多,按250
類排序。我制作了一個如下所示的 CNN:
model = keras.Sequential([
layers.Input((imgHeight, imgWidth, 1)),
layers.Conv2D(16, 3, padding = 'same'), # filters, kernel_size
layers.Conv2D(32, 3, padding = 'same'),
layers.MaxPooling2D(),
layers.Flatten(),
layers.Dense(250),
])
我如何找出layers.Conv2D(*16*, ...)
我需要的值?我如何找出layers.Dense(*250*)
我需要的值?
因為我無法開始訓練程序,所以記憶體不足。
uj5u.com熱心網友回復:
該Flatten()
層的輸出形狀為 9600 萬,因此模型的最終密集層有 240 億個引數,這就是記憶體不足的原因。您可以采取一些步驟來解決此問題:
嘗試將影像調整為較小的形狀,如果4000x3000x1
沒有必要,160x160x1 將是一個不錯的選擇。
嘗試使用更多Conv2D
層,然后使用MaxPool2D
層來減小輸入的大小,最后在最后使用Flatten
層,然后使用Dense
層。
例如:
model = keras.Sequential([
layers.Input((160, 160, 1)),
layers.Conv2D(32, 3, padding = 'same'),
layers.Conv2D(32, 3, padding = 'same'),
layers.MaxPooling2D((2,2)),
layers.Conv2D(64, 3, padding = 'same'),
layers.Conv2D(64, 3, padding = 'same'),
layers.MaxPooling2D((2,2)),
layers.Conv2D(128, 3, padding = 'same'),
layers.Conv2D(128, 3, padding = 'same'),
layers.MaxPooling2D((2,2)),
layers.Conv2D(256, 3, padding = 'same'),
layers.Conv2D(256, 3, padding = 'same'),
layers.MaxPooling2D((2,2)),
layers.Flatten(),
layers.Dense(512),
layers.Dense(250),
])
如果您正在執行分類任務,這種型別的架構將運行良好,并且不會耗盡記憶體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/468542.html
上一篇:無法將herokupostgres從愛好層升級到標準
下一篇:Django中間件登錄檢查