У меня есть высокая точность в модели CNN с обучением передачи, но более низкая точность в обучении - PullRequest
1 голос
/ 02 мая 2019

У меня есть модель классификации изображений с CNN. Я закончил обучение с помощью MobileNet. В конце Mobile Net я добавил 4 слоя, чтобы узнать веса для моих изображений (не обновлять веса для MobileNet). Веса мобильной сети не изменены. В результате я получил 91% точности этой модели и оценил ее с помощью того же учебного набора (train_generator). Но у меня сейчас более низкая точность - около 41%. Почему получился другой результат? Я использовал тот же тренировочный набор, хотя ... Есть ли разница в точности model.fit_generator и model.evaluate_generator? или что-то не так в данных? Пожалуйста, помогите ... Как я могу улучшить точность ?? Вот весь мой код ниже.

from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.applications import MobileNet
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.mobilenet import preprocess_input
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
base_model = MobileNet(weights='imagenet', include_top=False)

x=base_model.output
x=GlobalAveragePooling2D()(x)
x=Dense(1024, activation='relu')(x)
x=Dense(1024, activation='relu')(x)
x=Dense(512, activation='relu')(x)
preds=Dense(7, activation='softmax')(x)

model=Model(inputs=base_model.input, outputs=preds)

for layer in model.layers[:-4]:
    layer.trainable=False
for layer in model.layers[-4:]:
    layer.trainable=True

train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input)

train_generator = train_datagen.flow_from_directory('/Users/LG/Desktop/finger',
                                                   target_size=(224, 224),
                                                   color_mode='rgb',
                                                   batch_size=32,
                                                   class_mode='categorical',
                                                   shuffle=True)

model.compile(optimizer='Adam', loss='categorical_crossentropy', metrics=['accuracy'])

step_size_train=train_generator.n//train_generator.batch_size
model.fit_generator(generator=train_generator,
                   steps_per_epoch=step_size_train,
                   epochs=10)

Эпоха 1/10 17/17 [==============================] - 53 с 3 с / шаг - потеря: 1,9354 - в соответствии с 0,3026

Эпоха 2/10 17/17 [==============================] - 52 с 3 с / шаг - потеря: 1,1933 - согласно: 0,5276

Эпоха 3/10 17/17 [==============================] - 52 с 3 с / шаг - потеря: 0,8936 - согласно: 0,6787

Эпоха 4/10 17/17 [==============================] - 54 с 3 с / шаг - потеря: 0,6040 - в соответствии с 0,7843

Эпоха 5/10 17/17 [==============================] - 53 с 3 с / шаг - потеря: 0,5367 - согласно: 0,8080

Эпоха 6/10 17/17 [==============================] - 55 с 3 с / шаг - потеря: 0,2676 - согласно: 0,9099

Эпоха 7/10 17/17 [==============================] - 52 с 3 с / шаг - потеря: 0,4531 - согласно: 0,8387

Эпоха 8/10 17/17 [==============================] - 53 с 3 с / шаг - потеря: 0,3580 - согласно: 0,8747

Эпоха 9/10 17/17 [==============================] - 55 с 3 с / шаг - потеря: 0,1963 - согласно: 0,9301

эпоха 10/10 17/17 [==============================] - 53 с 3 с / шаг - потеря: 0,2237 - согласно: 0,9133

model.evaluate_generator(train_generator, steps=5)

[2,169835996627808, 0,41875]

...