【问题标题】:ResourceExhaustedError error while training neural network训练神经网络时出现 ResourceExhaustedError 错误
【发布时间】:2019-06-22 20:23:49
【问题描述】:

欢迎大家。我正在尝试训练我的第一个神经网络。

当我尝试训练她时 - 出现此错误:

tensorflow.python.framework.errors_impl.ResourceExhaustedError:OOM 当使用 shape[502656,128] 分配张量并输入 float on /job:localhost/replica:0/task:0/device:GPU:0 分配器 GPU_0_bfc

我读到了,我意识到这是因为显卡 (GTX 1050 2 gb) 中的内存很小。

原来我这里根本不能用显卡?

也许我可以以某种方式“部分”发布视频卡数据集?

代码:

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K
import numpy as np

batch_size = 1
num_classes = 3
epochs = 2

# input image dimensions
img_rows, img_cols = 135, 240

dataset = Dataset()

x_train, y_train = dataset.LoadDataset()

x_train = x_train[0]
y_train = y_train[0]

x_train = np.array(x_train).reshape(10000, 135, 240, 1)

input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')

x_train = x_train / 255

model = Sequential()
model.add(Conv2D(32, kernel_size=(1, 1),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit([x_train], [y_train],
          batch_size=batch_size,
          epochs=epochs,
          verbose=1)

model.save("First.model")

score = model.evaluate([x_train], [y_train], verbose=0)

print('Test loss:', score[0])
print('Test accuracy:', score[1])

【问题讨论】:

    标签: python tensorflow keras deep-learning gpu


    【解决方案1】:

    gradient-checkpointing 是 OpenAI 开发的一个库,用于减少神经网络的内存占用。它通过在前向传播(计算损失)期间保存一些张量并在反向传播(通过反向传播损失计算梯度)中重新计算其他张量来做到这一点。

    该库是 advertised on reddit,因为它允许您使用 10 倍的内存来训练模型,以换取 20% 的计算成本。然而,根据我尝试使用具有我能找到的最佳设置的中型 CNN 的经验,它使我能够以 2 倍的内存和 30% 的更高计算成本进行训练。他们GitHub page 上的迭代峰值内存图表明,只有在非常大的网络中才能获得更高的收益。

    额外:2 GB 的 GPU 内存太少,无法训练大多数神经网络。 This article 从 2018 年开始建议至少 6 GB。如果可以,我建议您购买具有更多内存和处理能力的高端 GPU。或者,您可以使用云计算服务。 Google Cloud 为您提供完全免费的试用期,您可以获得 300 美元一年的云服务费用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 2010-11-20
      • 2019-09-15
      相关资源
      最近更新 更多