我有一些按文件夹排列的训练图像,一些验证图像和一些测试图像。我正在使用图片生成器,因为没有。的图像数量不足。我正在使用以下代码:
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 epochs
和val_acc
仍然是val_loss
,但我没有完全能够弄清楚。
另外,我有一个包含20张图像的文件夹,可以预测。如何在它们上使用0.00000e+00
函数?我没有提供标签的.predict()
文件。在单独的文件夹中只提供训练图像,其名称基本上是图像的类别。
答案 0 :(得分:0)
首先修复:
steps_per_epoch = 2000 // 64
validation_steps = 800 // 64
收件人:
steps_per_epoch = 723 / batch_size
validation_steps = 144 / batch_size
但是,这不是这里的问题。我看不到您的代码中的问题。我什至在我的数据库上运行它,并且运行良好。如您所知,请检查test_dir
和train_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 ]