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

Running out of memory when running Tf.Keras model

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

(1) Resource exhausted: 00M when allocating tensor with shape(1148,1,15998,9) and type float......k:0/device:GPU:0 by allocator 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) none, 160000,1. 0 Conv1d (Conv1D) none,159998, 9 36 flatten (Flatten) none,1439982. 0 dense (Dense) none, 9. 12959847

Total Params: 12,959,883 Trainable Params 12,959,883

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

  • 您 运行 使用的是什么硬件?您有多少内存可用?
  • 错误发生在代码的哪个位置?

您可以尝试的一些事情:

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

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