Keras - 密集和 Conv2D 值

Keras - Dense and Conv2D values

我想用来训练网络的图像大约有 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*)

因为我无法开始训练过程,所以我 运行 内存不足。

Flatten() 层的输出形状为 9600 万,因此模型的最终密集层有 240 亿个参数,这就是你 运行ning 内存不足的原因。您可以采取一些步骤来解决此问题:
尝试将您的图像调整为较小的形状,如果 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),
])

如果您正在执行分类任务,这种架构会很好地工作,并且不会 运行 内存不足。