Как перемешать данные обучения в Keras для автоэнкодера - PullRequest
0 голосов
/ 22 сентября 2019

Я использую авто-кодер в Keras.Я пытаюсь перетасовать тренировочные данные x_train, чтобы автоэнкодер восстановил данные в другую выборку из того же класса.Это возможно?

model_train = autoencoder.fit(x_train, x_train,
          batch_size=32,
          epochs=1000,
          shuffle=True,
          callbacks=[checkpoint, early_stopping],
          validation_data=(x_test, x_test))

Я предполагаю, что shuffle=True тасует x_train и вычисляет потери на основе тех же пар , равных , и я не хочу, чтобы это делалось.

1 Ответ

1 голос
/ 22 сентября 2019

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

import numpy as np

def create_pairs(data, labels):
    # Exclude batch dimension
    pairs = np.empty(0, 2, *data.shape[1:])

    for label in np.unique(labels):
        idxs = np.where(labels == label)[0]
        # Indexes must be even in order to create pairs
        idxs = idxs if len(idxs) % 2 == 0 else idxs[:-1]
        np.random.shuffle(idxs)

        samples = data[idxs].reshape((-1, 2, *data.shape[1:]))
        pairs = np.vstack((pairs, samples))
    return pairs[:, 0], pairs[:, 1]

Теперь, когда данные перемешаны и разделены на пары, вы можете обучить вашу модель:

x_train, y_train = create_pairs(data, labels)
history = model.fit(
    x_train, y_train,
    batch_size=32,
    epochs=1000,
    shuffle=True,
    callbacks=[checkpoint, early_stopping],
    validation_split=0.2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...