避免在 convNN Tensorflow 中耗尽 GPU 资源

Avoiding exhausting GPU resources in convNN Tensorflow

我正在尝试 运行 超参数优化脚本,用于使用 Tensorflow 的 convNN。 正如您可能知道的那样,TF 对 GPU 内存的处理并不那么奇特(不要认为它会永远如此,多亏了 TPU)。所以我的问题是我怎么知道选择过滤器尺寸和批量大小,这样 GPU 内存就不会耗尽。 这是我正在考虑的等式:

image_shape =128x128x3(3 color channel) 
batchSitze  = 20 ( is the smallest possible batchsize, since I got 20 klasses) 
filter_shape= fw_fh_fd[filter_width=4, filter_height=4, filter_depth=32]

据了解,使用 tf.conv2d 函数将需要以下内存量:

image_width * image_height *numerofchannel*batchSize*filter_height*filter_width*filter_depth*32bit 

因为我们要为每个像素输入 tf.float32。 在给定的示例中,所需的内存将是: 128x128x3x20x4x4x32x32 =16106127360 (bits),也就是最多16GB内存。

我不是公式正确,所以我希望得到验证或更正我遗漏的内容。

实际上,这只需要大约 44MB 的内存,大部分被输出占用。

  • 您的输入是20x128x128x3
  • 卷积核为4x4x3x32
  • 输出为20x128x128x32

当你合计总数时,你得到

(20*128*128*3 + 4*4*3*32 + 20*128*128*32) * 4 / 1024**2 ≈ 44MB

(在上面,4是为了float32的字节大小,1024**2是为了得到MB的结果。

您的批量大小可以小于您的数量 类。想想 ImageNet 及其 1000 类:人们正在使用小 10 倍的批量进行训练。

编辑

这是网络的张量板屏幕截图 - 它报告 40MB 而不是 44MB,可能是因为它不包括输入 - 你也有我之前提到的所有张量大小。