У меня есть небольшой пример (из интернета) для классификации двух типов птиц с помощью мобильной сети. Я не уверен, в чем проблема, но модель, кажется, хорошо работает с ожидаемым типом изображений птиц, но очень плохо со случайными изображениями. Например, я могу передать изображение человека и ответить со 100% точностью, чтобы классифицировать его как одну из двух типов птиц.
Я использую керасы и тензор потока с Python 3.5
base_model=MobileNet(weights='imagenet', include_top=False)
x=base_model.output
x=GlobalAveragePooling2D()(x)
x=Dense(1024,activation='relu')(x) #we add dense layers so that the model can learn more complex functions and classify for better results.
x=Dense(1024,activation='relu')(x) #dense layer 2
x=Dense(512,activation='relu')(x) #dense layer 3
preds=Dense(2,activation='softmax')(x) #final layer with softmax activation
model=Model(inputs=base_model.input,outputs=preds)
for layer in model.layers:
layer.trainable=False
for layer in model.layers[:20]:
layer.trainable=False
for layer in model.layers[20:]:
layer.trainable=True
batch_size=16
train_data_dir = 'downloads'
img_height = 64
img_width = 64
train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input,
validation_split=0.30) # set validation split
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_height, img_width),
batch_size=batch_size,
color_mode='rgb',
class_mode='categorical',
shuffle=True,
subset='training') # set as training data
validation_generator = train_datagen.flow_from_directory(
train_data_dir, # same directory as training data
target_size=(img_height, img_width),
batch_size=batch_size,
color_mode='rgb',
class_mode='categorical',
shuffle=False,
subset='validation') # set as validation data
model.compile(optimizer=Adam(lr=0.0001),loss='categorical_crossentropy',metrics=['accuracy'])
step_size_train= train_generator.n//train_generator.batch_size
n_epochs = 20
history = model.fit_generator(
generator = train_generator,
steps_per_epoch = train_generator.samples // batch_size,
validation_data = validation_generator,
validation_steps = validation_generator.samples // batch_size,
epochs = n_epochs)
Я ожидаю, что модель будет предсказывать случайные изображения с очень небольшим процентом, но это не так, поэтому я уверен, что я тренирую модель с неправильными параметрами. Буду признателен, если кто-нибудь может немного помочь улучшить модель или понять мою ошибку