我想知道这两个模型之间的区别。 上面的一个有 4 层查看模型摘要,您还可以定义用于降维的单位编号。但是第二个模型有什么,它有 3 层,你不能直接定义隐藏单元的数量?两个 LSTM 自动编码器都用于降维和回归分析吗?有没有很好的论文来描述我从keras和这里找到的两个例子。我没有在任何地方定义变量,事实上我没有直接询问编码问题。我希望这也是这个话题的好地方。 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具有形状(无,300,100(,但得到具有形状的数组(1000,300,1(
模型不接受我的数据形状和单位大小的错误在哪里?
这两个模型没有结构差异;它们都由一个编码器和一个由 LSTM 层实现的解码器组成。区别在于符号;第一个模型在函数式 API 上定义,输入被视为层,而第二个模型使用顺序 API 定义。至于编码器-解码器(也称为seq2seq(架构,它最初是在这里提出的,并且已经有了很大的发展,其中最显着的改进是注意力层。
第二个模型中LSTM
层的单元数是其初始值设定项的第一个参数,即 2。也就是说,如果你让timestep = 10
、input_dim = 2
和units = 2
,那么这两个模型是完全等价的。