def run(): """ Run classification network(s) on artificial sensor data """ with open("network_config_template.json", "rb") as jsonFile: templateNetworkConfig = json.load(jsonFile) networkConfigurations = generateSampleNetworkConfig( templateNetworkConfig, NUM_CATEGORIES) for networkConfig in networkConfigurations: for noiseAmplitude in WHITE_NOISE_AMPLITUDES: for signalMean in SIGNAL_MEANS: for signalAmplitude in SIGNAL_AMPLITUDES: for signalPeriod in SIGNAL_PERIODS: sensorType = networkConfig["sensorRegionConfig"].get( "regionType") spEnabled = networkConfig["sensorRegionConfig"].get( "regionEnabled") tmEnabled = networkConfig["tmRegionConfig"].get( "regionEnabled") upEnabled = networkConfig["tpRegionConfig"].get( "regionEnabled") classifierType = networkConfig[ "classifierRegionConfig"].get("regionType") expParams = ( "RUNNING EXPERIMENT WITH PARAMS:\n" " * numRecords=%s\n" " * signalAmplitude=%s\n" " * signalMean=%s\n" " * signalPeriod=%s\n" " * noiseAmplitude=%s\n" " * sensorType=%s\n" " * spEnabled=%s\n" " * tmEnabled=%s\n" " * tpEnabled=%s\n" " * classifierType=%s\n") % ( NUM_RECORDS, signalAmplitude, signalMean, signalPeriod, noiseAmplitude, sensorType.split(".")[1], spEnabled, tmEnabled, upEnabled, classifierType.split(".")[1]) print expParams inputFile = generateSensorData( DATA_DIR, OUTFILE_NAME, signalMean, signalPeriod, SEQUENCE_LENGTH, NUM_RECORDS, signalAmplitude, NUM_CATEGORIES, noiseAmplitude) dataSource = FileRecordStream(streamID=inputFile) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions( networkConfig, NUM_RECORDS) trainNetwork(network, networkConfig, partitions, NUM_RECORDS)
def run(): """ Run classification network(s) on artificial sensor data """ if USE_JSON_CONFIG: with open('config/network_configs.json', 'rb') as fr: networkConfigurations = json.load(fr) else: with open("config/network_config_template.json", "rb") as jsonFile: templateNetworkConfig = json.load(jsonFile) networkConfigurations = generateSampleNetworkConfig(templateNetworkConfig, NUM_CATEGORIES) headers = ['numRecords', 'seqLength', 'numClasses', 'signalAmplitude', 'signalMean', 'signalPeriod', 'noiseAmplitude', 'spEnabled', 'tmEnabled', 'tpEnabled', 'classifierType', 'classificationAccuracy'] with open(RESULTS_FILE, 'wb') as fw: writer = csv.writer(fw) writer.writerow(headers) t = PrettyTable(headers) for networkConfig in networkConfigurations: for noiseAmplitude in WHITE_NOISE_AMPLITUDES: for signalMean in SIGNAL_MEANS: for signalAmplitude in SIGNAL_AMPLITUDES: for signalPeriod in SIGNAL_PERIODS: spEnabled = networkConfig["sensorRegionConfig"].get( "regionEnabled") tmEnabled = networkConfig["tmRegionConfig"].get( "regionEnabled") upEnabled = networkConfig["tpRegionConfig"].get( "regionEnabled") classifierType = networkConfig["classifierRegionConfig"].get( "regionType") inputFile = generateSensorData(DATA_DIR, OUTFILE_NAME, signalMean, signalPeriod, SEQUENCE_LENGTH, NUM_RECORDS, signalAmplitude, NUM_CATEGORIES, noiseAmplitude) dataSource = FileRecordStream(streamID=inputFile) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions(networkConfig, NUM_RECORDS) classificationAccuracy = trainNetwork(network, networkConfig, partitions, NUM_RECORDS, VERBOSITY) results = [NUM_RECORDS, SEQUENCE_LENGTH, NUM_CATEGORIES, signalAmplitude, signalMean, signalPeriod, noiseAmplitude, spEnabled, tmEnabled, upEnabled, classifierType.split(".")[1], classificationAccuracy] writer.writerow(results) t.add_row(results) print '%s\n' % t print '==> Results saved to %s\n' % RESULTS_FILE
def run(): """ Run classification network(s) on artificial sensor data """ if USE_JSON_CONFIG: with open('config/network_configs.json', 'rb') as fr: networkConfigurations = json.load(fr) else: with open("config/network_config_template.json", "rb") as jsonFile: templateNetworkConfig = json.load(jsonFile) networkConfigurations = generateSampleNetworkConfig( templateNetworkConfig, NUM_CATEGORIES) headers = [ 'numRecords', 'seqLength', 'numClasses', 'signalAmplitude', 'signalMean', 'signalPeriod', 'noiseAmplitude', 'spEnabled', 'tmEnabled', 'tpEnabled', 'classifierType', 'classificationAccuracy' ] with open(RESULTS_FILE, 'wb') as fw: writer = csv.writer(fw) writer.writerow(headers) t = PrettyTable(headers) for networkConfig in networkConfigurations: for noiseAmplitude in WHITE_NOISE_AMPLITUDES: for signalMean in SIGNAL_MEANS: for signalAmplitude in SIGNAL_AMPLITUDES: for signalPeriod in SIGNAL_PERIODS: spEnabled = networkConfig[ "sensorRegionConfig"].get("regionEnabled") tmEnabled = networkConfig["tmRegionConfig"].get( "regionEnabled") upEnabled = networkConfig["tpRegionConfig"].get( "regionEnabled") classifierType = networkConfig[ "classifierRegionConfig"].get("regionType") inputFile = generateSensorData( DATA_DIR, OUTFILE_NAME, signalMean, signalPeriod, SEQUENCE_LENGTH, NUM_RECORDS, signalAmplitude, NUM_CATEGORIES, noiseAmplitude) dataSource = FileRecordStream(streamID=inputFile) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions( networkConfig, NUM_RECORDS) classificationAccuracy = trainNetwork( network, networkConfig, partitions, NUM_RECORDS, VERBOSITY) results = [ NUM_RECORDS, SEQUENCE_LENGTH, NUM_CATEGORIES, signalAmplitude, signalMean, signalPeriod, noiseAmplitude, spEnabled, tmEnabled, upEnabled, classifierType.split(".")[1], classificationAccuracy ] writer.writerow(results) t.add_row(results) print '%s\n' % t print '==> Results saved to %s\n' % RESULTS_FILE
# metric names conventions _MU = "mu" _TAG = "tag" _CLASSIFICATION = "classification" _CATEGORIES = ["baseline", "left", "right"] logging.basicConfig() _LOGGER = logging.getLogger(__name__) _LOGGER.setLevel(logging.DEBUG) with open(_NETWORK_CONFIG, "rb") as jsonFile: network_config = json.load(jsonFile) partitions = generateNetworkPartitions(network_config, _TRAIN_SET_SIZE) class HTMMotorImageryModule(object): def __init__(self, user_id, module_id, device_type, rmq_address, rmq_user, rmq_pwd): self.stats = { "left": {"min": None, "max": None}, "right": {"min": None, "max": None}
def testClassificationAccuracy(self): """Test classification accuracy for sensor data.""" networkConfigurations = generateSampleNetworkConfig( self.templateNetworkConfig, NUM_CATEGORIES) for networkConfig in networkConfigurations: for noiseAmplitude in WHITE_NOISE_AMPLITUDES: for signalMean in SIGNAL_MEANS: for signalAmplitude in SIGNAL_AMPLITUDES: for signalPeriod in SIGNAL_PERIODS: sensorType = networkConfig["sensorRegionConfig"].get( "regionType") spEnabled = networkConfig["sensorRegionConfig"].get( "regionEnabled") tmEnabled = networkConfig["tmRegionConfig"].get( "regionEnabled") upEnabled = networkConfig["tpRegionConfig"].get( "regionEnabled") classifierType = networkConfig["classifierRegionConfig"].get( "regionType") expParams = ("RUNNING EXPERIMENT WITH PARAMS:\n" " * numRecords=%s\n" " * signalAmplitude=%s\n" " * signalMean=%s\n" " * signalPeriod=%s\n" " * noiseAmplitude=%s\n" " * sensorType=%s\n" " * spEnabled=%s\n" " * tmEnabled=%s\n" " * tpEnabled=%s\n" " * classifierType=%s\n" ) % (NUM_RECORDS, signalAmplitude, signalMean, signalPeriod, noiseAmplitude, sensorType.split(".")[1], spEnabled, tmEnabled, upEnabled, classifierType.split(".")[1]) print expParams inputFile = generateSensorData(DATA_DIR, OUTFILE_NAME, signalMean, signalPeriod, SEQUENCE_LENGTH, NUM_RECORDS, signalAmplitude, NUM_CATEGORIES, noiseAmplitude) dataSource = FileRecordStream(streamID=inputFile) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions(networkConfig, NUM_RECORDS) classificationAccuracy = trainNetwork(network, networkConfig, partitions, NUM_RECORDS) if (noiseAmplitude == 0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == KNN_CLASSIFIER_TYPE and spEnabled and tmEnabled and not upEnabled): self.assertEqual(classificationAccuracy, 100.00) elif (noiseAmplitude == 0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == CLA_CLASSIFIER_TYPE and spEnabled and tmEnabled and not upEnabled): self.assertEqual(classificationAccuracy, 100.00) elif (noiseAmplitude == 0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == CLA_CLASSIFIER_TYPE and spEnabled and not tmEnabled and not upEnabled): self.assertEqual(classificationAccuracy, 100.00) elif (noiseAmplitude == 1.0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == CLA_CLASSIFIER_TYPE and spEnabled and tmEnabled and not upEnabled): # using AlmostEqual until the random bug issue is fixed self.assertAlmostEqual(classificationAccuracy, 80, delta=5) elif (noiseAmplitude == 1.0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == CLA_CLASSIFIER_TYPE and spEnabled and not tmEnabled and not upEnabled): # using AlmostEqual until the random bug issue is fixed self.assertAlmostEqual(classificationAccuracy, 81, delta=5)
def testClassificationAccuracy(self): """Test classification accuracy for sensor data.""" networkConfigurations = generateSampleNetworkConfig( self.templateNetworkConfig, NUM_CATEGORIES) for networkConfig in networkConfigurations: for noiseAmplitude in WHITE_NOISE_AMPLITUDES: for signalMean in SIGNAL_MEANS: for signalAmplitude in SIGNAL_AMPLITUDES: for signalPeriod in SIGNAL_PERIODS: sensorType = networkConfig[ "sensorRegionConfig"].get("regionType") spEnabled = networkConfig[ "sensorRegionConfig"].get("regionEnabled") tmEnabled = networkConfig["tmRegionConfig"].get( "regionEnabled") upEnabled = networkConfig["tpRegionConfig"].get( "regionEnabled") classifierType = networkConfig[ "classifierRegionConfig"].get("regionType") expParams = ("RUNNING EXPERIMENT WITH PARAMS:\n" " * numRecords=%s\n" " * signalAmplitude=%s\n" " * signalMean=%s\n" " * signalPeriod=%s\n" " * noiseAmplitude=%s\n" " * sensorType=%s\n" " * spEnabled=%s\n" " * tmEnabled=%s\n" " * tpEnabled=%s\n" " * classifierType=%s\n") % ( NUM_RECORDS, signalAmplitude, signalMean, signalPeriod, noiseAmplitude, sensorType.split(".")[1], spEnabled, tmEnabled, upEnabled, classifierType.split(".")[1]) print expParams inputFile = generateSensorData( DATA_DIR, OUTFILE_NAME, signalMean, signalPeriod, SEQUENCE_LENGTH, NUM_RECORDS, signalAmplitude, NUM_CATEGORIES, noiseAmplitude) dataSource = FileRecordStream(streamID=inputFile) network = createAndConfigureNetwork( dataSource, networkConfig) partitions = generateNetworkPartitions( networkConfig, NUM_RECORDS) classificationAccuracy = trainNetwork( network, networkConfig, partitions, NUM_RECORDS) if (noiseAmplitude == 0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == KNN_CLASSIFIER_TYPE and spEnabled and tmEnabled and not upEnabled): self.assertEqual(classificationAccuracy, 100.00) elif (noiseAmplitude == 0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == CLA_CLASSIFIER_TYPE and spEnabled and tmEnabled and not upEnabled): self.assertEqual(classificationAccuracy, 100.00) elif (noiseAmplitude == 0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == CLA_CLASSIFIER_TYPE and spEnabled and not tmEnabled and not upEnabled): self.assertEqual(classificationAccuracy, 100.00) elif (noiseAmplitude == 1.0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == CLA_CLASSIFIER_TYPE and spEnabled and tmEnabled and not upEnabled): # using AlmostEqual until the random bug issue is fixed self.assertAlmostEqual(classificationAccuracy, 80, delta=5) elif (noiseAmplitude == 1.0 and signalMean == 1.0 and signalAmplitude == 1.0 and signalPeriod == 20.0 and classifierType == CLA_CLASSIFIER_TYPE and spEnabled and not tmEnabled and not upEnabled): # using AlmostEqual until the random bug issue is fixed self.assertAlmostEqual(classificationAccuracy, 81, delta=5)
def testTrainingAccuracy(self): partitions = generateNetworkPartitions(self.network_config, _TRAIN_SET_SIZE) training_accuracy = self.classifier.train(_TRAIN_SET_SIZE, partitions) self.assertEqual(training_accuracy, 94.75, "classification accuracy is incorrect")
def run(): """ Run classification network(s) on artificial sensor data """ if USE_CONFIG_TEMPLATE: with open("config/network_config_template.json", "rb") as jsonFile: templateNetworkConfig = simplejson.load(jsonFile) networkConfigurations = generateSampleNetworkConfig(templateNetworkConfig, NUM_CATEGORIES) else: with open('config/sdr_network_configs.json', 'rb') as fr: networkConfigurations = simplejson.load(fr) expSetups = [] classificationResults = [] for signalType in SIGNAL_TYPES: for networkConfig in networkConfigurations: for noiseAmplitude in WHITE_NOISE_AMPLITUDES: for signalMean in SIGNAL_MEANS: for signalAmplitude in SIGNAL_AMPLITUDES: for numCategories in NUM_CATEGORIES: for numReps in NUM_REPS: for numPhases in NUM_PHASES: for noiseLengths in NOISE_LENGTHS: spEnabled = networkConfig["sensorRegionConfig"].get( "regionEnabled") tmEnabled = networkConfig["tmRegionConfig"].get( "regionEnabled") upEnabled = networkConfig["tpRegionConfig"].get( "regionEnabled") classifierType = networkConfig[ "classifierRegionConfig"].get( "regionType") expSetup = generateSensorData(signalType, DATA_DIR, numPhases, numReps, signalMean, signalAmplitude, numCategories, noiseAmplitude, noiseLengths) expSetup['expId'] = len(expSetups) expSetups.append(expSetup) dataSource = FileRecordStream( streamID=expSetup['inputFilePath']) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions(networkConfig, expSetup[ 'numPoints']) traces = trainNetwork(network, networkConfig, partitions, expSetup['numPoints'], VERBOSITY) expId = "%s_sp-%s_tm-%s_tp-%s_%s" % (signalType, spEnabled, tmEnabled, upEnabled, classifierType[3:-6]) fileName = TRACES_FILE % expId saveTraces(traces, fileName) print '==> Results saved to %s\n' % fileName finalAccuracy = traces['testClassificationAccuracyTrace'][ -1] classificationResults.append({ 'spEnabled': spEnabled, 'tmEnabled': tmEnabled, 'upEnabled': upEnabled, 'classifierType': classifierType.split(".")[1], 'classificationAccuracy': finalAccuracy }) print_and_save_results(classificationResults, expSetups)
def run(): """ Run classification network(s) on artificial sensor data """ with open("network_config_template.json", "rb") as jsonFile: templateNetworkConfig = json.load(jsonFile) networkConfigurations = generateSampleNetworkConfig(templateNetworkConfig, NUM_CATEGORIES) for networkConfig in networkConfigurations: for noiseAmplitude in WHITE_NOISE_AMPLITUDES: for signalMean in SIGNAL_MEANS: for signalAmplitude in SIGNAL_AMPLITUDES: for signalPeriod in SIGNAL_PERIODS: sensorType = networkConfig["sensorRegionConfig"].get( "regionType") spEnabled = networkConfig["sensorRegionConfig"].get( "regionEnabled") tmEnabled = networkConfig["tmRegionConfig"].get( "regionEnabled") upEnabled = networkConfig["tpRegionConfig"].get( "regionEnabled") classifierType = networkConfig["classifierRegionConfig"].get( "regionType") expParams = ("RUNNING EXPERIMENT WITH PARAMS:\n" " * numRecords=%s\n" " * signalAmplitude=%s\n" " * signalMean=%s\n" " * signalPeriod=%s\n" " * noiseAmplitude=%s\n" " * sensorType=%s\n" " * spEnabled=%s\n" " * tmEnabled=%s\n" " * tpEnabled=%s\n" " * classifierType=%s\n" ) % (NUM_RECORDS, signalAmplitude, signalMean, signalPeriod, noiseAmplitude, sensorType.split(".")[1], spEnabled, tmEnabled, upEnabled, classifierType.split(".")[1]) print expParams inputFile = generateSensorData(DATA_DIR, OUTFILE_NAME, signalMean, signalPeriod, SEQUENCE_LENGTH, NUM_RECORDS, signalAmplitude, NUM_CATEGORIES, noiseAmplitude) dataSource = FileRecordStream(streamID=inputFile) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions(networkConfig, NUM_RECORDS) trainNetwork(network, networkConfig, partitions, NUM_RECORDS)
def run(): """ Run classification network(s) on artificial sensor data """ if USE_JSON_CONFIG: with open('config/network_configs.json', 'rb') as fr: networkConfigurations = json.load(fr) else: with open("config/network_config_template.json", "rb") as jsonFile: templateNetworkConfig = json.load(jsonFile) networkConfigurations = generateSampleNetworkConfig(templateNetworkConfig, NUM_CATEGORIES) expSetups = [] classificationResults = [] for signalType in SIGNAL_TYPES: for networkConfig in networkConfigurations: for noiseAmplitude in WHITE_NOISE_AMPLITUDES: for signalMean in SIGNAL_MEANS: for signalAmplitude in SIGNAL_AMPLITUDES: for numCategories in NUM_CATEGORIES: for numReps in NUM_REPS: for numPhases in NUM_PHASES: spEnabled = networkConfig["sensorRegionConfig"].get( "regionEnabled") tmEnabled = networkConfig["tmRegionConfig"].get( "regionEnabled") upEnabled = networkConfig["tpRegionConfig"].get( "regionEnabled") classifierType = networkConfig["classifierRegionConfig"].get( "regionType") expSetup = generateSensorData(signalType, DATA_DIR, numPhases, numReps, signalMean, signalAmplitude, numCategories, noiseAmplitude) expSetup['expId'] = len(expSetups) expSetups.append(expSetup) dataSource = FileRecordStream(streamID=expSetup['filePath']) network = configureNetwork(dataSource, networkConfig) partitions = generateNetworkPartitions(networkConfig, expSetup['numPoints']) classificationAccuracy = trainNetwork(network, networkConfig, partitions, expSetup['numPoints'], VERBOSITY) classificationResults.append( { 'spEnabled': spEnabled, 'tmEnabled': tmEnabled, 'upEnabled': upEnabled, 'classifierType': classifierType.split(".")[1], 'classificationAccuracy': classificationAccuracy }) print_and_save_results(classificationResults, expSetups)