我在过去的一天了解了 LSTM
,然后我决定看一个使用 Keras
创建它的教程。我看了几个教程,他们都有
model = Sequential()
model.add(LSTM(10, input_shape=(1,1)))
model.add(Dense(1, activation='linear'))
model.compile(loss='mse', optimizer='adam')
X,y = get_train()
model.fit(X, y, epochs=300, shuffle=False, verbose=0)
然后他们预测使用
model.predict(X, verbose=0)
我的问题是:为了使用 LSTM 预测下一个结果,您不必给出先前的预测以及输入和细胞状态吗?
另外,model.add(LSTM(10, input_shape(1,1))
中的 10 代表什么?
最佳答案
您必须将先前的预测提供给 LSTM 状态。如果你调用 predict LSTM 每次都会被初始化,它不会记住之前预测的状态。
通常(例如,如果你用 lstm 生成文本)你有一个循环,你可以在其中做这样的事情:
# pick a random seed
start = numpy.random.randint(0, len(dataX)-1)
pattern = dataX[start]
print "Seed:"
print "\"", ''.join([int_to_char[value] for value in pattern]), "\""
# generate characters
for i in range(1000):
x = numpy.reshape(pattern, (1, len(pattern), 1))
x = x / float(n_vocab)
prediction = model.predict(x, verbose=0)
index = numpy.argmax(prediction)
result = int_to_char[index]
seq_in = [int_to_char[value] for value in pattern]
sys.stdout.write(result)
pattern.append(index)
pattern = pattern[1:len(pattern)]
print "\nDone."
(示例从 machinelearningmastery.com 复制)
重要的是这一行:
pattern.append(index)
pattern = pattern[1:len(pattern)]
在这里,他们将下一个字符附加到模式中,然后删除第一个字符以使输入长度与 lstm 的预期相匹配。然后将它带到一个 numpy 数组 (x = np.reshape(...)) 并使用生成的输出从模型中进行预测。因此,要回答您的第一个问题,您需要再次输入输出。
对于第二个问题,10 对应于一层中的 lstm 单元数。如果您不使用“return_sequences=True”,它对应于该层的输出大小。
关于python - Keras 的 LSTM 真的考虑到了细胞状态和之前的输出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56520140/