Я пытаюсь построить автоэнкодер, используя 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)