Python 两个LSTM自动编码器之间的差异

Python 两个LSTM自动编码器之间的差异,python,keras,autoencoder,Python,Keras,Autoencoder,我想知道这两种型号之间的区别。上面的一个有4个层查看模型摘要,您还可以定义用于降维的单位数。但是第二个模型是什么?它有3层,你不能直接定义隐藏单位的数量?LSTM自动编码器是否都用于降维和回归分析?我从和中找到了描述这两个例子的好文章吗。我没有定义变量,事实上我没有直接问编码问题。我希望这也是讨论这个话题的好地方。 1.型号: from keras.layers import * from keras.models import Model from keras.layers import In

我想知道这两种型号之间的区别。上面的一个有4个层查看模型摘要,您还可以定义用于降维的单位数。但是第二个模型是什么?它有3层,你不能直接定义隐藏单位的数量?LSTM自动编码器是否都用于降维和回归分析?我从和中找到了描述这两个例子的好文章吗。我没有定义变量,事实上我没有直接问编码问题。我希望这也是讨论这个话题的好地方。 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())
二,。型号:

x = np.random.random((1000, 300, 1))
2.型号:

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具有形状(无,300,100),但具有形状(1000,300,1)的数组。选择输入尺寸1,单位=100。我做错了什么?这就是我想要的:

LSTM(100, input_shape=(300, 1))
单位=100 当我运行模型时,我得到以下错误:检查目标时出错:预期lstm_2具有形状(None,300100),但得到具有形状(1000300,1)的数组


我的错误在哪里?模型不接受我的数据形状和单位大小?

第二个模型中的
LSTM
层的单位数是其初始值设定项的第一个参数,即2。也就是说,如果你让
timestep=10
input\u dim=2
,和
units=2
,那么这两个模型是完全等效的。

这两个模型没有结构上的差异;它们都由一个编码器和一个由LSTM层实现的解码器组成。差异是显著的;第一个模型是在上定义的,输入被视为一个层,而第二个模型是使用定义的。至于编码器-解码器(也称为seq2seq)体系结构,它最初是被提出的,后来得到了很大的发展,最显著的改进是注意层。

当我尝试向这两个层添加形状为(1000、300、1)的数据时,第一个接受,第二个不接受,我得到的错误预期lstm_4具有形状(无,300,100),但得到了具有形状(1000,300,1)的数组。选择输入尺寸1,单位=100。我做错了什么?听起来你用的是
LSTM(1,input_-shape=(300,100))
而不是
LSTM(100,input_-shape=(300,1))
。我正在纠正它:我使用了你建议的形状,但仍然是相同的错误。当我使用LSTM(1,input_-shape=(300,1))时,它工作正常,但这不是我想要的,我有一个功能和输入大小300减少到100个单位。;你能用你从
LSTM(100,input_shape=(300,1))
得到的错误更新你的问题吗?