Как обеспечить согласованное перетасовывание X_train и y_train в генераторе данных Keras в функции on_epoch_end()? ⇐ Python
Как обеспечить согласованное перетасовывание X_train и y_train в генераторе данных Keras в функции on_epoch_end()?
Я пытаюсь реализовать класс генератора данных keras. Одним из атрибутов является shuffle, который, если он установлен в true при инициализации класса и вызове on_epoch_end(), будет перетасовывать индексы образцов в матрице дизайна. , который в нашем случае представляет собой массив np, где каждый образец содержит путь к файлу изображения PNG. Проблема в том, что я использовал scikit-learn X_train, X_val, y_train, y_val = train_test_split(file_paths, labels, test_size=0.33, random_state=42), поэтому, если я только перетасовываю индексы X_train без соответствующего перетасовки y_train таким же образом, данные X не будут соответствовать своим правильным меткам, если перемешать их в on_epoch_end(). Кто-нибудь знает, как к этому можно подойти? Я вставлю код своего класса для справки.
класс DataGenerator(keras.utils.Sequence): «Генерирует данные для Кераса» def __init__(self, file_paths, labels, patch_size=32, dim=(240,320), n_channels=3, shuffle=True): self.dim = тусклый self.batch_size = размер_пакета self.labels = метки self.file_paths = пути_файла self.n_channels = n_channels self.shuffle = перемешать self.on_epoch_end() защита on_epoch_end(сам): «Обновляет индексы после каждой эпохи» self.indexes = np.arange(len(self.file_paths)) если self.shuffle == True: np.random.shuffle(self.indexes)
Я пытаюсь реализовать класс генератора данных keras. Одним из атрибутов является shuffle, который, если он установлен в true при инициализации класса и вызове on_epoch_end(), будет перетасовывать индексы образцов в матрице дизайна. , который в нашем случае представляет собой массив np, где каждый образец содержит путь к файлу изображения PNG. Проблема в том, что я использовал scikit-learn X_train, X_val, y_train, y_val = train_test_split(file_paths, labels, test_size=0.33, random_state=42), поэтому, если я только перетасовываю индексы X_train без соответствующего перетасовки y_train таким же образом, данные X не будут соответствовать своим правильным меткам, если перемешать их в on_epoch_end(). Кто-нибудь знает, как к этому можно подойти? Я вставлю код своего класса для справки.
класс DataGenerator(keras.utils.Sequence): «Генерирует данные для Кераса» def __init__(self, file_paths, labels, patch_size=32, dim=(240,320), n_channels=3, shuffle=True): self.dim = тусклый self.batch_size = размер_пакета self.labels = метки self.file_paths = пути_файла self.n_channels = n_channels self.shuffle = перемешать self.on_epoch_end() защита on_epoch_end(сам): «Обновляет индексы после каждой эпохи» self.indexes = np.arange(len(self.file_paths)) если self.shuffle == True: np.random.shuffle(self.indexes)
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение