我正在尝试使用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)