【问题标题】:Difference between 2 LSTM Autoencoders2 个 LSTM 自动编码器之间的区别
【发布时间】:2018-04-28 19:03:25
【问题描述】:

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

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)

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

【问题讨论】:

    标签: python keras autoencoder


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 当我尝试向它们添加一个形状为例如的数据时(1000, 300, 1) 第一个接受它,第二个不接受,我得到错误预期 lstm_4 具有形状 (None, 300, 100) 但得到形状为 (1000, 300, 1) 的数组。使用选择的 input_dim 1 和单位 =100。我做错了什么?
      • 听起来您使用的是LSTM(1, input_shape=(300, 100)) 而不是LSTM(100, input_shape=(300, 1))
      • 我正在纠正它:我使用了你建议的形状,但仍然是同样的错误。
      • 当我执行 LSTM(1, input_shape=(300, 1)) 时,它可以正常工作,但这不是我想要的,我有一个功能和 300 的输入大小减少到 100 个单位.
      • The first parameter to LSTM is the number of units;你能用你从LSTM(100, input_shape=(300, 1))得到的错误更新你的问题吗?
      猜你喜欢
      • 2018-08-19
      • 2017-11-22
      • 2018-08-24
      • 2022-08-14
      • 2018-07-16
      • 1970-01-01
      • 2021-03-20
      • 2018-07-05
      • 2012-06-13
      相关资源
      最近更新 更多