Tensorflow Keras CNN如何减少大图像大小的gpu内存使用?

Tensorflow Keras CNN如何减少大图像大小的gpu内存使用?,tensorflow,machine-learning,keras,gpu,conv-neural-network,Tensorflow,Machine Learning,Keras,Gpu,Conv Neural Network,我正在尝试训练cnn lstm模型,我的样本图像大小为640x640 我有一个GTX 1080钛11GB 我将Keras与tensorflow后端一起使用 这是模型 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 =

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

我有一个GTX 1080钛11GB

我将Keras与tensorflow后端一起使用

这是模型

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之间的鼠标屏幕坐标)

在许多其他问题中,我找到了这个答案:

虽然我不知道我如何才能“限制你的CNN”或“在每个时代传输你的数据”,或者这些是否有帮助

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

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


注意:上述模型不是最终的,只是一项基本支出。

您的
密集层可能会破坏培训。为了提供一些上下文,假设您使用的是
640x640x3
图像大小。让我们也忘掉
LSTM
层,假设这是一个非时间序列任务(当然,作为时间序列问题的复杂性会变得更糟)

以下是输出大小

  • Conv1
    ->
    640x640x96
  • Maxpool1
    ->
    210x210x96
    (appx)
  • Conv2
    ->
    210x210x128
现在是瓶颈。然后,您将
展平()
-对输出进行展平,并将其发送到
密集层。该致密层具有
210x210x128x4096
参数(即
2312110080
)。假设
32位
精度,密集层大约需要86GB(我希望我的计算是正确的,但我保证这不是一个小数字)

所以你别无选择

  • 首先也是最明显的一点是,减小
    密集的
    层的大小
  • 减小小批量的大小
  • 减少
    Conv
    层的通道深度
  • 您可能想知道是否真的希望输入为
    640x640x3
    。根据您试图实现的目标,您可能可以使用较小的图像来实现这一点

谢谢,减少密集层有助于abit,我正在尝试预测640x640(希望更大)范围内的x,y坐标,以便将鼠标移动到屏幕上。澄清一下,通道深度是指图像的颜色通道吗?是的,我认为你是正确的。但重申一下通道深度,我指的是conv层的第一个参数(即conv层输出的通道深度)