我正在尝试使用PyBrain开发神经网络,具有以下规范:
1。)3层总数
2.)36个输入神经元
3.输入神经元是线性的
4。)隐藏层是sigmoid
5.)输出层是线性的
6。)使用num_hidden_layer
设置隐藏神经元的数量7.。)输出数量由num_output
控制代码是:
import pybrain
import csv
from pybrain.datasets.supervised import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
import sys
with open(sys.argv[1], 'r') as csvfile:
reader = csv.reader(csvfile)
header = reader.next()
dataset = SupervisedDataSet(len(header[:-1]), 1)
test = []
count = 1
for line in reader:
temp = []
for e in line:
temp.append(e.replace(',', ''))
dataset.addSample(temp[:-1], temp[-1])
tstdata, trndata = dataset.splitWithProportion(0.25)
n = pybrain.FeedForwardNetwork()
num_inputs = len(header[:-1])
num_hidden_layer = 5
num_output = 1
inLayer = pybrain.LinearLayer(num_inputs)
hiddenLayer = pybrain.SigmoidLayer(num_hidden_layer)
outLayer = pybrain.LinearLayer(num_output)
n.addInputModule(inLayer)
n.addModule(hiddenLayer)
n.addOutputModule(outLayer)
in_to_hidden = pybrain.FullConnection(inLayer, hiddenLayer)
hidden_to_out = pybrain.FullConnection(hiddenLayer, outLayer)
n.addConnection(in_to_hidden)
n.addConnection(hidden_to_out)
n.sortModules()
trainer = BackpropTrainer(n, dataset=trndata, momentum = 0.1, verbose=True, weightdecay=0.01, learningrate=0.3)
for x in range(150):
trainer.trainEpochs(10)
print n.activateOnDataset(tstdata)
我们的输入CSV有37列数值数据,最后一列是我们要训练NN预测的列。
当我们运行我们的NN时,输出只是:[[ - 9.43679663] [-9.43678922] [-9.43679759] [-9.43679592] [-9.43679396] [-9.43679395] [-9.43679737]。这是我们所期望的正确的球场数字(-8到-10),但没有变化。如果我们只读取数据的1/2,我们得到完全相同的输出。这是我们输入数据的错误(例如错误的分布或值范围)?或者这是我们的NN的问题?