print("\nImporting training data...") from pybrain.datasets import ClassificationDataSet #bring in data from training file traindata = ClassificationDataSet(16,1,10) f = open("zipcode.tra") #this file has 3 lines of 5 values, then 1 line of 1 value and the class i = 0 sample = [] target = [] for line in f.readlines(): if i == 0: #reset lists sample = [] target = [] if i < 3: sample.extend(list(map(float, line.split()))[0:5]) if i == 3: sample.extend(list(map(float, line.split()))[0:1]) target.append(int(list(map(float, line.split()))[1])-1) traindata.appendLinked(sample[0:16],target) i = 0 else: i += 1 #using classification data set this time (subtracting 1 so first class is 0) #traindata.appendLinked(list(map(float, line.split()))[0:16],int(list(map(float, line.split()))[16])-1) print("Training rows: %d " % len(traindata) ) print("Input dimensions: %d, output dimensions: %d" % ( traindata.indim, traindata.outdim)) #convert to have 1 in column per class traindata._convertToOneOfMany() #raw_input("Press Enter to view training data...") #print(traindata) print("\nFirst sample: ", traindata['input'][0], traindata['target'][0], traindata['class'][0]) print("\nCreating Neural Network:") #create the network from pybrain.tools.shortcuts import buildNetwork from pybrain.structure.modules import SoftmaxLayer #change the number below for neurons in hidden layer hiddenneurons = 13 net = buildNetwork(traindata.indim,hiddenneurons,traindata.outdim, outclass=SoftmaxLayer) print('Network Structure:') print('\nInput: ', net['in']) #can't figure out how to get hidden neuron count, so making it a variable to print print('Hidden layer 1: ', net['hidden0'], ", Neurons: ", hiddenneurons ) print('Output: ', net['out']) #raw_input("Press Enter to train network...") #train neural network print("\nTraining the neural network...") from pybrain.supervised.trainers import BackpropTrainer trainer = BackpropTrainer(net,traindata) trainer.trainUntilConvergence(dataset = traindata, maxEpochs=100, continueEpochs=10, verbose=True) #for i in range(20): # print("Training Epoch: %d" % trainer.totalepochs) # print(trainer.testOnData()) # trainer.trainEpochs(1) print("\n") for mod in net.modules: for conn in net.connections[mod]: print conn for cc in range(len(conn.params)): print conn.whichBuffers(cc), conn.params[cc] print("\nTraining Epochs: %d" % trainer.totalepochs) from pybrain.utilities import percentError trnresult = percentError( trainer.testOnClassData(dataset = traindata), traindata['class'] ) print(" train error: %5.2f%%" % trnresult) #result for each class [should probably create an array for this!] #note, "junk" file is to contain "everything but class xx" part of output from splitting by class trn00, junk = traindata.splitByClass(0) trn01, junk = traindata.splitByClass(1) trn02, junk = traindata.splitByClass(2) trn03, junk = traindata.splitByClass(3) trn04, junk = traindata.splitByClass(4) trn05, junk = traindata.splitByClass(5) trn06, junk = traindata.splitByClass(6) trn07, junk = traindata.splitByClass(7) trn08, junk = traindata.splitByClass(8) trn09, junk = traindata.splitByClass(9) trn00result = percentError( trainer.testOnClassData(dataset = trn00), trn00['class']) trn01result = percentError( trainer.testOnClassData(dataset = trn01), trn01['class']) trn02result = percentError( trainer.testOnClassData(dataset = trn02), trn02['class']) trn03result = percentError( trainer.testOnClassData(dataset = trn03), trn03['class']) trn04result = percentError( trainer.testOnClassData(dataset = trn04), trn04['class']) trn05result = percentError( trainer.testOnClassData(dataset = trn05), trn05['class']) trn06result = percentError( trainer.testOnClassData(dataset = trn06), trn06['class']) trn07result = percentError( trainer.testOnClassData(dataset = trn07), trn07['class']) trn08result = percentError( trainer.testOnClassData(dataset = trn08), trn08['class']) trn09result = percentError( trainer.testOnClassData(dataset = trn09), trn09['class']) print(" train class 1 samples: %d, error: %5.2f%%" % (len(trn00),trn00result)) print(" train class 2 samples: %d, error: %5.2f%%" % (len(trn01),trn01result)) print(" train class 3 samples: %d, error: %5.2f%%" % (len(trn02),trn02result)) print(" train class 4 samples: %d, error: %5.2f%%" % (len(trn03),trn03result)) print(" train class 5 samples: %d, error: %5.2f%%" % (len(trn04),trn04result)) print(" train class 6 samples: %d, error: %5.2f%%" % (len(trn05),trn05result)) print(" train class 7 samples: %d, error: %5.2f%%" % (len(trn06),trn06result)) print(" train class 8 samples: %d, error: %5.2f%%" % (len(trn07),trn07result)) print(" train class 9 samples: %d, error: %5.2f%%" % (len(trn08),trn08result)) print(" train class 10 samples: %d, error: %5.2f%%" % (len(trn09),trn09result)) raw_input("\nPress Enter to start testing...") print("\nImporting testing data...") #bring in data from testing file testdata = ClassificationDataSet(16,1,10) f = open("zipcode.tst") i = 0 sample = [] target = [] for line in f.readlines(): if i == 0: #reset lists sample = [] target = [] if i < 3: sample.extend(list(map(float, line.split()))[0:5]) if i == 3: sample.extend(list(map(float, line.split()))[0:1]) target.append(int(list(map(float, line.split()))[1])-1) testdata.appendLinked(sample[0:16],target) i = 0 else: i += 1 print("Test rows: %d " % len(testdata) ) print("Input dimensions: %d, output dimensions: %d" % ( testdata.indim, testdata.outdim)) #convert to have 1 in column per class testdata._convertToOneOfMany() #raw_input("Press Enter to view training data...") #print(traindata) print("\nFirst sample: ", testdata['input'][0], testdata['target'][0], testdata['class'][0]) print("\nTesting...") tstresult = percentError( trainer.testOnClassData(dataset = testdata), testdata['class'] ) print(" test error: %5.2f%%" % tstresult) #result for each class [should probably create an array for this!] #note, "junk" file is to contain "everything but class xx" part of output from splitting by class tst00, junk = testdata.splitByClass(0) tst01, junk = testdata.splitByClass(1) tst02, junk = testdata.splitByClass(2) tst03, junk = testdata.splitByClass(3) tst04, junk = testdata.splitByClass(4) tst05, junk = testdata.splitByClass(5) tst06, junk = testdata.splitByClass(6) tst07, junk = testdata.splitByClass(7) tst08, junk = testdata.splitByClass(8) tst09, junk = testdata.splitByClass(9) tst00result = percentError( trainer.testOnClassData(dataset = tst00), tst00['class']) tst01result = percentError( trainer.testOnClassData(dataset = tst01), tst01['class']) tst02result = percentError( trainer.testOnClassData(dataset = tst02), tst02['class']) tst03result = percentError( trainer.testOnClassData(dataset = tst03), tst03['class']) tst04result = percentError( trainer.testOnClassData(dataset = tst04), tst04['class']) tst05result = percentError( trainer.testOnClassData(dataset = tst05), tst05['class']) tst06result = percentError( trainer.testOnClassData(dataset = tst06), tst06['class']) tst07result = percentError( trainer.testOnClassData(dataset = tst07), tst07['class']) tst08result = percentError( trainer.testOnClassData(dataset = tst08), tst08['class']) tst09result = percentError( trainer.testOnClassData(dataset = tst09), tst09['class']) print(" test class 1 samples: %d, error: %5.2f%%" % (len(tst00),tst00result)) print(" test class 2 samples: %d, error: %5.2f%%" % (len(tst01),tst01result)) print(" test class 3 samples: %d, error: %5.2f%%" % (len(tst02),tst02result)) print(" test class 4 samples: %d, error: %5.2f%%" % (len(tst03),tst03result)) print(" test class 5 samples: %d, error: %5.2f%%" % (len(tst04),tst04result)) print(" test class 6 samples: %d, error: %5.2f%%" % (len(tst05),tst05result)) print(" test class 7 samples: %d, error: %5.2f%%" % (len(tst06),tst06result)) print(" test class 8 samples: %d, error: %5.2f%%" % (len(tst07),tst07result)) print(" test class 9 samples: %d, error: %5.2f%%" % (len(tst08),tst08result)) print(" test class 10 samples: %d, error: %5.2f%%" % (len(tst09),tst09result))