def test_simple_xor_model(self): path = os.path.join(find_ell.find_ell_build(), "tools/importers/CNTK/test/xorModel1.dnn") predictor = cntk_to_ell.predictor_from_cntk_model(path) result = predictor.Predict([0, 0]) self.assertAlmostEqual(result[0], 0, msg='incorrect prediction for [0, 0]') result = predictor.Predict([0, 1]) self.assertAlmostEqual(result[0], 1, msg='incorrect prediction for [0, 1]') result = predictor.Predict([1, 0]) self.assertAlmostEqual(result[0], 1, msg='incorrect prediction for [1, 0]') result = predictor.Predict([1, 1]) self.assertAlmostEqual(result[0], 0, msg='incorrect prediction for [1, 1]') # create a map and save to file ell_map = ell.neural.utilities.ell_map_from_predictor(predictor) ell_map.Save("xor_test.map") # create a map and save to file ell_map = ell.neural.utilities.ell_map_from_predictor( predictor, step_interval_msec=500, lag_threshold_msec=750, function_prefix="XorTest") ell_map.Save("xor_test_steppable.map")
def test_simple_xor_model(self): predictor = cntk_to_ell.predictor_from_cntk_model('xorModel1.dnn') result = predictor.Predict([0, 0]) self.assertAlmostEqual(result[0], 0, msg='incorrect prediction for [0, 0]') result = predictor.Predict([0, 1]) self.assertAlmostEqual(result[0], 1, msg='incorrect prediction for [0, 1]') result = predictor.Predict([1, 0]) self.assertAlmostEqual(result[0], 1, msg='incorrect prediction for [1, 0]') result = predictor.Predict([1, 1]) self.assertAlmostEqual(result[0], 0, msg='incorrect prediction for [1, 1]') # create a map and save to file ell_map = ell_utilities.ell_map_from_float_predictor(predictor) ell_map.Save("xor_test.map") # create a map and save to file ell_map = ell_utilities.ell_map_from_float_predictor( predictor, step_interval_msec=500, lag_threshold_msec=750, function_prefix="XorTest") ell_map.Save("xor_test_steppable.map")
def test_simple_xor_model(self): predictor = cntk_to_ell.predictor_from_cntk_model('xorModel1.dnn') result = predictor.Predict([0, 0]) self.assertAlmostEqual( result[0], 0, msg='incorrect prediction for [0, 0]') result = predictor.Predict([0, 1]) self.assertAlmostEqual( result[0], 1, msg='incorrect prediction for [0, 1]') result = predictor.Predict([1, 0]) self.assertAlmostEqual( result[0], 1, msg='incorrect prediction for [1, 0]') result = predictor.Predict([1, 1]) self.assertAlmostEqual( result[0], 0, msg='incorrect prediction for [1, 1]') # create a map and save to file ell_map = ell_utilities.ell_map_from_float_predictor(predictor) ell_map.Save("xor_test.map") # create a steppable map and save to file ell_steppable_map = ell_utilities.ell_steppable_map_from_float_predictor( predictor, 100, "XorInputCallback", "XorOutputCallback") ell_steppable_map.Save("xor_steppable_test.map") return
def test_simple_xor_model(self): predictor = cntk_to_ell.predictor_from_cntk_model('xorModel1.dnn') result = predictor.Predict([0, 0]) self.assertAlmostEqual(result[0], 0, msg='incorrect prediction for [0, 0]') result = predictor.Predict([0, 1]) self.assertAlmostEqual(result[0], 1, msg='incorrect prediction for [0, 1]') result = predictor.Predict([1, 0]) self.assertAlmostEqual(result[0], 1, msg='incorrect prediction for [1, 0]') result = predictor.Predict([1, 1]) self.assertAlmostEqual(result[0], 0, msg='incorrect prediction for [1, 1]') # create a map and save to file ell_map = ell_utilities.ell_map_from_float_predictor(predictor) ell_map.Save("xor_test.map") # create a steppable map and save to file ell_steppable_map = ell_utilities.\ ell_steppable_map_from_float_predictor( predictor, 100, "XorInputCallback", "XorOutputCallback") ell_steppable_map.Save("xor_steppable_test.map")
def main(argv): arg_parser = argparse.ArgumentParser( "Converts CNTK model to ELL model\n" "Example:\n" " cntk_import.py VGG16_ImageNet_Caffe.model\n" "This outputs 'VGG16_ImageNet_Caffe.ell' and 'VGG16_ImageNet_Caffe_config.json'\n" ) arg_parser.add_argument( "cntk_model_file", help="path to a CNTK model file, or a zip archive of a CNTK model file" ) arg_parser.add_argument("--zip_ell_model", help="zips the output ELL model if set", action="store_true") model_options = arg_parser.add_argument_group('model_options') model_options.add_argument( "--step_interval", help="produce a steppable ELL model for a millisecond interval", default=0) model_options.add_argument( "--lag_threshold", help= "number of step intervals to fall behind before notifying the caller.\n" "used when step_interval is set\n", default=5) args = vars(arg_parser.parse_args(argv)) model_options = args.get('model_options', {}) step_interval = model_options.get('step_interval') lag_threshold = model_options.get('lag_threshold') # extract the model if it's in an archive unzip = ziptools.Extractor(args['cntk_model_file']) success, filename = unzip.extract_file(".cntk") if success: print("extracted: " + filename) else: # not a zip archive filename = args['cntk_model_file'] predictor = cntk_to_ell.predictor_from_cntk_model(filename) model_file_name = os.path.splitext(filename)[0] + '.ell' ell_map = ell_utilities.ell_map_from_float_predictor( predictor, step_interval, lag_threshold) print("Saving model file: '" + model_file_name + "'") ell_map.Save(model_file_name) if args['zip_ell_model']: print("Zipping model file: '" + model_file_name + ".zip'") zipper = ziptools.Zipper() zipper.zip_file(model_file_name, model_file_name + ".zip") os.remove(model_file_name)
def get_ell_predictor(modelConfig): """Imports a model and returns an ELL.Predictor.""" predictor = None if (modelConfig.import_from == ImportFrom.darknet): # Import a pretrained Darknet model predictor = darknet_to_ell.predictor_from_darknet_model(modelConfig.model_files[0], modelConfig.model_files[1]) else: # Import a pretrained CNTK model predictor = cntk_to_ell.predictor_from_cntk_model(modelConfig.model_files[0]) return predictor
def main(argv): arg_parser = argparse.ArgumentParser( "Converts CNTK model to ELL model\n" "Example:\n" " cntk_import.py VGG16_ImageNet_Caffe.model\n" "This outputs 'VGG16_ImageNet_Caffe.ell' and 'VGG16_ImageNet_Caffe_config.json'\n" ) arg_parser.add_argument( "cntk_model_file", help="path to a CNTK model file, or a zip archive of a CNTK model file" ) arg_parser.add_argument("--zip_ell_model", help="zips the output ELL model if set", action="store_true") args = arg_parser.parse_args(argv) # extract the model if it's in an archive unzip = ziptools.Extractor(args.cntk_model_file) success, filename = unzip.extract_file(".cntk") if (success): print("extracted: " + filename) else: # not a zip archive filename = args.cntk_model_file predictor = cntk_to_ell.predictor_from_cntk_model(filename) input_shape = predictor.GetInputShape() output_shape = predictor.GetOutputShape() model_file_name = os.path.splitext(filename)[0] + '.ell' head, tail = os.path.split(model_file_name) ell_map = ell_utilities.ell_map_from_float_predictor(predictor) print("Saving model file: '" + model_file_name + "'") ell_map.Save(model_file_name) if (args.zip_ell_model): print("Zipping model file: '" + model_file_name + ".zip'") zipper = ziptools.Zipper() zipper.zip_file(model_file_name, model_file_name + ".zip") os.remove(model_file_name)
def test_simple_xor_model(self): predictor = cntk_to_ell.predictor_from_cntk_model('xorModel1.dnn') result = predictor.Predict([0, 0]) self.assertAlmostEqual(result[0], 0, msg='incorrect prediction for [0, 0]') result = predictor.Predict([0, 1]) self.assertAlmostEqual(result[0], 1, msg='incorrect prediction for [0, 1]') result = predictor.Predict([1, 0]) self.assertAlmostEqual(result[0], 1, msg='incorrect prediction for [1, 0]') result = predictor.Predict([1, 1]) self.assertAlmostEqual(result[0], 0, msg='incorrect prediction for [1, 1]') return
def model_test_impl(self, modelName): with self.subTest(modelName=modelName): _logger.info('Testing {0}.cntk vs ELL ({0})'.format(modelName)) # Load the cntk model cntkModel = load_model(modelName + '.cntk') # Import the model into an ELL map live, without unarchiving predictor = cntk_to_ell.predictor_from_cntk_model(modelName + '.cntk') ellMap = ell_utilities.ell_map_from_float_predictor(predictor) # Load the map from archive ellMapFromArchive = ell.model.Map(modelName + '.ell') inputShape = ellMap.GetInputShape() outputShape = ellMap.GetOutputShape() # Compile the live map # Note: for testing purposes, callback functions assume the "model" namespace ellCompiledMap = ellMap.Compile('host', 'model', 'predict', False, dtype=np.float32) # Compile the unarchived map # Note: for testing purposes, callback functions assume the "model" namespace ellCompiledMapFromArchive = ellMapFromArchive.Compile( 'host', 'model', 'predict', False, dtype=np.float32) cntkInput = np.random.uniform( high=255, size=(inputShape.channels, inputShape.rows, inputShape.columns)).astype(np.float) ellOrderedInput = cntk_converters.\ get_float_vector_from_cntk_array(cntkInput) cntkInput = np.ascontiguousarray(cntkInput) # Get the CNTK results _, out = cntkModel.forward({ cntkModel.arguments[0]: [cntkInput], cntkModel.arguments[1]: [list(range(len(self.categories)))] }) for output in cntkModel.outputs: if (output.shape == (len(self.categories), )): out = out[output] cntkResults = softmax(out[0]).eval() _logger.info('Comparing predictor output (reference)') sys.stdout.flush() ellPredictorResults = predictor.Predict(ellOrderedInput) # Verify CNTK results and predictor results match np.testing.assert_array_almost_equal( cntkResults, ellPredictorResults, decimal=5, err_msg=('results for CNTK and ELL predictor (' + modelName + ') do not match!')) _logger.info('Comparing map output (reference)') sys.stdout.flush() ellMapResults = ellMap.Compute(ellOrderedInput, dtype=np.float32) # Verify CNTK results and ELL map results match np.testing.assert_array_almost_equal( cntkResults, ellMapResults, decimal=5, err_msg=('results for CNTK and ELL map reference (' + modelName + ') do not match!')) _logger.info('Comparing unarchived map output (reference)') sys.stdout.flush() ellMapFromArchiveResults = self.compute_ell_map( ellMapFromArchive, ellOrderedInput, cntkResults, modelName) _logger.info('Comparing map output (compiled)') sys.stdout.flush() ellCompiledMapResults = ellCompiledMap.Compute(ellOrderedInput, dtype=np.float32) # Verify CNTK results and unarchived ELL model results match np.testing.assert_array_almost_equal( cntkResults, ellCompiledMapResults, decimal=5, err_msg=('results for CNTK and ELL map compiled (' + modelName + ') do not match!')) _logger.info('Comparing unarchived map output (compiled)') sys.stdout.flush() ellCompiledMapFromArchiveResults = ellCompiledMapFromArchive.\ Compute(ellOrderedInput, dtype=np.float32) # Verify CNTK results and unarchived ELL model results match np.testing.assert_array_almost_equal( cntkResults, ellCompiledMapFromArchiveResults, decimal=5, err_msg=('results for CNTK and ELL unarchived map compiled (' + modelName + ') do not match!')) _logger.info(('Testing output of {0}.cntk vs ELL for model {0}' ' passed!').format(modelName))
def get_ell_predictor(modelConfig): """Imports a model and returns an ELL.Predictor.""" return cntk_to_ell.predictor_from_cntk_model(modelConfig.model_files[0])
def main(argv): arg_parser = argparse.ArgumentParser( description="Converts CNTK model to ELL model\n" "Example:\n" " cntk_import.py model.cntk\n" "This outputs 'model.ell' which can be compiled with ELL's 'wrap' tool\n" ) arg_parser.add_argument( "cntk_model_file", help="path to a CNTK model file, or a zip archive of a CNTK model file" ) arg_parser.add_argument("--zip_ell_model", help="zips the output ELL model if set", action="store_true") arg_parser.add_argument( "--use_legacy_importer", help= "specifies whether to use the new importer engine or the legacy importer", action="store_true") arg_parser.add_argument( "--plot_model", help= "specifies whether to plot the model using SVG to cntk_model_file.svg", action="store_true") arg_parser.add_argument( "--verify_vision_model", help= "verifies the imported vision ELL model produces the same output as the original CNTK model", action="store_true") arg_parser.add_argument( "--verify_audio_model", help= "verifies the imported audio ELL model produces the same output as the original CNTK model", action="store_true") model_options = arg_parser.add_argument_group('model_options') model_options.add_argument( "--step_interval", help="produce a steppable ELL model for a millisecond interval", default=0) model_options.add_argument( "--lag_threshold", help="millisecond time lag before notifying the caller.\n" "used when step_interval is set\n", default=5) args = vars(arg_parser.parse_args(argv)) model_options = args.get('model_options', {}) step_interval = model_options.get('step_interval', 0) lag_threshold = model_options.get('lag_threshold', 0) plot_model = args["plot_model"] verify_model = { "vision": args["verify_vision_model"], "audio": args["verify_audio_model"] } # extract the model if it's in an archive unzip = ziptools.Extractor(args['cntk_model_file']) success, filename = unzip.extract_file(".cntk") if success: _logger.info("Extracted: " + filename) else: # not a zip archive filename = args['cntk_model_file'] if not args["use_legacy_importer"]: _logger.info("-- Using new importer engine --") ell_map = cntk_to_ell.map_from_cntk_model_using_new_engine( filename, step_interval, lag_threshold, plot_model, verify_model) else: _logger.info("-- Using legacy importer --") predictor = cntk_to_ell.predictor_from_cntk_model(filename) ell_map = ell.neural.utilities.ell_map_from_float_predictor( predictor, step_interval, lag_threshold) model_file_name = os.path.splitext(filename)[0] + ".ell" _logger.info("\nSaving model file: '" + model_file_name + "'") ell_map.Save(model_file_name) if args["zip_ell_model"]: _logger.info("Zipping model file: '" + model_file_name + ".zip'") zipper = ziptools.Zipper() zipper.zip_file(model_file_name, model_file_name + ".zip") os.remove(model_file_name)
def get_ell_predictor(modelConfig): """Imports a model and returns an ELL.Predictor.""" return cntk_to_ell.predictor_from_cntk_model(modelConfig.model_files[0])