2013-08-02 43 views
5

Tôi đã làm việc để tạo một mạng nơron bằng pybrain, và sau khi đào tạo nó với tuyên truyền vì một lý do nào đó nó không đào tạo mạng của tôi. Bất kỳ tập dữ liệu nào tôi sử dụng với nhiều hơn hai lớp trong thứ nguyên ngoài sẽ chỉ chồng tất cả các quan sát của tôi vào một danh mục. Có ai biết tại sao điều này xảy ra? Mã và một số đầu ra là dưới đây.Mạng thần kinh Pybrain không huấn luyện chính xác

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) 

Các kỷ nguyên cuối cùng của đào tạo có .09 lỗi, như thể hiện trong kết quả dưới đây:

Training Epoch #19 
Total error: 0.0968444196605 

Tuy nhiên khi tôi đi đến in ma trận nhầm lẫn, chính xác, và thu hồi, tôi nhận được sau cũng như lỗi lạ này:

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]] 

Trả lời

1

tôi có vấn đề rất giống nhau, và tôi thấy SoftmaxLayer là nguyên nhân. Hãy thử thay thế bằng thứ khác, ví dụ: SigmoidLayer. Nếu đó là một vấn đề trong trường hợp của bạn cũng có một cơ hội tốt mà lớp này là bugy.

Các vấn đề liên quan