Я сталкиваюсь со странным поведением при использовании fit_generator
, predict_generator
и evaluate_generator
, и я хотел бы задать следующие вопросы, на которые я не нашел ответа в документации:
- Можно ли использовать пакеты разных размеров при использовании
fit_generator
?
Мои партии определяются по времени: они группируют события, которые произошли в один и тот же час.Поэтому каждая партия может группировать разное количество событий.Для ясности, вот так выглядят мои генераторы (следуя логике в этой теме ):
def grouper(g,x,y):
while True:
for gr in g.unique():
# this assigns indices to the entire set of values in g,
# the subsects to all the rows in which g == gr
indices = g == gr
yield (x[indices],y[indices])
all_data_generator = grouper(df['batch_id'], X, Y)
train_generator = grouper(df.loc[df['set'] == 'train', 'batch_id'], X_train, Y_train)
validation_generator = grouper(df.loc[df['set'] == 'val', 'batch_id'], X_val, Y_val)
test_generator = grouper(df.loc[df['set'] == 'test', 'batch_id'], X_test, Y_test)
Можно ли иметь разное количество партий в
train_generator
и
validation_generator
?
Для ясности я передаю эти два (разных) числа явно fit_generator
при вызове:
train_batches = df.loc[df['set'] == 'train', 'batch_id'].nunique()
val_batches = df.loc[df['set'] == 'val', 'batch_id'].nunique()
history = fmodel.fit_generator(train_generator,
steps_per_epoch=train_batches,
validation_data=validation_generator,
validation_steps=val_batches,
epochs=20, verbose = 0)
Прогнозы сильно различаются в зависимости от того, что я использую
predict_classes
или
predict_generator
, что сбивает меня с толку.
Вот код:
df['pred'] = fmodel.predict_classes(X)
# returns different results from
total_batches = df['batch_id'].nunique()
df['pred_gen'] = fmodel.predict_generator(all_data_generator, steps = total_batches)
Аналогично,
evaluate
и
evaluate_generator
возвращают разные результаты.
Код:
scores = model.evaluate(X_test, Y_test, verbose = 0)
# returns different results from
scores_generator = fmodel.evaluate_generator(test_generator, steps=test_batches)
Я знаю, что уже есть много вопросов, касающихся моих пунктов 3.и 4. (например, 3477 , 6499 ), но основные выводы здесь, по-видимому, относятся к
- с использованием ImageDataGenerator с / без масштабирования;
- данные перетасовки, которые в соответствии с документацией fit_generator"Не имеет никакого эффекта, если значение steps_per_epoch не равно None."
- с использованием
workers > 1
, что по умолчанию не так.
Так что мне интересно, могут ли здесь быть виновны пункты 1. и 2.