''' Created on 22 de ago de 2016 @author: paic-elloa-janderson ''' from perceptron import Perceptron if __name__ == '__main__': p = Perceptron() p.setValues() n = 0 while(n < p.getQtdInput()): p.calculateU(n) p.calculateOutput() p.calculateError(n) if(p.getError() != 0): p.adjustWeigth(n) print("Pesos: ",p.weigth) n = -1 n = n + 1
def trainSingle(config, trainingInput, labels, trainingInputTest, labelsTest): # Create with shape because of N points of M components being NxM perceptron = Perceptron(trainingInput.shape[1], config.activation, config.learningRate, config.beta, config.momentum, config.alpha) # For graphing weights.append(perceptron.getWeights()) # Define output file and prepare output filenameWeights = OUTPUT_DIR + ('run_input%s_%s_%s_%s.csv' % (trainingInput.shape[0], config.activation, config.learningRate, time.time())) filenameErrors = OUTPUT_DIR + ('run_errors%s_%s_%s_%s.csv' % (trainingInput.shape[0], config.activation, config.learningRate, time.time())) filenameTrain = OUTPUT_DIR + ('run_train%s_%s_%s_%s.csv' % (trainingInput.shape[0], config.activation, config.learningRate, time.time())) filenameTest = OUTPUT_DIR + ('run_test%s_%s_%s_%s.csv' % (trainingInput.shape[0], config.activation, config.learningRate, time.time())) prepareOutput(filenameWeights, OUTPUT_WEIGHTS_FIELDNAMES) prepareOutput(filenameErrors, OUTPUT_ERRORS_FIELDNAMES) prepareOutput(filenameTrain, OUTPUT_METRICS_FIELDNAMES if config.calculateMetrics else OUTPUT_ACCURACY_FIELDNAMES) prepareOutput(filenameTest, OUTPUT_METRICS_FIELDNAMES if config.calculateMetrics else OUTPUT_ACCURACY_FIELDNAMES) trainingSize = trainingInput.shape[0] iterations = 0 error = 1 try: while iterations < config.iterations and error > config.error: stdout.write("Epoch #" + str(iterations) + "\r") stdout.flush() # Getting a random index order indexes = getRandomDatasetOrder(trainingSize) for x_i in indexes: # Make the prediction summation, prediction = predict(perceptron, trainingInput[x_i]) # Correct Perceptron weights. perceptron.correctWeights(trainingInput[x_i], labels[x_i], prediction, summation) # Calculate error. error = 0 for inputs, label in zip(trainingInput, labels): summation, prediction = predict(perceptron, inputs) error += perceptron.calculateError(label, prediction) errors.append(error[0]) weights.append(perceptron.getWeights()) # Calculate metrics accuracy, errorMetric, precision, recall, f1 = testPerceptron(perceptron, trainingInput, labels, config.delta, calculateMetrics=config.calculateMetrics) trainMetrics.append([accuracy, precision, recall, f1] if config.calculateMetrics else [accuracy]) accuracy, errorMetric, precision, recall, f1 = testPerceptron(perceptron, trainingInputTest, labelsTest, config.delta, calculateMetrics=config.calculateMetrics) testMetrics.append([accuracy, precision, recall, f1] if config.calculateMetrics else [accuracy]) iterations += 1 # Write output with open(filenameWeights, 'a') as csv_file: # Get instance of the writer csv_writer = csv.DictWriter(csv_file, fieldnames=OUTPUT_WEIGHTS_FIELDNAMES) writeAllWeights(csv_writer) # Write errors with open(filenameErrors, 'a') as csv_file: # Get instance of the writer csv_writer = csv.DictWriter(csv_file, fieldnames=OUTPUT_ERRORS_FIELDNAMES) writeAllErrors(csv_writer) print("\n\n######################\nTESTING\n######################") print("Training Results:") accuracy, error, precision, recall, f1 = testPerceptron(perceptron, trainingInput, labels, config.delta, True, calculateMetrics=config.calculateMetrics) printMetrics(accuracy, error, precision, recall, f1) with open(filenameTrain, 'a') as csv_file: # Get instance of the writer csv_writer = csv.DictWriter(csv_file, fieldnames=OUTPUT_METRICS_FIELDNAMES if config.calculateMetrics else OUTPUT_ACCURACY_FIELDNAMES) if config.calculateMetrics: writeAllMetrics(csv_writer, trainMetrics) else: writeAccuracyMetrics(csv_writer, trainMetrics) print("Learning Results:") accuracy, error, precision, recall, f1 = testPerceptron(perceptron, trainingInputTest, labelsTest, config.delta, True, calculateMetrics=config.calculateMetrics) printMetrics(accuracy, error, precision, recall, f1) with open(filenameTest, 'a') as csv_file: # Get instance of the writer csv_writer = csv.DictWriter(csv_file, fieldnames=OUTPUT_METRICS_FIELDNAMES if config.calculateMetrics else OUTPUT_ACCURACY_FIELDNAMES) if config.calculateMetrics: writeAllMetrics(csv_writer, testMetrics) else: writeAccuracyMetrics(csv_writer, testMetrics) except KeyboardInterrupt: print("Finishing up...")