0

我正在尝试训练一个 lstm 自动编码器将输入空间转换为潜在空间,然后将其可视化,我希望在潜在空间中找到一些有趣的模式。输入是来自 9 个传感器的数据。它们将被转化为一个三维空间。

问题是当我运行代码时,有时将数据转换为 3 维,有时只使用一维或二维。其余维度为零。

这是我使用的自动编码器:

class Autoencoder(Model):

def __init__(self, latent_dim):
    super(Autoencoder, self).__init__()
    self.latent_dim = latent_dim   
    
    self.encoder = Sequential([
    layers.LSTM(features, activation='relu', input_shape=(time,features), return_sequences=True),
    layers.Dropout(0.3),
    layers.LSTM(latent_dim, activation='relu', return_sequences=False),
    layers.RepeatVector(time)
    ]) 
    
    self.decoder = Sequential([
    layers.LSTM(latent_dim, activation='relu', return_sequences=True),
    layers.Dropout(0.3),

    layers.LSTM(features, activation='relu', return_sequences=True),
    layers.TimeDistributed(Dense(features))
    ]) 

def call(self, x):
    encoded = self.encoder(x)
    decoded = self.decoder(encoded)
    return decoded


autoencoder = Autoencoder(latent_dim) 
autoencoder.compile(optimizer='adam', loss='mae')
history = autoencoder.fit(X, X, epochs=10, validation_split=0.2, shuffle=False)

encoded = autoencoder.encoder(X)
encoded_reshaped = pd.DataFrame(encoded.numpy().reshape(-1, latent_dim))

这是潜在空间,如您所见,编码器仅使用一维来表示数据

    0         1    2
0      0.0  2.164718  0.0
1      0.0  2.056577  0.0
2      0.0  2.020535  0.0
3      0.0  2.134846  0.0
4      0.0  2.109566  0.0
5      0.0  1.902232  0.0
6      0.0  1.919019  0.0
7      0.0  2.021480  0.0
8      0.0  1.839327  0.0
9      0.0  1.740795  0.0
10     0.0  2.008053  0.0
11     0.0  1.966692  0.0
12     0.0  1.899480  0.0
13     0.0  1.811787  0.0
14     0.0  2.182250  0.0
15     0.0  2.146597  0.0
16     0.0  1.908313  0.0

有谁知道原因以及如何避免它发生? 仅使用一维时

当使用 3 个维度时

4

0 回答 0