PyBrain 预测错误

4 投票
1 回答
691 浏览
提问于 2025-04-17 18:33

我正在尝试预测一组商品的销售价格。我使用的是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中的每个项目,我们都需要预测销售价格。问题是,对于valid中的每个项目,我得到的销售价格都是一样的,只有第一个项目的价格不同。我哪里出错了呢?提前谢谢大家。

数组的维度如下:

train - 401125, 52-len(NU)+5

target - 401125, 1

valid - 11573, 52-len(NU)+5

1 个回答

3

我不太清楚PyBrain的具体实现细节,但我看到有两种可能性。

1) 反向传播在使用线性激活函数时可能不太有效。根据PyBrain的实现细节,把两个“LinearLayer”改成“SigmoidLayer”可能会解决这个问题。

2) 对于递归神经网络(RNN),你需要使用时间反向传播(这是专门为RNN调整的算法),而不是普通的反向传播。根据PyBrain的实现细节,可能会有一个单独的类来处理这种情况。值得去看看。

撰写回答