Почему мой автоэнкодер не использует все элементы своего кода?

Я пытаюсь построить автоэнкодер с помощью Keras. Моя цель - сжать 200-мерное векторное пространство в 20-мерное.

По какой-то причине, когда я тренирую автоэнкодер, он всегда заканчивает тем, что не использует некоторые элементы его сжатия. Например, после последнего обучения элементы 7, 12 и 15 закодированной версии устанавливаются в 0 для всех входов.

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

Вот код, который я использую для сборки и обучения автоэнкодера:

orig_length = 200
encoding_dim = 20

input_vec = Input(shape=(orig_length,))
encoded = Dense(150, activation='relu')(input_vec)
encoded = Dense(100, activation='relu')(encoded)
encoded = Dense(50, activation='relu')(encoded)
encoded = Dense(encoding_dim, activation='relu')(encoded)

decoded = Dense(50, activation='relu')(encoded)
decoded = Dense(100, activation='relu')(decoded)
decoded = Dense(150, activation='relu')(decoded)
decoded = Dense(orig_length, activation='linear')(decoded)

autoencoder = Model(input_vec, decoded)
encoder = Model(input_vec, encoded)

encoded_input = Input(shape=(encoding_dim,))
decoder_layer = autoencoder.layers[-4](encoded_input)
decoder_layer = autoencoder.layers[-3](decoder_layer)
decoder_layer = autoencoder.layers[-2](decoder_layer)
decoder_layer = autoencoder.layers[-1](decoder_layer)
decoder = Model(encoded_input, decoder_layer)

autoencoder.compile(optimizer='adam', loss=losses.mean_squared_error)

autoencoder.fit(input_arr, input_arr, batch_size=256, epochs=100)

Каков ваш входной диапазон, все положительное? Если у вас есть определенные элементы, которые всегда отрицательны, а начальный случайный вес положительный, relu застрянет.

nuric 08.09.2018 13:57

@nuric мой ввод содержит как положительные, так и отрицательные числа, подавляющее большинство из которых находятся в диапазоне [-10, +10].

Zagorax 08.09.2018 15:30

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

sdcbr 10.09.2018 13:27
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
24
0

Другие вопросы по теме