我正在尝试使用PyBrain进行一些简单的NN训练.我不知道该怎么做是从文件加载训练数据.任何地方都没有在他们的网站上解释过.我不关心格式,因为我现在可以构建它,但我需要在文件中执行它,而不是手动逐行添加,因为我将有几百行.
我试图基于给定的事实重建一个神经网络.它有3个输入,一个隐藏层和一个输出.我的问题是权重也给出了,所以我不需要训练.
我想也许我可以保存类似的结构神经网络的训练并相应地改变值.你认为这会有效吗?还有其他的想法.谢谢.
神经网络代码:
net = FeedForwardNetwork()
inp = LinearLayer(3)
h1 = SigmoidLayer(1)
outp = LinearLayer(1)
# add modules
net.addOutputModule(outp)
net.addInputModule(inp)
net.addModule(h1)
# create connections
net.addConnection(FullConnection(inp, h1))
net.addConnection(FullConnection(h1, outp))
# finish up
net.sortModules()
trainer = BackpropTrainer(net, ds)
trainer.trainUntilConvergence()
Run Code Online (Sandbox Code Playgroud)
保存培训并加载代码如何保存和恢复PyBrain培训?
# Using NetworkWriter
from pybrain.tools.shortcuts import buildNetwork
from pybrain.tools.xml.networkwriter import NetworkWriter
from pybrain.tools.xml.networkreader import NetworkReader
net = buildNetwork(2,4,1)
NetworkWriter.writeToFile(net, 'filename.xml')
net = NetworkReader.readFrom('filename.xml')
Run Code Online (Sandbox Code Playgroud) 我正在预测一个值,我有2个输入层和一个输出层.这是我的代码,我在其中训练了一个PyBrain网络,然后对其进行了测试,我不知道应该如何给网络提供一组输入,以及如何获得结果.请帮我继续前进.
ds = SupervisedDataSet(2,1)
tf = open('data.csv','r')
for line in tf.readlines():
data = [float(x) for x in line.strip().split(',') if x != '']
indata = tuple(data[:2])
outdata = tuple(data[2:])
ds.addSample(indata,outdata)
n = buildNetwork(ds.indim,8,8,ds.outdim,recurrent=True)
t = BackpropTrainer(n,learningrate=0.01,momentum=0.5,verbose=True)
t.trainOnDataset(ds,1000)
t.testOnData(verbose=True)
Run Code Online (Sandbox Code Playgroud)
接下来我应该做什么来提供输入并预测输入,如何获得该组输入的结果.谢谢!!
我试图使用5年的连续历史数据来预测下一年的价值.
我的输入数据input_04_08如下所示,其中第一列是一年中的某一天(1到365),第二列是记录的输入.
1,2
2,2
3,0
4,0
5,0
Run Code Online (Sandbox Code Playgroud)
我的输出数据output_04_08看起来像这样,是一列,在一年的那一天记录了输出.
27.6
28.9
0
0
0
Run Code Online (Sandbox Code Playgroud)
然后我将0到1之间的值标准化,以便给网络的第一个样本看起来像
Number of training patterns: 1825
Input and output dimensions: 2 1
First sample (input, target):
[ 0.00273973 0.04 ] [ 0.02185273]
Run Code Online (Sandbox Code Playgroud)
我在PyBrain中实现了以下代码
input_04_08 = numpy.loadtxt('./data/input_04_08.csv', delimiter=',')
input_09 = numpy.loadtxt('./data/input_09.csv', delimiter=',')
output_04_08 = numpy.loadtxt('./data/output_04_08.csv', delimiter=',')
output_09 = numpy.loadtxt('./data/output_09.csv', delimiter=',')
input_04_08 = input_04_08 / input_04_08.max(axis=0)
input_09 = input_09 / input_09.max(axis=0)
output_04_08 = output_04_08 / output_04_08.max(axis=0)
output_09 = output_09 / output_09.max(axis=0) …Run Code Online (Sandbox Code Playgroud) 我遵循PyBrain教程分类与前馈神经网络,并希望建立自己的分类器.
我不明白如何_convertToOneOfMany修改输出.
为什么初始操作会alldata.addSample(input, [klass])为每个类创建多个输出神经元?
我觉得这应该是微不足道的,但我很难在PyBrain文档中找到任何有用的东西,在这里或其他地方.
问题是这样的:
我有一个在PyBrain中构建和训练的三层(输入,隐藏,输出)前馈网络.每层有三个节点.我想用新颖的输入激活网络,并将结果的激活值存储在隐藏层.据我所知,net.activate()和net.activateOnDataset()只返回输出层节点的激活值,是激活网络的唯一方法.
如何获得PyBrain网络的隐藏层激活?
我不确定示例代码在这种情况下会有多大帮助,但无论如何这里有一些(使用减少的训练集):
from pybrain.tools.shortcuts import buildNetwork
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
net = buildNetwork(3, 3, 3)
dataSet = SupervisedDataSet(3, 3)
dataSet.addSample((0, 0, 0), (0, 0, 0))
dataSet.addSample((1, 1, 1), (0, 0, 0))
dataSet.addSample((1, 0, 0), (1, 0, 0))
dataSet.addSample((0, 1, 0), (0, 1, 0))
dataSet.addSample((0, 0, 1), (0, 0, 1))
trainer = BackpropTrainer(net, dataSet)
trained = False
acceptableError = 0.001
# train until acceptable error reached
while trained == False :
error = trainer.train() …Run Code Online (Sandbox Code Playgroud) 我正在利用pybrain构建一个具有6个输入维度和一个实值输出维度的网络.我使用的代码如下所示:
network = buildNetwork(train.indim, 4, train.outdim)
trainer = BackpropTrainer( network, train)
trainer.trainOnDataset(train, 8000)
print 'MSE train', trainer.testOnData(train, verbose = True)
Run Code Online (Sandbox Code Playgroud)
这里的火车是Dataset的类型我想把在trainer.testOnData()中做出的预测作为一个numpy数组.我能够查看预测结果以及错误,但我希望它作为一个数组.无论如何,这可以做到吗?
这是我的问题:
在我设法安装anaconda(有python 3.4)之后,我显然设法安装了pybrain.但是,当我使用来自anaconda或终端的'import pybrain'时,我也会收到此错误:
>>> import pybrain
Traceback (most recent call last):
File "<ipython-input-2-0fb7233d2a8c>", line 1, in <module>
import pybrain
File "//anaconda/lib/python3.4/site-packages/PyBrain-0.3-py3.4.egg/pybrain/__init__.py", line 1, in <module>
from structure.__init__ import *
ImportError: No module named 'structure'
Run Code Online (Sandbox Code Playgroud) 有没有一种很好的方法可以在完全连接的PyBrain网络中添加/删除神经元及其相关连接?说我开始:
from pybrain.tools.shortcuts import buildNetwork
net = buildNetwork(2,3,1)
Run Code Online (Sandbox Code Playgroud)
我怎样才能使它成为(2,4,1)或(2,2,1)网络,同时保持所有旧权重(并在初始化网络时初始化任何新权重是随机的)?我想这样做的原因是因为我试图使用进化学习策略来确定最佳架构,而"突变"步骤则涉及以某种可能性添加/删除节点.(输入和输出模块应始终保持不变.)
编辑:我发现NeuronDecomposableNetwork应该让这更容易,但似乎我必须分别跟踪神经元和连接.
基于PyBrain的教程,我设法将以下代码拼凑在一起:
#!/usr/bin/env python2
# coding: utf-8
from pybrain.structure import FeedForwardNetwork, LinearLayer, SigmoidLayer, FullConnection
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
n = FeedForwardNetwork()
inLayer = LinearLayer(2)
hiddenLayer = SigmoidLayer(3)
outLayer = LinearLayer(1)
n.addInputModule(inLayer)
n.addModule(hiddenLayer)
n.addOutputModule(outLayer)
in_to_hidden = FullConnection(inLayer, hiddenLayer)
hidden_to_out = FullConnection(hiddenLayer, outLayer)
n.addConnection(in_to_hidden)
n.addConnection(hidden_to_out)
n.sortModules()
ds = SupervisedDataSet(2, 1)
ds.addSample((0, 0), (0,))
ds.addSample((0, 1), (1,))
ds.addSample((1, 0), (1,))
ds.addSample((1, 1), (0,))
trainer = BackpropTrainer(n, ds)
# trainer.train()
trainer.trainUntilConvergence()
print n.activate([0, 0])[0]
print n.activate([0, 1])[0]
print n.activate([1, …Run Code Online (Sandbox Code Playgroud)