0

我想知道这两个模型之间的区别。上面的有 4 层查看模型摘要,您还可以定义降维的单元数。但是第二个模型是什么,它有 3 层,你不能直接定义隐藏单元的数量?LSTM 自动编码器都用于降维和回归分析吗?我从keras这里找到了描述这两个例子的好论文吗?我没有在任何地方定义变量,事实上我并没有直接询问编码问题。我希望这也是这个话题的好地方。一、型号:

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.型号:

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) 的数组

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

4

2 回答 2

0

第二个模型中层的单元数LSTM是其初始化程序的第一个参数,即 2。也就是说,如果您让timestep = 10input_dim = 2units = 2,那么这两个模型是完全等价的。

于 2018-04-28T19:21:55.213 回答
0

两种型号没有结构上的区别;它们都由一个编码器和一个由 LSTM 层实现的解码器组成。区别在于符号;第一个模型是在功能 API上定义的,输入被视为一个层,而第二个模型是使用顺序 API定义的。至于编码器-解码器(也称为 seq2seq)架构,最初是在这里提出的,并且后来有了很大的发展,其中最显着的改进是注意力层。

于 2018-04-28T19:23:34.983 回答