Я обучил модель с очень хорошей val_accuracy, но прогнозы полностью неверны. К сожалению, ответы на подобные вопросы мне не помогли. В моей сети есть проблема с несколькими метками. Конечным результатом является прогнозирование 3-х лучших меток для каждого изображения из альбома.
Это моя функция, которая делает вывод с предсказаниями.
classes = ["label1","label2","label3","label4","label5","label6","label7"]
def image_recognition(path):
model = load_model(network)
class = np.array(classes)
for picture in os.listdir(path):
pic = os.path.join(path, picture)
pic = image.load_img(pic, target_size = (224, 224, 3))
pic = image.img_to_array(pic)
pic = pic/255
prediction = model.predict(pic.reshape(1, 224, 224, 3))
best = np.argsort(prediction[0])[:4:-1]
Мои генераторы:
aug = ImageDataGenerator(rescale = 1./255,
rotation_range = 40)
train_generator = aug.flow_from_dataframe(
training,
x_col = "filename",
y_col = "labels",
target_size = (224, 224),
batch_size = 64,
classes = classes,
class_mode = 'categorical',
shuffle = True)
validation_data = keras.preprocessing.image.ImageDataGenerator(rescale = 1./255)
validation_generator = validation_data.flow_from_dataframe(
validation,
x_col = "filename",
y_col = "labels",
target_size = (224, 224),
batch_size = 64,
classes = classes,
class_mode = "categorical")
Это мой CNN:
model = models.Sequential()
model.add(pretrained)
model.add(layers.Dropout(0.3))
model.add(layers.Flatten())
model.add(layers.Dropout(0.3))
model.add(layers.Dense(256, activation = 'relu'))
model.add(layers.Dropout(0.3))
model.add(layers.Dense(7, activation = 'sigmoid'))
model.compile(loss = 'binary_crossentropy',
optimizer = optimizers.RMSprop(lr = 2e-5),
metrics = ['acc'])
history = model.fit_generator(
train_generator,
steps_per_epoch = train_steps,
epochs = 15,
validation_data = validation_generator,
validation_steps = validation_steps)
Значение val_acc составляет 0,9527.