运行Tf.Keras模型时内存不足

时间:2019-10-08 22:33:37

标签: python tensorflow machine-learning keras tf.keras

我正在建立一个模型来预测160000列的1148行到1-9的数目。我之前在keras中做过类似的事情,但是在将代码传输到tensorflow.keras时遇到了麻烦。运行该程序会产生以下错误:

  

(1)资源耗竭:分配带有形状(1148,1,15998,9)的张量并键入float ...... k:0 / device:GPU:0时,分配器GPU_0_bfc ..... ......   [[{{node conv1d / conv1d-0-0-TransposeNCHWToNWC-LayoutOptimizer}}]]

这是由以下代码引起的。这似乎是内存问题,但是我不确定为什么内存会成为问题。建议将不胜感激。

num_classes=9
y_train = to_categorical(y_train,num_classes)
x_train = x_train.reshape((1148, 160000, 1))
y_train = y_train.reshape((1148, 9))

input_1 = tf.keras.layers.Input(shape=(160000,1))
conv1 = tf.keras.layers.Conv1D(num_classes, kernel_size=3, activation='relu')(input_1)
flatten_1 = tf.keras.layers.Flatten()(conv1)
output_1 = tf.keras.layers.Dense(num_classes, activation='softmax')(flatten_1)

model = tf.keras.models.Model(input_1, output_1)
my_optimizer = tf.keras.optimizers.RMSprop()
my_optimizer.lr = 0.02
model.compile(optimizer=my_optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=50, steps_per_epoch=20)
predictions = model.predict(x_test)

编辑:model.summary

  

Layer-Output shape-Param#

     

Input_1(inputLayer)无160000,1。 0 Conv1d(Conv1D)无,159998,9   36展平(Flatten)无,1439982。 0密集(密集)无,9。12959847

     

总参数:12,959,883可训练的参数12,959,883

2 个答案:

答案 0 :(得分:0)

没有更多信息,很难给出具体答案。

  • 您正在运行什么硬件?您有多少可用内存?
  • 在代码的哪一点出现错误?

您可以尝试一些操作:

  • 如果尚未从32位浮点数更改为16位浮点数(内存减少2倍)
  • 通过在batch_size=16内添加model.fit来减少批量大小(默认为32)(内存减少2倍)
  • 如果这还不够,您需要考虑将降维应用于特征空间,这是非常高的维数(160,000)

答案 1 :(得分:0)

这听起来可能很愚蠢,但是在我的情况下,我遇到了(1)资源耗尽错误,因为主硬盘驱动器中没有足够的空间。清理了一些空间后,我的训练脚本再次开始工作。