мульти метка классификации в керасе - PullRequest
0 голосов
/ 21 сентября 2018

Я пытался создать модель, которая помогла бы мне идентифицировать изображения проблемы классификации с несколькими метками, например, если бы у меня были изображения кошек, собак и коров.Я управлял моделью CNN, но она не ловила вообще (давала точность 33%).Может кто-нибудь, пожалуйста, поделитесь моделью, которая работает (даже если точность просто разумна)?Спасибо всем заранее![прикрепил мой код, упомянутый выше]

from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D, 
BatchNormalization
from keras.callbacks import LearningRateScheduler
from keras.optimizers import adam, SGD
from keras.preprocessing.image import ImageDataGenerator
from keras.applications.vgg16 import VGG16


# 2 - Create network layers
image_width = 200
image_height = 200

model = Sequential()
model.add(Conv2D(filters=16, kernel_size=(3,3), 
activation='relu',input_shape=( 
(image_width,image_height,3)))
model.add(BatchNormalization())
model.add(Conv2D(filters=16, kernel_size=(3,3), activation='relu'))
model.add(BatchNormalization())
model.add(MaxPool2D(strides=(2,2)))
model.add(Dropout(0.25))
# Stage II = make it more compex with 'filters = 32'
model.add(Conv2D(filters=32, kernel_size=(3,3), activation='relu'))
model.add(BatchNormalization())
model.add(Conv2D(filters=32, kernel_size=(3,3), activation='relu'))
model.add(BatchNormalization())
model.add(MaxPool2D(strides=(2,2)))

model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(3, activation='softmax'))


# We'll Randomize the training set (shuffle), to avoid overfitting 
(augmentation)
datagen = ImageDataGenerator(zoom_range = 0.1,
                        height_shift_range = 0.1,
                        width_shift_range = 0.1,
                        rotation_range = 10)

model.compile(optimizer='adam',loss='categorical_crossentropy',metrics= 

['точность'])

# automatically retrieve images and their classes for train and validation 
train_generator = datagen.flow_from_directory(
    train_dataset,
    target_size=(image_width, image_height),
    batch_size=32,
    class_mode='categorical')


validation_generator = datagen.flow_from_directory(
    validation_dataset,
    target_size=(image_width, image_height),
    batch_size=32,
    class_mode='categorical')

# Now let's fit the model on the validation set

model.fit_generator(
    train_generator,
    steps_per_epoch=50,
    epochs=500,
    validation_data=validation_generator,
    validation_steps=15)

1 Ответ

0 голосов
/ 19 апреля 2019

Одна из проблем, которые я вижу в вашем коде, заключается в том, что flow_from_directory не поддерживает классификацию по нескольким меткам.Он вернет только одну метку на основе подкаталогов.Ссылка на документы

Это может быть огромной проблемой, поскольку ваша модель даже не выполняет классификацию по нескольким меткам.

...