【问题标题】:Why is Keras throwing a ResourceExhaustedError?为什么 Keras 会抛出 ResourceExhaustedError?
【发布时间】:2017-05-22 10:02:50
【问题描述】:

Keras 在训练卷积自动编码器时抛出 ResourceExhaustedError。我正在运行 Tensorflow 后端。该计算机具有 11 Gbs 内存的 Nvidia Tesla 和 6 Gbs 内存的 Nvidia Quadro。 Tensorflow 似乎同时使用了两个 GPU?但我对此不是很清楚。这是我正在使用的代码的最小示例。在我的示例中,数据是一个维度 =(100,1080,1920,1) 的 numpy 数组。

from keras.layers import Convolution2D, MaxPooling2D, UpSampling2D, Activation
from keras.models import Sequential
model = Sequential()
model.add(Convolution2D(16, 3, 3, border_mode='same', input_shape=(1080, 1920, 1)))
model.add(Activation('relu'))
model.add(MaxPooling2D((2, 2), border_mode='same'))
model.add(Convolution2D(16, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.add(UpSampling2D((2, 2)))
model.add(Convolution2D(1, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.compile(optimizer='adadelta', loss='binary_crossentropy')
model.fit(data, data)

GPU 似乎内存不足。自编码器有 2625 个变量。所以这似乎不足以填满视频内存。数组数据的大小为 1600 MB。所以这也不应该填满视频内存。我猜这个问题与 nb_epoch 和 batch_size 有关,但我并不完全清楚这些参数的作用。有没有办法改变这些参数来解决我的问题?

【问题讨论】:

标签: tensorflow neural-network out-of-memory gpu keras


【解决方案1】:

更改Convolution2D - > Conv2D
参考:https://stackoverflow.com/a/46032412/7148586

【讨论】:

    【解决方案2】:

    让我们试着估计一下这个网络需要多少内存(尽管内存用于参数):

    1. 输入:1600MB
    2. 第一层:~ 1600MB * 16 / 4 = 6400MB(你有 16 倍的通道和池化层 - 将其输入的大小减少 4)。
    3. 第二层:6400MB(一层输入输出相同)。
    4. 第三层:25600MB(您将数据量增加了 4 倍)。
    5. 输出层:1600MB(与输入相同)。

    您可能会看到仅第三层就需要超过 11GB 的内存。此外 - 所有前向值都被存储 - 对于反向传播算法 - 所以实际上您需要总结所有这些值以获得内存需求的最终估计。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 2018-01-03
      • 2021-12-20
      • 2021-03-05
      • 2021-03-19
      • 2023-03-14
      相关资源
      最近更新 更多