Python Keras似乎忽略了我的批处理大小,并尝试将所有数据放入GPU内存中

Python Keras似乎忽略了我的批处理大小,并尝试将所有数据放入GPU内存中,python,tensorflow,keras,recurrent-neural-network,batchsize,Python,Tensorflow,Keras,Recurrent Neural Network,Batchsize,我有一个带有2个输入阵列和2个输出阵列的RNN,大小如下: input1 = (339679, 90, 15) input2 =(339679, 90, 27) output1 = 339679,2 output2 = 339679,16 创建RNN LSTM的代码是(我将只显示两个RNN中的一个,另一个相同,但有16个输出,并从input2获取输入大小): 这里,n_in1是我前面描述的输入,所以给出的形状是90,15 DenseBND只是一个函数,它返回一个密集层,其中包含BatchNor

我有一个带有2个输入阵列和2个输出阵列的RNN,大小如下:

input1 = (339679, 90, 15)
input2 =(339679, 90, 27)
output1 = 339679,2
output2 = 339679,16
创建RNN LSTM的代码是(我将只显示两个RNN中的一个,另一个相同,但有16个输出,并从input2获取输入大小):

这里,n_in1是我前面描述的输入,所以给出的形状是90,15

DenseBND只是一个函数,它返回一个密集层,其中包含BatchNormalization和dropout。在这种情况下,BatchNormalization为False,激活函数为None,Dropout为0.2,因此它只返回具有线性激活函数和20%Dropout的稠密层

最后,培训它的线路:

model.fit( {'inputsA': np.array(n_input1), 'inputsB': np.array(n_input2)},
      {'outputsA': np.array(n_output1), 'outputsB': np.array(n_output2)},
      validation_split=0.1, epochs=1000, batch_size=256, 
      callbacks=callbacks_list)
您可以看到验证分割为0.1,批大小为256

然而,当我尝试训练它时,我得到以下错误:

ResourceExhaustedError: OOM when allocating tensor with shape[335376,90,27] and type float on /job:
如您所见,它似乎试图将整个数据集放入GPU内存中,而不是一批一批地进行。我曾经将batch_size设置为1,但此错误仍然存在。第一个数字335376是我数据集的90%(这个数字与上面的数字不同,上面的数字有效,而这个数字无效)


它是否应该尝试分配256,90,27形状的张量?

不,keras不会忽略您的批量大小

您正在尝试创建尺寸过大的numpy数组

'inputsB':np.array(n\u input2)
这会分配一个非常大的numpy数组,因此即使在训练开始之前,由于内存有限,也无法进行此numpy转换

您需要使用数据生成器,它不会立即将完整数据存入内存


参考:

您需要使用keras生成器来处理
ResourceExhaustedError: OOM when allocating tensor with shape[335376,90,27] and type float on /job: