tensorflow - Keras CNN 如何减少大图像尺寸的 GPU 内存使用?

标签 tensorflow machine-learning keras gpu conv-neural-network

我正在尝试训练 cnn-lstm 模型,我的样本图像大小是 640x640。

我有 GTX 1080 ti 11GB。

我正在使用带有 tensorflow 后端的 Keras。

这是模型。

img_input_1 = Input(shape=(1, n_width, n_height, n_channels))

conv_1 = TimeDistributed(Conv2D(96, (11,11), activation='relu', padding='same'))(img_input_1)

pool_1 = TimeDistributed(MaxPooling2D((3,3)))(conv_1)

conv_2 = TimeDistributed(Conv2D(128, (11,11), activation='relu', padding='same'))(pool_1)

flat_1 = TimeDistributed(Flatten())(conv_2)

dense_1 = TimeDistributed(Dense(4096, activation='relu'))(flat_1)

drop_1 = TimeDistributed(Dropout(0.5))(dense_1)

lstm_1 = LSTM(17, activation='linear')(drop_1)

dense_2 = Dense(4096, activation='relu')(lstm_1)

dense_output_2 = Dense(1, activation='sigmoid')(dense_2)

model = Model(inputs=img_input_1, outputs=dense_output_2)

op = optimizers.Adam(lr=0.00001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.001)

model.compile(loss='mean_absolute_error', optimizer=op, metrics=['accuracy'])

model.fit(X, Y, epochs=3, batch_size=1)

现在使用这个模型,我只能在图像大小调整为 60x60 时使用训练数据,任何更大的尺寸都会耗尽 GPU 内存。

我想使用尽可能大的尺寸,因为我想保留尽可能多的歧视性信息。 (y 标签将是 0 - 640 之间的鼠标屏幕坐标)

在许多其他答案中,我找到了这个答案: https://ai.stackexchange.com/questions/3938/how-to-handle-images-of-large-sizes-in-cnn

虽然我不确定如何“限制你的 CNN”或“在每个时期流式传输你的数据”或者这些是否有帮助。

如何减少内存使用量,以便增加图像大小?

是否可以牺牲训练时间/计算速度来支持更高分辨率的数据,同时保持模型有效性?

注:以上模型并非最终模型,只是基本支出。

最佳答案

您的Dense层可能会破坏训练。为了提供一些背景信息,我们假设您使用的是 640x640x3 图像尺寸。让我们忘记 LSTM 层,并假设这是一个非时间序列任务(当然,作为时间序列问题的复杂性会变得更糟)。

这是输出大小。

  • Conv1 -> 640x640x96
  • Maxpool1 -> 210x210x96 (appx)
  • Conv2 -> 210x210x128

现在瓶颈来了。然后,您对输出进行flatten()处理并将其发送到Dense层。该密集层具有 210x210x128x4096 参数(即 23,121,100,800)。假设32位精度,你的密集层将占用大约86GB(我希望我的计算是正确的,但我向你保证这不是一个小数字)。

所以你的选择很少。

  • 首先也是最明显的,减少Dense层大小。
  • 减小小批量的大小
  • 减少 Conv 层的 channel 深度。
  • 您可能需要考虑是否确实希望输入为 640x640x3。根据您想要实现的目标,您也许可以使用较小的图像来实现这一目标。

关于tensorflow - Keras CNN 如何减少大图像尺寸的 GPU 内存使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58125788/

相关文章:

python - Eager Execution 函数的输入不能是 Keras 符号张量

r - 使用神经网络预测新数据的类别

python-3.x - RuntimeError : You must compile your model before using it

python - Keras weighted_metrics 在计算中不包括样本权重

python - 如何读取整个 CSV 文件作为 tensorflow 中的一个训练示例?

tensorflow - 尝试将 'n' 转换为张量但失败。错误: None values not supported

python - 尝试 reshape 数组时出错

machine-learning - 我使用 MLP 制作国际象棋引擎的方法有什么问题?

python - 在 Keras 中将多个输入样本映射到单个输出样本

python - 属性错误: 'LdaModel' object has no attribute 'minimum_phi_value'