为什么我的自动编码器未使用其代码的所有元素?

时间:2018-09-08 10:53:32

标签: python neural-network keras autoencoder

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

0 个答案:

没有答案