python - 自动编码器未在 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)
我尝试在层之间使用不同的激活函数,我尝试了不同的层深度。不同的损失函数。
如果您能发现我做错了什么,我将不胜感激。
谢谢你。
解决方案
推荐阅读
- sql - 在将回车符和换行符视为普通空格时从 SQL 中选择
- cmake - 如果安装了新版本,为什么仍然使用旧版本的 cmake?
- c - 关于递归转置密码对任意长度字符串的推广
- javascript - 用户保存图像后 Safari 重新加载页面
- javascript - 使用 Cypress.io 对我自己的 Node 模块进行单元测试时出错
- python - Python Pandas:用三个不同的值在数据框中创建一列
- html - 避免画布元素上的分页符
- python - 在不知道要删除的列表的情况下从给定列表中删除列表
- java - 禁用 CSS 时,HTMLUnit 不会执行 JavaScript 并加载所有内容
- python - 如何解析python代码并且只获取没有缩进的变量?