2个LSTM自动编码器之间的区别
Difference between 2 LSTM Autoencoders
我想知道这两种型号之间的区别。上面的模型有 4 个层来查看模型摘要,您还可以定义降维的单元数。但是第二个模型有 3 层,你不能直接定义隐藏单元的数量,这是怎么回事? LSTM 自动编码器是否都用于降维和回归分析?我从 keras andhere 中找到了描述这两个示例的好论文吗?我没有在任何地方定义变量,事实上我不是直接询问编码问题。我希望这也是这个话题的好地方。
1.型号:
from keras.layers import *
from keras.models import Model
from keras.layers import Input, LSTM, Dense, RepeatVector
samples=1000
timesteps=300
features=input_dim=1
data_shape=np.reshape(data,(samples,timestep,input_dim)
inputs = Input(shape=(timestep, input_dim))
encoded = LSTM(units, return_sequences=False, name="encoder")(inputs)
decoded = RepeatVector(timestep)(encoded)
decoded = LSTM(input_dim, return_sequences=True, name='decoder')(decoded)
autoencoder = Model(inputs, decoded)
encoder = Model(inputs, encoded)
print (autoencoder.summary())
2。型号:
x = np.random.random((1000, 300, 1))
2.model:
m = Sequential()
m.add(LSTM(100, input_shape=(300,1)))
m.add(RepeatVector(300))
m.add(LSTM(100, return_sequences=True))
print (m.summary())
m.compile(loss='mse', optimizer='rmsprop', metrics=['mse', 'mape'])
history = m.fit(x, x, nb_epoch=2000, batch_size=100)
当我尝试向它们添加具有形状的数据时,例如(1000, 300, 1) 第一个接受它,第二个不接受,我得到错误预期 lstm_4 具有形状 (None, 300, 100) 但得到形状为 (1000, 300) 的数组, 1).选择 input_dim 1 且单位 =100。我究竟做错了什么 ?这就是我想成为的人:
LSTM(100, input_shape=(300, 1))
单位=100
当我 运行 模型时,出现以下错误:检查目标时出错:预期 lstm_2 具有形状 (None, 300, 100) 但得到形状为 (1000, 300) 的数组, 1)
我的模型不接受我的数据形状和单位大小的错误在哪里?
第二个模型中LSTM
层的单元数是其初始化器的第一个参数,即2。也就是说,如果你让timestep = 10
,input_dim = 2
, 和 units = 2
, 那么这两个模型完全等价.
两个模型在结构上没有区别;它们都由一个编码器和一个由 LSTM 层实现的解码器组成。区别是符号上的;第一个模型是在 functional API with the input being considered a layer, whereas the second is defined using the sequential API. As for the encoder-decoder (otherwise known as seq2seq) architecture, it was originally proposed here 上定义的,此后有了很大的发展,最显着的改进是注意力层。
我想知道这两种型号之间的区别。上面的模型有 4 个层来查看模型摘要,您还可以定义降维的单元数。但是第二个模型有 3 层,你不能直接定义隐藏单元的数量,这是怎么回事? LSTM 自动编码器是否都用于降维和回归分析?我从 keras andhere 中找到了描述这两个示例的好论文吗?我没有在任何地方定义变量,事实上我不是直接询问编码问题。我希望这也是这个话题的好地方。 1.型号:
from keras.layers import *
from keras.models import Model
from keras.layers import Input, LSTM, Dense, RepeatVector
samples=1000
timesteps=300
features=input_dim=1
data_shape=np.reshape(data,(samples,timestep,input_dim)
inputs = Input(shape=(timestep, input_dim))
encoded = LSTM(units, return_sequences=False, name="encoder")(inputs)
decoded = RepeatVector(timestep)(encoded)
decoded = LSTM(input_dim, return_sequences=True, name='decoder')(decoded)
autoencoder = Model(inputs, decoded)
encoder = Model(inputs, encoded)
print (autoencoder.summary())
2。型号:
x = np.random.random((1000, 300, 1))
2.model:
m = Sequential()
m.add(LSTM(100, input_shape=(300,1)))
m.add(RepeatVector(300))
m.add(LSTM(100, return_sequences=True))
print (m.summary())
m.compile(loss='mse', optimizer='rmsprop', metrics=['mse', 'mape'])
history = m.fit(x, x, nb_epoch=2000, batch_size=100)
当我尝试向它们添加具有形状的数据时,例如(1000, 300, 1) 第一个接受它,第二个不接受,我得到错误预期 lstm_4 具有形状 (None, 300, 100) 但得到形状为 (1000, 300) 的数组, 1).选择 input_dim 1 且单位 =100。我究竟做错了什么 ?这就是我想成为的人:
LSTM(100, input_shape=(300, 1))
单位=100 当我 运行 模型时,出现以下错误:检查目标时出错:预期 lstm_2 具有形状 (None, 300, 100) 但得到形状为 (1000, 300) 的数组, 1)
我的模型不接受我的数据形状和单位大小的错误在哪里?
第二个模型中LSTM
层的单元数是其初始化器的第一个参数,即2。也就是说,如果你让timestep = 10
,input_dim = 2
, 和 units = 2
, 那么这两个模型完全等价.
两个模型在结构上没有区别;它们都由一个编码器和一个由 LSTM 层实现的解码器组成。区别是符号上的;第一个模型是在 functional API with the input being considered a layer, whereas the second is defined using the sequential API. As for the encoder-decoder (otherwise known as seq2seq) architecture, it was originally proposed here 上定义的,此后有了很大的发展,最显着的改进是注意力层。