5
我一直在努力創建一個使用pybrain的神經網絡,並且由於某種原因對它進行傳播訓練後,它無法訓練我的網絡。任何我在超出維度中使用超過兩個類的數據集,都會將我的所有觀察數據放到一個類別中。有誰知道爲什麼會發生這種情況?代碼和一些輸出如下。Pybrain神經網絡未能正確訓練
import scipy
import numpy
from pybrain.datasets import ClassificationDataSet
from pybrain.utilities import percentError
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.structure.modules import SoftmaxLayer
from sklearn.metrics import precision_score,recall_score,confusion_matrix
def makeDataset(CSVfile,ClassFile):
#import the features to data, and their classes to dataClasses
data=numpy.genfromtxt(CSVfile,delimiter=",")
classes=numpy.genfromtxt(ClassFile,delimiter=",")
print("Building the dataset from CSV files")
#Initialize an empty Pybrain dataset, and populate it
alldata=ClassificationDataSet(len(data[0]),1,nb_classes=3)
for count in range(len((classes))):
alldata.addSample(data[count],[classes[count]])
return alldata
def makeNeuralNet(alldata,trainingPercent=.3,hiddenNeurons=5,trainingIterations=20):
#Divide the data set into training and non-training data
testData, trainData = alldata.splitWithProportion(trainingPercent)
testData._convertToOneOfMany()
trainData._convertToOneOfMany()
#Then build the network, and using backwards propogation to train it
network = buildNetwork(trainData.indim, hiddenNeurons, trainData.outdim, outclass=SoftmaxLayer)
trainer = BackpropTrainer(network, dataset=trainData, momentum=0.1, verbose=True, weightdecay=0.01)
for i in range(trainingIterations):
print("Training Epoch #"+str(i))
trainer.trainEpochs(1)
return [network,trainer]
def checkNeuralNet(trainer,alldata):
predictedVals=trainer.testOnClassData(alldata)
actualVals=list(alldata['target'])
## for row in alldata['target']:
## row=list(row)
## index=row.index(1)
## actualVals+=[index]
print("-----------------------------")
print("-----------------------------")
print("The precision is "+str(precision_score(actualVals,predictedVals)))
print("The recall is "+str(recall_score(actualVals,predictedVals)))
print("The confusion matrix is as shown below:")
print(confusion_matrix(actualVals,predictedVals))
CSVfile="/home/ubuntu/test.csv"
ClassFile="/home/ubuntu/test_Classes.csv"
#Build our dataset
alldata=makeDataset(CSVfile,ClassFile)
#Build and train the network
net=makeNeuralNet(alldata,trainingPercent=.7,hiddenNeurons=20,trainingIterations=20)
network=net[0]
trainer=net[1]
#Check it's strength
checkNeuralNet(trainer,alldata)
培訓的最後時期具有0.09的錯誤,如在下面的輸出:
Training Epoch #19
Total error: 0.0968444196605
然而,當我去打印混淆矩陣,精確度和回憶,我得到的下面還有這個奇怪的錯誤:
UserWarning: The sum of true positives and false positives are equal to zero for some labels. Precision is ill defined for those labels [1 2]. The precision and recall are equal to zero for some labels. fbeta_score is ill defined for those labels [1 2].
average=average)
The precision is 0.316635552252
UserWarning: The sum of true positives and false positives are equal to zero for some labels. Precision is ill defined for those labels [1 2]. The precision and recall are equal to zero for some labels. fbeta_score is ill defined for those labels [1 2].
average=average)
The recall is 0.562703787309
The confusion matrix is as shown below:
[[4487 0 0]
[ 987 0 0]
[2500 0 0]]