Я тренирую модель с fit_generator
и разбиваю данные на поезд и набор проверок. Во время обучения я также оцениваю данные проверки на метрику точности c и получаю val_acc
0,9519.
Проблема в том, что я также оцениваю точность модели, вызывая генератор проверки вручную , используя функцию python next
. Оценивая таким образом, я получаю точность проверки 0,74.
Почему существует такая большая разница между двумя показателями точности, когда я оцениваю одни и те же данные?
Вот фрагмент моего кода ниже. Я надеюсь, что кто-то может помочь мне с проблемой!
train_datagen = ImageDataGenerator(
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
validation_split=0.1,
fill_mode='nearest')
train_gen = train_datagen.flow_from_directory(
train_dir,
target_size = (224,224),
batch_size = batch_size,
class_mode = 'categorical',
subset = 'training')
val_datagen = ImageDataGenerator(
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
validation_split=0.1,
fill_mode='nearest')
val_gen = val_datagen.flow_from_directory(
train_dir,
target_size = (224,224),
batch_size = 1,
class_mode = 'categorical',
subset = 'validation',
shuffle = False)
model.fit_generator(train_gen,
steps_per_epoch = train_gen.samples // batch_size,
validation_data=val_gen,
validation_steps=val_gen.samples,
initial_epoch = history.epoch[-1]+1,
epochs=10)
После того, как я позвоню fit_generator, я получу оценку val_a cc 0,95, вот снимок экрана для справки.
И затем оценка вручную, используя функцию python next
для val_gen
:
predictions = []
labels = []
val_gen.reset()
# batch_size of val_gen = 1
for _ in range(val_gen.samples):
X_val, y_val = next(val_gen)
pred = model.predict(X_val)
predictions.append(pred)
labels.append(y_val)
predictions = np.array(predictions)
predictions = np.argmax(predictions,axis=2)
labels = np.array(labels)
labels = np.argmax(labels, axis=2)
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(predictions,labels)
Используя sklearn precision_score, я получаю 0,74.