flow_from_dataframe не работает, когда я сохраняю фрейм данных, а затем читаю его обратно

#keras

Вопрос:

Когда я читаю CSV-файл, затем разделяю данные для обучения и тестирования данных из этого фрейма данных. После этого я использую flow_from_dataframe для создания генератора данных, который работает. Но когда я пытаюсь сохранить данные о поездах и тестах в файл CSV, потому что я не хочу каждый раз менять данные о поездах и тестах и читать их обратно, используя flow_from_dataframe, это больше не работает. Вот мой код:

 df = parser.labels_df
df.head()

"""Dividing dataset into train, val and test for validation later"""
train_data, test_data = train_test_split(df, test_size=0.1)
train_data = train_data.reset_index(drop=True)
test_data = test_data.reset_index(drop=True)

train_data.to_csv('/content/drive/MyDrive/train_data.csv', index=False)
tmp_train_data = pd.read_csv('/content/drive/MyDrive/train_data.csv')

train, val = train_test_split(tmp_train_data, test_size=0.2, random_state=42, shuffle=True)

train = train.reset_index(drop=True)
val = val.reset_index(drop=True)

def data_generator(train, val, test):
    train_datagen = ImageDataGenerator(rescale=1./255,
                                        horizontal_flip = True,  
                                        height_shift_range= 0.1, 
                                        width_shift_range=0.1, 
                                        rotation_range=5, 
                                        zoom_range=0.15)

    val_datagen = ImageDataGenerator(rescale=1./255)
    
    test_datagen = ImageDataGenerator(rescale=1./255)

    train_generator = train_datagen.flow_from_dataframe(
        dataframe=train,
        directory='/content/vinbigdata/train/',
        x_col="image_id",
        y_col="class_name",
        batch_size=16,
        target_size=(512,512),
        classes = parser.labels,
        class_mode='categorical')

    validation_generator = val_datagen.flow_from_dataframe(
        dataframe=val,
        directory='/content/vinbigdata/train/',
        x_col="image_id",
        y_col="class_name",
        batch_size=16,
        target_size=(512,512),
        classes = parser.labels,
        class_mode='categorical')

    test_generator = test_datagen.flow_from_dataframe(
        dataframe=test,
        directory='/content/vinbigdata/train/',
        x_col="image_id",
        y_col="class_name",
        batch_size=16,
        target_size=(512,512),
        classes = parser.labels,
        class_mode='categorical')
    
    return train_generator, validation_generator, test_generator

train_generator, validation_generator, test_generator = data_generator(train, val, test_data)
 

Результаты:

 Found 0 validated image filenames belonging to 6 classes.
Found 0 validated image filenames belonging to 6 classes.
Found 790 validated image filenames belonging to 6 classes.
 

Test_data, которые я не сохранил в CSV, так что это работает.
Поезд, вэл, у теста есть данные:

 print("Found {} samples for training".format(len(train)))
print("Found {} samples for validation".format(len(val)))
print("Found {} samples for test".format(len(test_data)))
 

Результат:

 Found 5687 samples for training
Found 1422 samples for validation
Found 790 samples for test
 

Комментарии:

1. В своем коде вы назвали это : ` генератор данных(train, val, test_data)`. Где вы определили данные о поездах, валах и тестах? Пожалуйста, добавьте это определение в свой код в своем вопросе.

2. @Kaveh Извините, я только что отредактировал. Тестовые данные, которые я храню: test_data = test_data.reset_index(drop=True)

3. Скорее всего, сохраненный файл и исходный отличаются друг от друга. Сравните train_data.head() и train.head() , а также train_data.dtypes и train.dtypes посмотрите, не отличается ли что-то.

4. train_data и train на самом деле они другие, потому что я отделился train от train_data . И тип данных у обоих один и тот же.

5. Меня не волнует порядок в train или val . Одна вещь, которая меня волнует, — это почему данные, считанные из сохраненного CSV-файла, не работают так, как в первом случае перед сохранением test_data