我试图预测一组特定商品的销售价格。我在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
这里的火车和目标是numpy阵列,用于训练模型,52-len(NU)+5是属性(特征)的数量。对于每个有效的项目,我们必须预测销售价格。问题是,对于每个有效的项目,我得到相同的销售价格,除了第一个。我做错了什么?提前谢谢。
数组维度如下,
火车 - 401125,52-len(NU)+5
目标 - 401125,1
有效 - 11573,52-len(NU)+5
答案 0 :(得分:3)
我不确定PyBrain的具体实现细节,但我看到了两种可能性。
1)反向传播不适用于线性激活功能。根据PyBrain的实现细节,将“LinearLayer”的实例更改为“SigmoidLayer”可以解决此问题。
2)对于递归神经网络,您必须使用反向传播(一种专门针对RNN的算法)而不是正常的反向传播。根据PyBrain的实现细节,此变体可能有一个单独的类。值得一试。