训练卷积自动编码器时,Keras抛出ResourceRehaustedError。我正在运行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个变量。因此,这似乎不足以填补视频ram的不足。阵列数据的大小为1600 MB。因此,这也不应该填满视频ram。我猜测问题与nb_epoch和batch_size有关,但是我不清楚这些参数的作用。有没有办法改变这些参数来解决我的问题?
最佳答案
让我们尝试估算该网络需要多少内存(尽管有用于参数的内存):
输入:1600MB
第一层:〜1600MB * 16/4 = 6400MB(您的通道和池层多16倍-将其输入大小减小4)。
第二层:6400MB(一层的输入和输出相同)。
第三层:25600MB(您的数据量正在增加4倍)。
输出层:1600MB(与输入相同)。
您可能会看到仅第三层就需要超过11GB的内存。而且-所有反向值都存储了-对于反向传播算法-因此实际上您需要对所有这些值求和,以获得对内存需求的最终估计。