Pybrain - 使用 Backprop 训练器的 SequentialDataSet 给出切片索引错误
Pybrain - SequentialDataSet using Backprop trainer give a slice indices error
我在整个互联网上搜索了这个,没有找到任何东西,除了堆栈溢出 'deleted' post。
问题如下:
PyBrain LSTM + SequencialDataSet 上的每个示例和教程都会给我以下错误:
TypeError: slice indices must be integers or None or have an __index__ method
根据我之前的搜索,这似乎是一个问题,在某个版本的 python 之后,整数运算 returns float 而不是 整数
但是,它似乎适用于像我一样使用 python 2.x 的其他人。
有什么想法吗?
代码(不是我的,取自另一个 Whosebug post):
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
这给了我这个错误:
File "try3.py", line 27, in <module>
print trainer.train()
File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.3-py2.7.egg/pybrain/supervised/trainers/backprop.py", line 57, in train
for seq in self.ds._provideSequences():
File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.3-py2.7.egg/pybrain/datasets/sequential.py", line 173, in _provideSequences
return iter(map(list, iter(self)))
File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.3-py2.7.egg/pybrain/datasets/sequential.py", line 169, in __iter__
yield self.getSequenceIterator(i)
File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.3-py2.7.egg/pybrain/datasets/sequential.py", line 63, in getSequenceIterator
return zip(*self.getSequence(index))
File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.3-py2.7.egg/pybrain/datasets/sequential.py", line 56, in getSequence
return [self._getSequenceField(index, l) for l in self.link]
File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.3-py2.7.egg/pybrain/datasets/sequential.py", line 45, in _getSequenceField
return self.getField(field)[seq[index]:]
TypeError: slice indices must be integers or None or have an __index__ method
使用:
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
找到了,不同之处在于 pybrain,这在我的设置中修复了它:
pip uninstall pybrain
pip install pybrain
试试看,
我在整个互联网上搜索了这个,没有找到任何东西,除了堆栈溢出 'deleted' post。
问题如下: PyBrain LSTM + SequencialDataSet 上的每个示例和教程都会给我以下错误:
TypeError: slice indices must be integers or None or have an __index__ method
根据我之前的搜索,这似乎是一个问题,在某个版本的 python 之后,整数运算 returns float 而不是 整数
但是,它似乎适用于像我一样使用 python 2.x 的其他人。 有什么想法吗?
代码(不是我的,取自另一个 Whosebug post):
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
这给了我这个错误:
File "try3.py", line 27, in <module>
print trainer.train()
File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.3-py2.7.egg/pybrain/supervised/trainers/backprop.py", line 57, in train
for seq in self.ds._provideSequences():
File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.3-py2.7.egg/pybrain/datasets/sequential.py", line 173, in _provideSequences
return iter(map(list, iter(self)))
File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.3-py2.7.egg/pybrain/datasets/sequential.py", line 169, in __iter__
yield self.getSequenceIterator(i)
File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.3-py2.7.egg/pybrain/datasets/sequential.py", line 63, in getSequenceIterator
return zip(*self.getSequence(index))
File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.3-py2.7.egg/pybrain/datasets/sequential.py", line 56, in getSequence
return [self._getSequenceField(index, l) for l in self.link]
File "/usr/local/lib/python2.7/dist-packages/PyBrain-0.3.3-py2.7.egg/pybrain/datasets/sequential.py", line 45, in _getSequenceField
return self.getField(field)[seq[index]:]
TypeError: slice indices must be integers or None or have an __index__ method
使用:
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
找到了,不同之处在于 pybrain,这在我的设置中修复了它:
pip uninstall pybrain
pip install pybrain
试试看,