簡體   English   中英

嘗試將訓練數據擬合到 CNN model 時出現 Memory 錯誤

[英]Getting Memory Error while trying to fit training data into CNN model

我正在嘗試使用 CNN 在流行的貓狗訓練數據上創建 model。 當我嘗試使用 fit_generator 擬合訓練數據時,我得到 Memory 錯誤,因為 self.filepaths 是動態的,最好在循環外調用它。 下面是我的代碼行:

model.fit_generator(train_data, steps_per_epoch=10, 
                    validation_data=valid_data, validation_steps=2, epochs=10, verbose=2)

我使用

train_data = ImageDataGenerator().flow_from_directory(train_path, target_size=(224,224), classes=['dogs', 'cats'], batch_size=10)

請提出解決方案。 下面是我的 model:

model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5),
                 activation='relu',
                  input_shape=(3,224, 224), data_format='channels_first'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))
model.add(Conv2D(64, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.4))

請務必使用 python 64 位。 上次我遇到 memory 錯誤時,我使用的是 Python 32 位,但我不知道。

嘗試以下技術:

  1. 將圖像大小調整為更小的高度和寬度。 224 尺寸通常有效,除非您有大量圖像。
  2. 使用卷積層和最大/最小池化層。 這將有助於減少神經元的數量。
  3. 嘗試減少隱藏層的大小和隱藏層的數量。
  4. 使用 sigmoid 分類器,因為您正在嘗試構建二進制分類(貓/狗)。
  5. 如果您在筆記本電腦上運行此程序,請在運行 model 之前考慮 gc.collect()。 另外,嘗試使用 google colab 來利用 gpu/tpu。

還有其他可能的問題,如果您想更多地解釋您的 model 和您正在使用的機器,我可以提供更具體的答案。

我能夠使用以下層流解決問題:在此流中,我使數據變平並將最終的 output 傳遞給密集層。 這樣做之后,我得到了 100% 正確的預測。 如果有人有更好的解決方案,請告訴我。

model.add(Conv2D(32, kernel_size=(5, 5), activation='relu', input_shape=(224,224,3)))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))
model.add(Conv2D(64, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))
model.add(Flatten())
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.4))
model.add(Dense(2, activation='softmax'))

看下面的執行結果:

Epoch 1/10
 - 4s - loss: 222.1019 - accuracy: 0.5800 - val_loss: 23.9488 - val_accuracy: 0.5000
Epoch 2/10
 - 3s - loss: 12.1180 - accuracy: 0.5600 - val_loss: 3.5912 - val_accuracy: 0.5000
Epoch 3/10
 - 3s - loss: 1.3664 - accuracy: 0.7200 - val_loss: 0.5239 - val_accuracy: 0.6000
Epoch 4/10
 - 4s - loss: 1.0074 - accuracy: 0.7200 - val_loss: 0.1986 - val_accuracy: 0.9000
Epoch 5/10
 - 4s - loss: 0.1890 - accuracy: 0.9400 - val_loss: 0.0298 - val_accuracy: 1.0000
Epoch 6/10
 - 3s - loss: 0.1680 - accuracy: 0.9200 - val_loss: 0.1973 - val_accuracy: 0.9000
Epoch 7/10
 - 3s - loss: 0.9097 - accuracy: 0.9600 - val_loss: 0.0020 - val_accuracy: 1.0000
Epoch 8/10
 - 4s - loss: 0.0372 - accuracy: 0.9800 - val_loss: 0.0027 - val_accuracy: 1.0000
Epoch 9/10
 - 3s - loss: 0.0466 - accuracy: 1.0000 - val_loss: 4.7272e-04 - val_accuracy: 1.0000
Epoch 10/10
 - 3s - loss: 0.0172 - accuracy: 1.0000 - val_loss: 2.7418e-07 - val_accuracy: 1.0000

暫無
暫無

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

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