簡體   English   中英

訓練神經網絡時出現ResourceExhaustedError錯誤

[英]ResourceExhaustedError error while training neural network

大家歡迎。 我正在嘗試訓練我的第一個神經網絡。

當我嘗試訓練她時-出現此錯誤:

tensorflow.python.framework.errors_impl.ResourceExhaustedError:在分配帶有形狀的張量[502656,128]並在分配器GPU_0_bfc上的/ job:localhost / replica:0 / task:0 / device:GPU:0上鍵入float時,OOM

我閱讀后發現,這是由於視頻卡(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])

梯度檢查點是OpenAI開發的用於減少神經網絡的內存占用的庫。 它通過在前向通過期間保存一些張量(在其中計算損失)並在后向通過重新計算其他張量(在其中通過反向傳播損失來計算梯度)來做到這一點。

該庫在reddit上宣傳為允許您以10倍的內存訓練模型,以換取20%的計算成本。 但是,根據我在具有最佳設置的中型CNN上進行嘗試的經驗,它使我能夠以2倍的內存和30%的計算成本進行訓練。 他們的GitHub頁面上的迭代峰值內存圖表明,只有在非常大型的網絡中才能獲得更高的收益。

額外:2 GB的GPU內存太少,無法訓練大多數神經網絡。 2018年的這篇文章建議至少6 GB。 如果可以,我建議您使用具有更多內存和處理能力的高端GPU。 或者,您可以使用雲計算服務。 Google Cloud為您提供了一個完全免費的試用版,您可以在其中花300美元購買一年的雲服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM