Example #1
0
def neutral_net(train_data,test_data,n_est,maxd):
    
    #ds = SupervisedDataSet(len(train_data[0,:])-1,1)
    ds = ClassificationDataSet(len(train_data[0,:])-1,1,nb_classes=2,class_labels=['Lived','Died'])
    X=[];y=[]; X1=[]; y1=[]
    for row in range(0,len(train_data[:,0])):
        X.append(train_data[row,1:].astype(int))
        y.append([train_data[row,0].astype(int)])
        #ds.addSample(train_data[row,1:].astype(int),train_data[row,0].astype(int))
    #for row in range(0,len(test_data[:,0])):
    #    X.append(test_data[row,1:].astype(int))
    #    y.append([test_data[row,0].astype(int)])

    X=np.array(X); y=np.array(y)
    ds.setField('input',X)
    ds.setField('target',y)

    ds._convertToOneOfMany(bounds=[0,1])  # only for classification

    #net = buildNetwork(len(train_data[0,:])-1,100, 1)
    read = False
    if read:
        #net = NetworkReader.readFrom('10_200.xml')  # hiddenclass=SigmoidLayer
		pass
    else:
        net = buildNetwork(ds.indim,maxd,ds.outdim,bias=True,hiddenclass=SigmoidLayer,outclass=SoftmaxLayer)#SoftmaxLayer)        
        trainer = BackpropTrainer(net,dataset=ds,verbose=False,learningrate=0.01,momentum=0.1,weightdecay=0.01)
        trainer.trainUntilConvergence(maxEpochs=n_est,continueEpochs=10,validationProportion=0.3)
        #NetworkWriter.writeToFile(net, '10_200.xml')

    tot = 0.
    for a,b in zip(X,y):
        val = net.activate(a)
        tot+=int((val[0] > val[1] and b==0) or (val[0]<val[1] and b==1))
        '''num = int((net.activate(a)<0.5 and b<0.5) or (net.activate(a)>0.5 and b>0.5))
        tot+=num'''
        
    for row in range(0,len(test_data[:,0])):
        X1.append(test_data[row,1:].astype(int))
        y1.append([test_data[row,0].astype(int)])
    X1=np.array(X1); y1=np.array(y1)
    
    tot1 = 0.
    output = []
    for a,b in zip(X1,y1):
        val = net.activate(a)
        tot1+=int((val[0] > val[1] and b==0) or (val[0]<val[1] and b==1))
        output.append(int(val[0]<val[1]))
        '''num = int((net.activate(a)<0.5 and b<0.5) or (net.activate(a)>0.5 and b>0.5))
        tot1+=num
        output.append(int(net.activate(a)>0.5))'''

    pr.print_results(output)
    
        
    return [tot/len(y),tot1/len(y1)]
    def initializeNetwork(self):        
        self.net = buildNetwork(26, 15, 5, hiddenclass=TanhLayer, outclass=SoftmaxLayer) # 15 is just a mean
        ds = ClassificationDataSet(26, nb_classes=5)
        
        for x in self.train:
            ds.addSample(x.frequency, self.encodingDict[x.lang])
        ds._convertToOneOfMany()

        trainer = BackpropTrainer(self.net, dataset=ds, weightdecay=0.01, momentum=0.1, verbose=True)
        trainer.trainUntilConvergence(maxEpochs=100)
Example #3
0
def main():
    print "Calculating mfcc...."
    mfcc_coeff_vectors_dict = {}
    for i in range(1, 201):
        extractor = FeatureExtractor(
            '/home/venkatesh/Venki/FINAL_SEM/Project/Datasets/Happiness/HappinessAudios/' + str(i) + '.wav')
        mfcc_coeff_vectors = extractor.calculate_mfcc()
        mfcc_coeff_vectors_dict.update({str(i): (mfcc_coeff_vectors, mfcc_coeff_vectors.shape[0])})

    for i in range(201, 401):
        extractor = FeatureExtractor(
            '/home/venkatesh/Venki/FINAL_SEM/Project/Datasets/Sadness/SadnessAudios/' + str(i - 200) + '.wav')
        mfcc_coeff_vectors = extractor.calculate_mfcc()
        mfcc_coeff_vectors_dict.update({str(i): (mfcc_coeff_vectors, mfcc_coeff_vectors.shape[0])})

    audio_with_min_frames, min_frames = get_min_frames_audio(
        mfcc_coeff_vectors_dict)
    processed_mfcc_coeff = preprocess_input_vectors(
        mfcc_coeff_vectors_dict, min_frames)
    # frames = min_frames
    # print frames
    # print len(processed_mfcc_coeff['1'])
    # for each_vector in processed_mfcc_coeff['1']:
    #     print len(each_vector)
    print "mffcc found..."
    classes = ["happiness", "sadness"]

    training_data = ClassificationDataSet(
        26, target=1, nb_classes=2, class_labels=classes)
    # training_data = SupervisedDataSet(13, 1)
    try:
        network = NetworkReader.readFrom(
            'network_state_frame_level_new2_no_pp1.xml')
    except:
        for i in range(1, 51):
            mfcc_coeff_vectors = processed_mfcc_coeff[str(i)]
            for each_vector in mfcc_coeff_vectors:
                training_data.appendLinked(each_vector, [1])

        for i in range(201, 251):
            mfcc_coeff_vectors = processed_mfcc_coeff[str(i)]
            for each_vector in mfcc_coeff_vectors:
                training_data.appendLinked(each_vector, [0])

        training_data._convertToOneOfMany()
        print "prepared training data.."
        print training_data.indim, training_data.outdim
        network = buildNetwork(
            training_data.indim, 5, training_data.outdim, fast=True)
        trainer = BackpropTrainer(network, learningrate=0.01, momentum=0.99)
        print "Before training...", trainer.testOnData(training_data)
        trainer.trainOnDataset(training_data, 1000)
        print "After training...", trainer.testOnData(training_data)
        NetworkWriter.writeToFile(
            network, "network_state_frame_level_new2_no_pp.xml")
 def predict(self, x_test):
     DS = ClassificationDataSet(x_test.shape[1], nb_classes=self.__class_num)
     DS.setField('input', x_test)
     DS.setField('target', np.zeros((x_test.shape[0], 1)))
     DS._convertToOneOfMany()
     out = self.__pybrain_bpnn.activateOnDataset(DS)
     # this part converts an activation vector to a class number
     # i'm saving this for a future purpose
     #out = out.argmax(axis=1)  # the highest output activation gives the class
     #if not self.__class_zero_indexing:  # indexing from 1 - add one to result
     #    out += 1
     return out
def main():
    print "Calculating mfcc...."
    mfcc_coeff_vectors_dict = {}
    for i in range(1, 201):
        extractor = FeatureExtractor('/home/venkatesh/Venki/FINAL_SEM/Project/Datasets/Happiness/HappinessAudios/' + str(i) + '.wav')
        mfcc_coeff_vectors = extractor.calculate_mfcc()
        mfcc_coeff_vectors_dict.update({str(i): (mfcc_coeff_vectors, mfcc_coeff_vectors.shape[0])})

    for i in range(201, 401):
        extractor = FeatureExtractor('/home/venkatesh/Venki/FINAL_SEM/Project/Datasets/Sadness/SadnessAudios/' + str(i - 200) + '.wav')
        mfcc_coeff_vectors = extractor.calculate_mfcc()
        mfcc_coeff_vectors_dict.update({str(i): (mfcc_coeff_vectors, mfcc_coeff_vectors.shape[0])})

    audio_with_min_frames, min_frames = get_min_frames_audio(mfcc_coeff_vectors_dict)
    processed_mfcc_coeff = preprocess_input_vectors(mfcc_coeff_vectors_dict, min_frames)
    frames = min_frames
    print "mfcc found...."
    classes = ["happiness", "sadness"]
    try:
        network = NetworkReader.readFrom('network_state_new_.xml')
    except:
        # Create new network and start Training
        training_data = ClassificationDataSet(frames * 26, target=1, nb_classes=2, class_labels=classes)
        # training_data = SupervisedDataSet(frames * 39, 1)
        for i in range(1, 151):
            mfcc_coeff_vectors = processed_mfcc_coeff[str(i)]
            training_data.appendLinked(mfcc_coeff_vectors.ravel(), [1])
            # training_data.addSample(mfcc_coeff_vectors.ravel(), [1])

        for i in range(201, 351):
            mfcc_coeff_vectors = processed_mfcc_coeff[str(i)]
            training_data.appendLinked(mfcc_coeff_vectors.ravel(), [0])
            # training_data.addSample(mfcc_coeff_vectors.ravel(), [0])

        training_data._convertToOneOfMany()
        network = buildNetwork(training_data.indim, 5, training_data.outdim)
        trainer = BackpropTrainer(network, learningrate=0.01, momentum=0.99)
        print "Before training...", trainer.testOnData(training_data)
        trainer.trainOnDataset(training_data, 1000)
        print "After training...", trainer.testOnData(training_data)
        NetworkWriter.writeToFile(network, "network_state_new_.xml")

    print "*" * 30 , "Happiness Detection", "*" * 30
    for i in range(151, 201):
        output = network.activate(processed_mfcc_coeff[str(i)].ravel())
        # print output,
        # if output > 0.7:
        #     print "happiness"
        class_index = max(xrange(len(output)), key=output.__getitem__)
        class_name = classes[class_index]
        print class_name
    def testNetwork(self):
        correctAnswers = []
        for testItem in self.test:
            correctAnswers.append(self.encodingDict[testItem.lang])
        
        ds_test = ClassificationDataSet(26, nb_classes=5)
        for x in self.test:
            ds_test.addSample(x.frequency, self.encodingDict[x.lang])
        ds_test._convertToOneOfMany()

        sumCorrect = sum(self.net.activateOnDataset(ds_test).argmax(axis=1) == correctAnswers)
        
        print "\nNeural network: " + str(sumCorrect*100/float(len(self.test))) + "% efficiency"
        
        
    def train(self, x, y, class_number=-1):
        self.__class_num = max(np.unique(y).size, class_number)
        if max(y) == self.__class_num:
            self.__class_zero_indexing = False
            y = np.array([i - 1 for i in y])

        DS = ClassificationDataSet(x.shape[1], nb_classes=self.__class_num)
        DS.setField('input', x)
        DS.setField('target', y.reshape(y.size, 1))
        DS._convertToOneOfMany()

        hidden_num = (DS.indim + DS.outdim) / 2

        self.__pybrain_bpnn = buildNetwork(DS.indim, hidden_num, DS.outdim, bias=True, hiddenclass=SigmoidLayer, outclass=SoftmaxLayer)

        trainer = BackpropTrainer(self.__pybrain_bpnn, dataset=DS, learningrate=0.07, lrdecay=1.0, momentum=0.6)

        trainer.trainUntilConvergence(DS, maxEpochs=30)
Example #8
0
    def train(network_file, input_length, output_length, training_data_file,
              learning_rate, momentum, stop_on_convergence, epochs, classify):
        n = get_network(network_file)
        if classify:
            ds = ClassificationDataSet(int(input_length),
                                       int(output_length) * 2)
            ds._convertToOneOfMany()
        else:
            ds = SupervisedDataSet(int(input_length), int(output_length))
        training_data = get_training_data(training_data_file)

        NetworkManager.last_training_set_length = 0
        for line in training_data:
            data = [float(x) for x in line.strip().split(',') if x != '']
            input_data = tuple(data[:(int(input_length))])
            output_data = tuple(data[(int(input_length)):])
            ds.addSample(input_data, output_data)
            NetworkManager.last_training_set_length += 1

        t = BackpropTrainer(n,
                            learningrate=learning_rate,
                            momentum=momentum,
                            verbose=True)
        print "training network " + network_storage_path + network_file

        if stop_on_convergence:
            t.trainUntilConvergence(ds, epochs)
        else:
            if classify:
                t.trainOnDataset(ds['class'], epochs)
            else:
                t.trainOnDataset(ds, epochs)

        error = t.testOnData()
        print "training done"
        if not math.isnan(error):
            save_network(n, network_file)
        else:
            print "error occured, network not saved"

        print "network saved"

        return error
def mlp():
    mlp = buildNetwork(26, 500, 3456, bias=True, outclass=SoftmaxLayer)
    #print net['in'], net['hidden0'],  net['out']
    ds = import_data()
    #http://stackoverflow.com/questions/27887936/attributeerror-using-pybrain-splitwithportion-object-type-changed
    tstdata_temp, trndata_temp = ds.splitWithProportion(0.25)

    tstdata = ClassificationDataSet(26, 1, nb_classes=3456)
    for n in xrange(0, tstdata_temp.getLength()):
        tstdata.addSample(tstdata_temp.getSample(n)[0], tstdata_temp.getSample(n)[1])

    trndata = ClassificationDataSet(26, 1, nb_classes=3456)
    for n in xrange(0, trndata_temp.getLength()):
        trndata.addSample(trndata_temp.getSample(n)[0], trndata_temp.getSample(n)[1])

    trndata._convertToOneOfMany()
    tstdata._convertToOneOfMany()

    print type(trndata['class'])


    print "Number of training patterns: ", len(trndata)
    print "Input and output dimensions: ", trndata.indim, trndata.outdim
    print "First sample (input, target, class):"
    print trndata['input'][0], trndata['target'][0], trndata['class'][0]


    trainer = BackpropTrainer(mlp, trndata, verbose = True, learningrate=0.01)
    trainer.trainUntilConvergence(maxEpochs=1000)

    trnresult = percentError( trainer.testOnClassData(),
                              trndata['class'] )
    tstresult = percentError( trainer.testOnClassData(
           dataset=tstdata ), tstdata['class'] )

    print "epoch: %4d" % trainer.totalepochs, \
          "  train error: %5.2f%%" % trnresult, \
          "  test error: %5.2f%%" % tstresult
Example #10
0
test_data = ClassificationDataSet(4, 1, nb_classes=3)
for n in range(test_data_temp.getLength()):
    train_data.addSample(
        test_data_temp.getSample(n)[0],
        test_data_temp.getSample(n)[1])

val_data = ClassificationDataSet(4, 1, nb_classes=3)
for n in range(val_data_temp.getLength()):
    val_data.addSample(
        val_data_temp.getSample(n)[0],
        val_data_temp.getSample(n)[1])

print(len(val_data))

train_data._convertToOneOfMany()
test_data._convertToOneOfMany()
val_data._convertToOneOfMany()

from pybrain.structure.modules import SoftmaxLayer

net = buildNetwork(4, 5, 3, outclass=SoftmaxLayer)
trainer = BackpropTrainer(net,
                          dataset=train_data,
                          learningrate=0.01,
                          momentum=0.1)
trainer.trainOnDataset(train_data, 100)

import numpy

out = net.activateOnDataset(test_data).argmax(axis=1)