#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