#python #machine-learning #keras
#python #машинное обучение #keras
Вопрос:
В настоящее время я пытаюсь создать вариационный автоэнкодер (VAE), который обучается на данных, масштабированных до минимального / максимального (от нуля до единицы). Общую архитектуру можно увидеть ниже:.
Я заинтересован в выборке изученного скрытого пространства после того, как оно было достаточно обучено. Скрытое пространство имеет размер 200, поэтому я решил, что могу создать векторы выборки, выполнив следующее:
NUM_SAMPLED_VECTORS = 100
sampled_latent = []
max_latent_values = encoded_latent_df.max(axis=0).values.tolist()
# Sample 100 vectors
for x in range(NUM_SAMPLED_VECTORS):
temp = []
for i,z in enumerate(max_latent_values):
temp.append(uniform(0, z))
sampled_latent.append(temp)
sampled_latent_df = pandas.DataFrame(sampled_latent)
sampled_pred_vectors = pd.DataFrame(decoder.predict_on_batch(sampled_latent_df))
Здесь я произвольно выбираю минимальный / максимальный диапазон каждой скрытой переменной последовательно, а затем прогнозирую этот «выбранный скрытый вектор».
Однако, когда я смотрю на выходные векторы, все они отключены в ~ 10 ^ 30 раз. Я ожидал бы, что выходные векторы будут иметь значения ~ 0,5 (например, от 0 до 1), но все предсказанные векторы имеют значения ~ 10 ^ -30 (да, больше нуля, но едва ли вообще). Есть ли лучший способ выборки скрытого пространства, чтобы получить соответствующие выборочные значения?
Комментарии:
1. что произойдет, если вы выполните выборку с 0? Вы также получаете крошечные значения? Обычно в VAEs у вас должно быть большинство выборок, близких к 0, возможно, максимальные значения являются выбросами? Попробуйте построить общее распределение скрытых значений и посмотреть, где max относительно этого? Если вы хотите выполнить выборку, вам также следует выполнить выборку всего пространства, также однородного (min_latent_values, max_latent_values), bcs min почти наверняка будет ниже 0
2. Действительно, существует «бимодальное» распределение значений скрытого пространства; один пик равен (близок) нулю, а другой (близок) к единице. Я не проверял каждый узел, но я предполагаю, что он одинаков для всех из них. Выборка при / около нуля (или просто [0,1]) действительно дает значения по величине, близкие к тому, что я ожидал. Есть ли способ «связать» выборку одного узла с другим? Я чувствую, что случайная выборка [0,1] для каждого из них выбрасывает парное изучение каждого узла друг с другом.
3. Рад, что помогло :). Есть ли причина, по которой вы не можете выполнить выборку фактических данных? В качестве альтернативы, это немного грубо, но в зависимости от приложения, но вы могли бы просто запустить PCA по размерам скрытого пространства для всех примеров, а затем собрать образцы, разбив первые n основных компонентов и проецируя их обратно в скрытое пространство.
4. Причины отсутствия прямой выборки данных немного запутанны, но, по сути, я хотел бы знать, что происходит, когда вы модулируете определенные значения во входном векторе (например, уменьшаете X%) и что происходит с остальными значениями в моем «входном» векторе; у нас не обязательно достаточноданные, которые позволяют выполнять выборку этих значений конкретно в том диапазоне, о котором мы заботимся.
5. Скрытое пространство VAE обычно спроектировано так, чтобы быть нормальным по Гауссу (среднее значение 0, std 1, расхождение KL делает это), поэтому нет смысла говорить о бимодальном скрытом пространстве или считать его однородным.