Keras model.fit_generator()可提供0.0%的验证准确度

时间:2018-07-26 05:22:14

标签: python image-processing keras deep-learning conv-neural-network

我有一些按文件夹排列的训练图像,一些验证图像和一些测试图像。我正在使用图片生成器,因为没有。的图像数量不足。我正在使用以下代码:

height=150
width=150
channels=3
batch_size=32
seed=1337

# Training generator
train_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(train_dir,target_size=(height,width),batch_size=batch_size,seed=seed,class_mode='categorical')

# Test generator
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(test_dir,target_size=(height,width),batch_size=batch_size,seed=seed,class_mode='categorical')

并获得输出:

  

找到723个属于5类的图像。

     

找到144个属于5类的图像。

这是我的模型架构:

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(150, 150, 3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

# the model so far outputs 3D feature maps (height, width, features)
model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(5))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

这是.fit_generator()的代码:

history = model.fit_generator(
        train_generator,
        steps_per_epoch=2000 // 64,
        epochs=5,
        validation_data=test_generator,
        validation_steps=800 // 64)

我在accuracy之后得到70%的{​​{1}},但是很遗憾,5 epochsval_acc仍然是val_loss,但我没有完全能够弄清楚。 另外,我有一个包含20张图像的文件夹,可以预测。如何在它们上使用0.00000e+00函数?我没有提供标签的.predict()文件。在单独的文件夹中只提供训练图像,其名称基本上是图像的类别。

1 个答案:

答案 0 :(得分:0)

首先修复:

steps_per_epoch = 2000 // 64 validation_steps = 800 // 64

收件人:

steps_per_epoch = 723 / batch_size validation_steps = 144 / batch_size

但是,这不是这里的问题。我看不到您的代码中的问题。我什至在我的数据库上运行它,并且运行良好。如您所知,请检查test_dirtrain_dir中的文件夹名称是否相同。

关于predict_gen,请阅读Keras的documentation。输出是每个验证图像的向量。如果需要字符串标签,可以使用生成器的类列表。像这样:

pred_Y = np.argmax(model.predict_generator(valid_gen),axis=1) predicted_labels = [valid_gen.classes[pred_y] for pred_y in pred_Y ]