尝试将训练数据适合CNN模型时出现内存错误

时间:2020-05-21 03:42:39

标签: deep-learning cnn

我正在尝试使用CNN在流行的猫狗训练数据上创建模型。当我尝试使用fit_generator拟合训练数据时,出现内存错误为 -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 = 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))

3 个答案:

答案 0 :(得分:0)

请务必使用python 64位。上次遇到内存错误时,我使用的是32位Python,但我没有意识到。

答案 1 :(得分:0)

尝试以下技巧:

  1. 将图像调整为较小的高度和宽度。除非您有很多图像,否则通常可以使用224尺寸。
  2. 使用卷积层和最大/最小池化层。这将有助于减少神经元的数量。
  3. 尝试减少隐藏层的大小和隐藏层的数量。
  4. 由于您要建立二进制分类(猫/狗),因此请使用S型分类器。
  5. 如果您正在笔记本电脑上运行此程序,请在运行模型之前考虑gc.collect()。另外,请尝试使用Google colab利用gpu / tpu。

还有其他可能的问题,如果您想对使用的型号和机器进行更多说明,我可以提供更具体的答案。

答案 2 :(得分:0)

我能够使用下面的层流程解决问题: 在此流程中,我将数据放平并将最终输出传递到Dense层。 完成此操作后,我得到了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