我正在尝试使用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))
答案 0 :(得分:0)
请务必使用python 64位。上次遇到内存错误时,我使用的是32位Python,但我没有意识到。
答案 1 :(得分:0)
尝试以下技巧:
还有其他可能的问题,如果您想对使用的型号和机器进行更多说明,我可以提供更具体的答案。
答案 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