Keras - Dense and Conv2D values



我想用来训练网络的图像大约是4000px*3000px40k的大小,在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*),一个值我需要?

因为我不能开始训练过程,我的内存快用完了。

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),
])

如果你正在做分类任务,这种类型的架构将会很好地工作,并且不会耗尽内存。

最新更新