Неправильное предсказание обучающей сети мобильной сети (керас и тензор потока) - PullRequest
0 голосов
/ 02 мая 2019

У меня есть небольшой пример (из интернета) для классификации двух типов птиц с помощью мобильной сети. Я не уверен, в чем проблема, но модель, кажется, хорошо работает с ожидаемым типом изображений птиц, но очень плохо со случайными изображениями. Например, я могу передать изображение человека и ответить со 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)

Я ожидаю, что модель будет предсказывать случайные изображения с очень небольшим процентом, но это не так, поэтому я уверен, что я тренирую модель с неправильными параметрами. Буду признателен, если кто-нибудь может немного помочь улучшить модель или понять мою ошибку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...