【发布时间】:2020-01-26 22:38:10
【问题描述】:
我有一个非常小的自动编码器示例:
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Dense
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
首先,我使用高度相关的变量 A 和 B(已经标准化)创建一个数据集
X = pd.DataFrame( (np.random.randn(1000,2)), columns=["A", "B"] )
X["B"] = X["A"] + X["B"]/4
然后我设置自动编码器并训练它
aeInput = Input(2)
encode = Dense(2, activation='relu')(aeInput)
aeOutput = Dense(2, activation='relu')(encode)
AE = Model(aeInput, aeOutput, name="autoencoder")
AE.compile(optimizer='adam', loss="mean_squared_error", )
TrainAE = AE.fit( x=X, y=X, epochs=100, batch_size=2**5,)
训练看起来不错并且收敛平滑,但是当我查看结果时,输出主要是零。
f, ax = plt.subplots(figsize=(8, 8))
sns.kdeplot( X, shade=False, axis=ax)
sns.kdeplot( AE.predict(X), shade=False, axis=ax)
这对我来说似乎很奇怪,因为编码层与输入一样大,所以一个简单且无损失的解决方案就是直接连接第一个 A 神经元,激活值为 1,对于B 的第二个神经元编码。为什么这没有发生?有没有我错误使用的参数?
【问题讨论】:
标签: python keras neural-network autoencoder