首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于预测序列数据的pybrain LSTM序列

用于预测序列数据的pybrain LSTM序列
EN

Stack Overflow用户
提问于 2014-08-22 13:07:46
回答 1查看 2.6K关注 0票数 3

我已经用pybrain写了一个简单的代码来预测一个简单的序列数据。例如,0,1,2,3,4的序列将从网络得到5的输出。数据集指定剩余的序列。下面是我的代码实现

代码语言:javascript
复制
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.datasets import SequentialDataSet
from pybrain.structure import SigmoidLayer, LinearLayer
from pybrain.structure import LSTMLayer

import itertools
import numpy as np

INPUTS = 5
OUTPUTS = 1
HIDDEN = 40

net = buildNetwork(INPUTS, HIDDEN, OUTPUTS, hiddenclass=LSTMLayer, outclass=LinearLayer, recurrent=True, bias=True) 

ds = SequentialDataSet(INPUTS, OUTPUTS)
ds.addSample([0,1,2,3,4],[5])
ds.addSample([5,6,7,8,9],[10])
ds.addSample([10,11,12,13,14],[15])
ds.addSample([16,17,18,19,20],[21])

net.randomize()

trainer = BackpropTrainer(net, ds)

for _ in range(1000):
    print trainer.train()

x=net.activate([0,1,2,3,4])
print x 

每次简单的时候,我屏幕上的输出都会显示0.99999999 0.99999999 0.9999999 0.99999999。我遗漏了什么?训练还不够吗?因为trainer.train()

显示86.625的输出。

EN

回答 1

Stack Overflow用户

发布于 2014-08-26 07:37:12

pybrain sigmoidLayer正在实现sigmoid挤压功能,您可以在这里看到:

sigmoid squashing function code

相关部分如下:

代码语言:javascript
复制
def sigmoid(x):
""" Logistic sigmoid function. """
return 1. / (1. + safeExp(-x))

因此,无论x的值是多少,它只会返回0到1之间的值。出于这个原因以及其他原因,最好将您的输入和输出值调整到0和1之间。例如,将所有输入除以最大值(假设最小值不低于0),输出也是如此。然后对结果进行相反的处理(例如,如果一开始除以25,则乘以25 )。

另外,我不是pybrain方面的专家,但我想知道您是否需要输出= 4?看起来您的数据中只有一个输出,所以我想知道您是否可以只使用output = 1。

您还可以尝试将输入和输出缩放到sigmoid曲线的特定部分(例如,在0.1和0.9之间),以使pybrain的工作更容易,但这会使缩放前后的缩放稍微复杂一些。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25439910

复制
相关文章

相似问题

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