python - PyBrain 预测错误

标签 python pybrain

我正在尝试预测一组给定商品的销售价格。我在 pybrain 中使用 RecurrentNetwork 和 BackpropTrainer。这是我的代码,

def nnet(train, target, valid):

    ds = SupervisedDataSet(52-len(NU)+5, 1)

    for i in range(len(train)):
        ds.appendLinked(train[i], target[i])

    n = RecurrentNetwork()

    n.addInputModule(LinearLayer(52-len(NU)+5, name='in'))
    n.addModule(SigmoidLayer(3, name='hidden'))
    n.addOutputModule(LinearLayer(1, name='out'))

    n.addConnection(FullConnection(n['in'], n['hidden'], name='c1'))
    n.addConnection(FullConnection(n['hidden'], n['out'], name='c2'))
    n.addRecurrentConnection(FullConnection(n['hidden'], n['hidden'], name='c3'))

    n.sortModules()

    t = BackpropTrainer(n,learningrate=0.001,verbose=True)
    t.trainOnDataset(ds, 20)

    prediction = np.zeros((11573, 1), dtype = int)
    for i in range(11573):
        prediction[i] = n.activate(valid[i])

    return prediction

这里train 和target 是numpy 数组,用于训练模型,52-len(NU)+5 是属性(特征)的数量。对于valid 中的每个项目,我们必须预测销售价格。问题是,对于有效的每件商品,我得到相同的销售价格,除了第一个。我做错了什么?提前致谢。

数组维度如下,

火车 - 401125, 52-len(NU)+5

目标 - 401125, 1

有效 - 11573, 52-len(NU)+5

最佳答案

我不确定 PyBrain 的具体实现细节,但我看到了两种可能性。

1) 反向传播不适用于线性激活函数。根据 PyBrain 的实现细节,将“LinearLayer”的两个实例更改为“SigmoidLayer”可以解决此问题。

2) 对于递归神经网络,您必须使用时间反向传播(一种专门适用于 RNN 的算法)而不是正常的反向传播。根据 PyBrain 的实现细节,此变体可能有一个单独的类。值得一试。

关于python - PyBrain 预测错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15319030/

相关文章:

python - 为培训师设置数据时的 PyBrain AssertionError

python - 如何使用 Pybrain 预测新数据?

Python "here, . . . where"构造

python - 与python的网络连接

python - 请求例如 : Recurrent neural network for predicting next value in a sequence

python - PyBrain 多个目标值

python - 如何检查我的字典中是否只有一个值被填充?

python - 如何在 Pygame 中卸载图像?

Python 打开 html 文件,截屏,裁剪并另存为图像

如果可见,Python Selenium 单击一个元素