我正在使用Python 2.7并尝试让PyBrain工作.
但即使安装了scipy,我也会收到此错误 -
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/PyBrain-0.3.1-
py2.7.egg/pybrain/__init__.py", line 1, in <module>
from pybrain.structure.__init__ import *
File "/usr/local/lib/python2.7/site-packages/PyBrain-0.3.1-py2.7.egg/pybrain/structure/__init__.py", line 1, in <module>
from pybrain.structure.connections.__init__ import *
File "/usr/local/lib/python2.7/site-packages/PyBrain-0.3.1-py2.7.egg/pybrain/structure/connections/__init__.py", line 1, in <module>
from pybrain.structure.connections.full import FullConnection
File "/usr/local/lib/python2.7/site-packages/PyBrain-0.3.1-py2.7.egg/pybrain/structure/connections/full.py", line 3, in <module>
from scipy import reshape, dot, outer
ImportError: No module named scipy
Run Code Online (Sandbox Code Playgroud)
我用这个命令安装了scipy -
sudo apt-get install python-scipy
Run Code Online (Sandbox Code Playgroud)
我明白了 -
Reading package lists... Done
Building dependency tree
Reading state …Run Code Online (Sandbox Code Playgroud) 当我在阅读如何在pybrain中构建ANN时,他们说:
训练网络一些时代.通常你会在这里设置类似5的东西,
Run Code Online (Sandbox Code Playgroud)trainer.trainEpochs( 1 )
我寻找的是什么意思,然后我得出结论,我们使用一个数据时代来更新权重,如果我选择训练5个时期的数据作为pybrain建议,数据集将被分成5个子集,并且权重将更新最多5倍.
我熟悉在每次样本数据或特征向量后更新权利的在线培训,我的问题是如何确定5个时代足以构建模型并设置权重?这种方式在线培训的优势是什么?术语"epoch"也用于在线培训,是否意味着一个特征向量?
artificial-intelligence machine-learning neural-network pybrain
我有以下代码,来自PyBrain教程:
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure.modules import TanhLayer
ds = SupervisedDataSet(2, 1)
ds.addSample((0,0), (0,))
ds.addSample((0,1), (1,))
ds.addSample((1,0), (1,))
ds.addSample((1,1), (0,))
net = buildNetwork(2, 3, 1, bias=True, hiddenclass=TanhLayer)
trainer = BackpropTrainer(net, ds)
for inp, tar in ds:
print [net.activate(inp), tar]
errors = trainer.trainUntilConvergence()
for inp, tar in ds:
print [net.activate(inp), tar]
Run Code Online (Sandbox Code Playgroud)
然而,结果是一个训练不好的神经网络.在查看错误输出时,网络会得到正确的训练,但是它会使用'continueEpochs'参数来训练更多,并且网络再次表现更差.因此网络正在融合,但没有办法获得训练有素的网络.PyBrain的文档意味着返回的网络被训练得最好,但它会返回一个错误元组.
当我将continueEpochs设为0时,我得到一个错误(ValueError:max()arg是一个空序列)所以continueEpochs必须大于0.
是否实际维护了PyBrain,因为它似乎在文档和代码方面存在很大差异.
任何人都可以给我一个(pybrain)python中循环神经网络的实例,以预测序列的下一个值吗?(我已经阅读了pybrain文档,我认为没有明确的例子.)我也发现了这个问题.但我没有看到它在更一般的情况下是如何工作的.因此,我在问这里是否有人能够找到一个明确的例子,说明如何使用递归神经网络预测pybrain中序列的下一个值.
举个例子.
比方说,我们有一系列数字在[1,7]范围内.
First run (So first example): 1 2 4 6 2 3 4 5 1 3 5 6 7 1 4 7 1 2 3 5 6
Second run (So second example): 1 2 5 6 2 4 4 5 1 2 5 6 7 1 4 6 1 2 3 3 6
Third run (So third example): 1 3 5 7 2 4 6 7 1 3 5 6 7 1 4 6 …Run Code Online (Sandbox Code Playgroud) 我想创建一个遵循以下布局的人工神经网络(在PyBrain中):

但是,我无法找到实现这一目标的正确方法.我在文档中看到的唯一选项是创建完全连接的层的方法,这不是我想要的:我希望我的一些输入节点连接到第二个隐藏层而不是第一个隐藏层.
我已经玩过pybrain,了解如何使用自定义架构生成神经网络,并使用反向传播算法将它们训练到监督数据集.
但是我对优化算法以及任务,学习代理和环境的概念感到困惑.
例如:我如何实现神经网络,如(1)使用pybrain遗传算法(2)对XOR数据集进行分类?
(1) pybrain.tools.shortcuts.buildNetwork(2, 3, 1)
(2) pybrain.optimization.GA()
使用Pybrain训练DBN有些困难.首先,我尝试以简单的方式做到这一点:
net = buildNetwork(*layerDims)
Run Code Online (Sandbox Code Playgroud)
我遇到了这个问题:如何在PyBrain中进行有监督的深度信仰训练?,建议的解决方案只是导致了另一个错误:
File "/home/WORK/Canopy_64bit/User/lib/python2.7/site-packages/PyBrain-0.3.1- py2.7.egg/pybrain/unsupervised/trainers/deepbelief.py", line 62, in <genexpr>
layercons = (self.net.connections[i][0] for i in layers)
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)
所以我试着从头开始定义一个网络!
inp = LinearLayer(3 , 'visible')
hidden0 = SigmoidLayer(2 , 'hidden0')
hidden1= SigmoidLayer(2 , 'hidden1')
output = LinearLayer(2 , 'output')
bias = BiasUnit('bias')
net = Network()
net.addInputModule(inp)
net.addModule(hidden0)
net.addModule(hidden1)
net.addModule(output)
net.addModule(bias)
net.addConnection(FullConnection(inp, hidden0))
net.addConnection(FullConnection(hidden0, hidden1))
net.addConnection(FullConnection(hidden1, output))
net.addConnection(FullConnection(bias, hidden0))
net.addConnection(FullConnection(bias, hidden1))
net.addConnection(FullConnection(bias, output))
net.sortModules()
Run Code Online (Sandbox Code Playgroud)
我还在跑的时候:
trainer = deepbelief.DeepBeliefTrainer(net1, dataset=ds)
trainer.trainEpochs(epochs)
Run Code Online (Sandbox Code Playgroud)
我看到这个错误:
File "/home/WORK/Canopy_64bit/User/lib/python2.7/site-packages/PyBrain-0.3.1-py2.7.egg/pybrain/structure/connections/connection.py", …Run Code Online (Sandbox Code Playgroud) 所以,PyBrain看起来肯定有很多很棒的工具和功能可供使用.可悲的是,它的文档/'教程'是....非常........ weaK?并且很难确定如何做自己想做的事情.
是否有更好的资源来学习PyBrain的API?或者只是试错学习?
先感谢您....
我测试了pybrain以下的基本分类教程这里和不同的看法上也有一些更现实的数据在这里.但是在应用带有错误的trndata._convertToOneOfMany()时收到此错误:
AttributeError: 'SupervisedDataSet' object has no attribute '_convertToOneOfMany
Run Code Online (Sandbox Code Playgroud)
数据集是作为classification.ClassificationDataSet对象创建的,但是调用splitWithProportion似乎改变了它的supervised.SupervisedDataSet对象,所以对于Python来说这个错误似乎并不像supervised.SupervisedDataSet没有那个方法那样令人惊讶, classification.ClassificationDataSet呢.代码在这里.
然而,在这么多教程中使用相同的确切代码我觉得我必须遗漏一些东西,因为很多其他人都有它的工作.我已经看过github上代码库的变化,这个函数没有什么,我也试过在Python 3和2.7下运行,但没有区别.如果有人有任何指示让我回到正确的道路上,那将非常感激.
#flatten the 64x64 data in to one dimensional 4096
ds = ClassificationDataSet(4096, 1 , nb_classes=40)
for k in xrange(len(X)): #length of X is 400
ds.addSample(np.ravel(X[k]),y[k])
# a new sample consisting of input and target
print(type(ds))
tstdata, trndata = ds.splitWithProportion( 0.25 )
print(type(trndata))
trndata._convertToOneOfMany()
tstdata._convertToOneOfMany()
Run Code Online (Sandbox Code Playgroud)