Python 如何使用有状态LSTM进行预测?
好的,所以我训练了一个有状态的LSTM角色。就准确性而言,它似乎做得不太差,但我知道我想创作自己的莎士比亚作品 问题是,我如何从中实际生成预测 特别是,模型批输入形状为(128、128、63),输出形状为(128、128、63)。(第一个数字是批量大小,第二个数字是预测输入和输出的长度,第三个数字是文本中不同字符的数量。) 例如,我想:Python 如何使用有状态LSTM进行预测?,python,tensorflow,keras,lstm,prediction,Python,Tensorflow,Keras,Lstm,Prediction,好的,所以我训练了一个有状态的LSTM角色。就准确性而言,它似乎做得不太差,但我知道我想创作自己的莎士比亚作品 问题是,我如何从中实际生成预测 特别是,模型批输入形状为(128、128、63),输出形状为(128、128、63)。(第一个数字是批量大小,第二个数字是预测输入和输出的长度,第三个数字是文本中不同字符的数量。) 例如,我想: 从空文本开始生成各种预测 从小的起始文本(例如“PYRULEZ:”)开始生成预测 考虑到LSTM的工作方式,这应该是可能的 以下是用于生成和拟合模型的代码片
- 从空文本开始生成各种预测
- 从小的起始文本(例如“PYRULEZ:”)开始生成预测
model = Sequential()
model.add(LSTM(dataY.shape[2], batch_input_shape=(128, dataX.shape[1], dataX.shape[2]), return_sequences = True, stateful=True, activation = "softmax"))
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics = ['acc'])
model.fit(dataX, dataY, epochs = 1, batch_size = 128, verbose=1, shuffle = False)
看看其他代码示例,我似乎需要以某种方式修改它,但我不确定具体修改的方式
如果有帮助的话,我可以包括整个代码示例。它是独立的。简单。将您的输入放入带有适当参数的
model.predict()
(参见文档),连接输入和输出(模型预测的链逐渐变长)。根据您组织培训的方式,输出将一次添加一个角色。更准确地说,如果你训练一个序列一个序列移位,你的输出序列将理想地成为你的输入序列移位一个元素;PYRULEZ->YRULEZ*因此您需要获取输出的最后一个字符,并将其添加到先前的(输入)序列中
如果需要长行文本,可能需要将序列长度限制为循环中的某些字符数。文本中的许多长期依赖关系都是通过LSTM单元的状态向量进行的(不是与之交互的东西)
伪代码ish:
for counter in range(output_length):
output = model.predict(input_)
input_ = np.concatenate((input_, output[:,-1,:]), axis=1)
我看不到predict的选项允许您输入小于输入大小的输入。@PyRulez将批输入形状更改为
[128,None,dataXshape[2]]
以具有可变输入长度。