Keras Denoising Autoencoder (табличные данные) - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть проект, в котором я делаю регрессию с градиентными деревьями с использованием табличных данных.Я хочу посмотреть, сможет ли использование шумоподавляющего автоэнкодера на моих данных найти лучшее представление моих исходных данных и улучшить мои исходные результаты GBT.Вдохновение взято от популярного победителя Kaggle здесь.

AFAIK У меня есть два основных варианта для извлечения активации DAE - создание структуры с узким местом и принятие одиночных активаций среднего уровня или объединение каждогоАктивация слоя как представление.

Предположим, я хочу активировать все слои из 3x 512 узлов узлов ниже:

inputs = Input(shape=(31,))
encoded = Dense(512, activation='relu')(inputs)
encoded = Dense(512, activation='relu')(encoded)
decoded = Dense(512, activation='relu')(encoded)
decoded = Dense(31, activation='linear')(decoded)
autoencoder = Model(inputs, decoded)
autoencoder.compile(optimizer='Adam', loss='mse')

history = autoencoder.fit(x_train_noisy, x_train_clean,
                epochs=100,
                batch_size=128,
                shuffle=True,
                validation_data=(x_test_noisy, x_test_clean),
                callbacks=[reduce_lr])

Мои вопросы:

  • Активация вышеупомянутого даст мне новое представление о x_train, верно?Должен ли я повторить этот процесс для x_test?Мне нужно и то, и другое для обучения моей модели GBT.

  • Как я могу сделать вывод?Каждую новую точку данных необходимо будет «преобразовать» в этот новый формат представления.Как я могу сделать это с Keras?

  • Нужно ли в действительности предоставлять от validation_data= до .fit в этой ситуации?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Модель автоэнкодера Denoising - это модель, которая может помочь снизить шумность данных.В качестве данных о поездах мы используем наши данные о поездах с целевыми данными.

Модель, которую вы описываете выше, не является моделью шумоподавляющего автоэнкодера.Для модели автоэнкодера в части кодирования единицы должны постепенно уменьшаться в количестве от слоя к слою, таким образом, в единицах декодирования части должны постепенно увеличиваться в числе.

Простая модель автоэнкодера должна выглядеть следующим образом:

input = Input(shape=(31,))
encoded = Dense(128, activation='relu')(input)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(32, activation='relu')(encoded)

decoded = Dense(32, activation='relu')(encoded)
decoded = Dense(64, activation='relu')(decoded)
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(31, activation='sigmoid')(decoded)

autoencoder = Model(input, decoded)
autoencoder.compile(optimizer='adam', loss='mse')

autoencoder.fit(x_train_noisy, x_train_noisy,
                epochs=100,
                batch_size=256,
                shuffle=True,
                validation_data=(x_test_noisy, x_test_noisy))
0 голосов
/ 25 апреля 2018

Активация вышеупомянутого даст мне новое представление из x_train, верно? Должен ли я повторить этот процесс для x_test? я нуждаюсь оба тренировать мою модель GBT.

Конечно, вам необходимо иметь представление с шумоподавлением для данных обучения и тестирования, потому что модель GBT, которую вы обучаете позже, принимает только функцию с шумом.

Как я могу сделать вывод? Каждая новая точка данных должна быть "преобразован" в этот новый формат представления. Как мне это сделать с керасом?

Если вы хотите использовать удаленную / реконструированную функцию, вы можете напрямую использовать autoencoder.predict( X_feat ) для извлечения функций. Если вы хотите использовать средний слой, вам нужно сначала построить новую модель encoder_only=Model(inputs, encoded) и использовать ее для извлечения объектов.

Нужно ли мне предоставлять validation_data = для .fit в этом ситуация?

Вам лучше разделить некоторые тренировочные данные для проверки, чтобы предотвратить переоснащение. Тем не менее, вы всегда можете обучить несколько моделей, например, полностью исключить полное использование всех данных ансамблевым способом.

Дополнительные замечания:

  • 512 скрытых нейронов, кажется, слишком много для вашей задачи
  • рассмотрите возможность использования DropOut
  • будьте осторожны с табличными данными, особенно когда данные в разных столбцах имеют разные динамические диапазоны (то есть MSE не дает четкого квантования ошибок восстановления разных столбцов).
...