减少维度:最佳架构

时间:2018-04-06 22:17:55

标签: tensorflow keras

我有一个数据集:

100 timesteps
10 variables 

例如,

dataset = np.arange(1000).reshape(100,10)

10个变量彼此相关。所以我想将其尺寸从10减少到1。 此外,100个时间步骤是相关的。

哪种深度学习架构适合它们?

编辑:

from keras.models import Sequential
from keras.layers import LSTM, Dense

X = np.arange(1000).reshape(100,10)

model = Sequential()
model.add(LSTM(input_shape = (100, 10), return_sequences=False))
model.add(Dense(1))
model.compile(loss='mse', optimizer='adam')

model.fit(???, epochs=50, batch_size=5)

1 个答案:

答案 0 :(得分:1)

为了压缩您的数据,最好的方法是使用自动编码器。

自动编码器架构:

输入--->编码器(降低输入的维数)---->解码器(尝试重新创建输入)--->输入的有损版本

通过提取经过训练的编码器,我们可以找到一种使用更少维度来表示数据的方法。

from keras.layers import Input, Dense
from keras.models import Model

input = Input(shape=(10,)) #will take an input in shape of (num_samples, 10)

encoded = Dense(1, activation='relu')(input) #returns a 1D vector from input

decoded = Dense(10, activation='sigmoid)(encoded) #tries to recreate input from 1D vector

autoencoder = Model(input, decoded) #input image ---> lossy reconstruction from decoded

现在我们有了自动编码器,我们需要提取你真正想要的东西 - 减少输入维数的零件编码器:

encoder = Model(input, encoded) #maps input to reduced-dimension encoded form

编译并训练自动编码器:

autoencoder.compile(optimizer='adam', loss='mse')
X = np.arange(1000).reshape(100, 10)
autoencoder.fit(X, X, batch_size=5, epochs=50)

现在您可以使用编码器来降低维度:

encoded_form = encoder.predict(<something with shape (samples, 10)>) #outs 1D vector

你可能也想要解码器。如果您打算使用它,请在编译和调整自动编码器之前放置这段代码:

encoded_form = Input(shape=(1,))
decoder_layer = autoencoder.layers[-1]
decoder = Model.(encoded_form, decoder_layer(encoded_form))