python - Keras 的 LSTM 真的考虑到了细胞状态和之前的输出吗?

标签 python tensorflow keras lstm

我在过去的一天了解了 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/

相关文章:

python - python中并排的双方括号

python - 在 Django 的 TEMPLATE_DIRS 中使用外部 URL

Tensorflow @tf.function - 无法在 Tensorflow 图形函数内获取 session

python - 当我增加神经元或层数时,我的 tensorflow 模型无法训练

python - Keras 在达到训练后保存最佳模型

python - 列表 3 位数字的所有可能组合永远不会相同

python - 从 appengine 迁移到完整的 django 的下一步是什么?

machine-learning - Tensorflow CUDA GTX 1070 导入错误

machine-learning - 两个 Keras 层之间的自定义(卷积)连接

python - 如何对自定义 Keras/Tensorflow 损失函数中的值进行排序?