首页 > 解决方案 > 自动编码器未在 keras 中显示预期输出

问题描述

我正在 Keras 中尝试使用 AutoEncoders。我有一个数据集(网络入侵 NLS-DATASET),我希望我的自动编码器学习它的身份并能够重建输入。

但似乎自动编码器正在从输入生成输出方式。

我的自动编码器代码如下所示:

import keras
from keras.layers import Input, Dense
from keras.models import Model
input_event= Input(shape=(37,))
# encoded and decoded layer for the autoencoder
encoded = Dense(units=35, activation='linear')(input_event)
encoded = Dense(units=30 ,activation='linear')(encoded)
encoded = Dense(units=25 ,activation='linear')(encoded)
encoded = Dense(units=15, activation='linear')(encoded)
decoded = Dense(units=25, activation='linear')(encoded)
decoded = Dense(units=30, activation='linear')(decoded)
decoded = Dense(units=35, activation='linear')(decoded)
decoded = Dense(units=37, activation='sigmoid')(decoded)

# Building autoencoder
autoencoder=Model(input_event, decoded)
# compiling the autoencoder
#binary_crossentropy
autoencoder.compile(optimizer='adadelta', loss='mean_squared_error', metrics=['accuracy'])
# Fitting the noise trained data to the autoencoder 
autoencoder.fit(train_preprocessed, train_preprocessed,
                epochs=500,
                batch_size=500,
                shuffle=True
                )

输入看起来像这样:

array([  1.44929445e-04,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         1.95694716e-03,   1.95694716e-03,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         1.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         5.25490196e-01,   3.37254902e-01,   6.10000000e-01,
         4.00000000e-02,   6.10000000e-01,   2.00000000e-02,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00])

并且相同样本的重建输入如下所示:

array([  2.74842819e-06,   1.79134950e-05,   2.46820991e-06,
         1.92149782e-05,   1.90284572e-06,   8.65007848e-07,
         9.06300829e-06,   5.82939938e-05,   2.86187715e-05,
         7.64128927e-04,   1.39977574e-05,   2.23619267e-04,
         2.37729073e-05,   2.88849260e-05,   7.43528290e-07,
         3.19817104e-06,   1.04340703e-04,   5.09360158e-11,
         2.53149103e-02,   4.43180241e-02,   3.23981070e-03,
         6.98099006e-03,   1.20416423e-03,   2.04246654e-03,
         9.92004931e-01,   8.45971797e-03,   2.18889210e-02,
         5.33952713e-01,   2.81162173e-01,   6.86491251e-01,
         3.13708745e-02,   6.79274261e-01,   4.15302813e-03,
         2.21803953e-06,   9.70323163e-04,   3.18228710e-03,
         1.31858699e-03], dtype=float32)

我尝试在层之间使用不同的激活函数,我尝试了不同的层深度。不同的损失函数。

如果您能发现我做错了什么,我将不胜感激。

谢谢你。

标签: pythontensorflowkerasautoencoder

解决方案


推荐阅读