我有一个数据集:
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)
答案 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))