首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于多个同时序列的Keras序列预测

基于多个同时序列的Keras序列预测
EN

Stack Overflow用户
提问于 2017-10-23 01:43:53
回答 1查看 2K关注 0票数 3

我的问题与这个职位的问题非常相似,尽管这篇文章并没有给出一个令人满意的解决方案。为了详细说明,我目前正在使用带有tensorflow后端和顺序LSTM模型的keras。最终目标是我有n个与时间相关的序列,它们具有相同的时间步长(每个序列上的点数相同,所有的点都是相同的时间间隔),我想把所有的n个序列输入到同一个网络中,这样它就可以利用序列之间的相关性来更好地预测每个序列的下一步。我理想的输出是n元素一维数组,数组对应于sequence_1的下一步预测,array1用于sequence_2,等等。

我的输入是单个值的序列,所以每个n个输入都可以被解析成一个一维数组。

我能够独立地使用Jakob在本指南末尾的代码为每个序列获得一个工作模型,尽管我的困难是将它调整为一次接受多个序列并在它们之间进行关联(即并行分析)。我相信这个问题与我的输入数据的形状有关,它目前以4维的numpy数组的形式存在,因为Jakob的指南是如何将输入分成30个元素的子序列来进行增量分析,尽管我也完全忽略了这里的目标。我的代码(主要是Jakob的代码,不试图为任何不是我的代码取功劳)现在看起来像

因为-这是抱怨"ValueError:错误时,检查目标:期望的activation_1有形状(无,4),但得到数组与形状(4,490)",我肯定还有很多其他问题,但我想知道一些方向,如何实现我所描述的。有什么东西会立即出现在任何人身上吗?你所能给予的任何帮助都将不胜感激。

谢谢!

-Eric

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-23 13:20:26

Keras已经准备好处理包含许多序列的批处理,根本不存在任何秘密。

不过,有两种可能的办法:

  • 输入整个序列(一次输入所有步骤)并预测n个结果
  • 您只输入所有序列中的一个步骤,并在一个循环中预测下一步。

假设:

代码语言:javascript
复制
nSequences = 30
timeSteps = 50
features = 1 #(as you said: single values per step)
outputFeatures = 1

第一批:stateful=False

代码语言:javascript
复制
inputArray = arrayWithShape((nSequences,timeSteps,features))
outputArray = arrayWithShape((nSequences,outputFeatures))
input_shape = (timeSteps,features)

#use layers like this:
LSTM(units) #if the first layer in a Sequential model, add the input_shape
    #if you want to return the same number of steps (like a new sequence parallel to the input, use return_sequences=True

像这样的火车:

代码语言:javascript
复制
model.fit(inputArray,outputArray,....)

像这样预测:

代码语言:javascript
复制
newStep = model.predict(inputArray)

第二种方法:stateful=True

代码语言:javascript
复制
inputArray = sameAsBefore
outputArray = inputArray[:,1:] #one step after input array
inputArray = inputArray[:,:-1] #eliminate the last step
batch_input = (nSequences, 1, features) #stateful layers require the batch size

#use layers like this:
LSMT(units, stateful=True) #if the first layer in a Sequential model, add input_shape

像这样的火车:

代码语言:javascript
复制
model.reset_states() #you need this in stateful=True models
    #if you don't reset states, 
    #the stateful model will think that your inputs are new steps of the same previous sequences
for step in range(inputArray.shape[1]): #for each time step
    model.fit(inputArray[:,step:step+1], outputArray[:,step:step+1],shuffle=False,...)

像这样预测:

代码语言:javascript
复制
model.reset_states()

predictions = np.empty(inputArray.shape)
for step in range(inputArray.shape[1]): #for each time step
    predictions[:,step] = model.predict(inputArray[:,step:step+1]) 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46880887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档