Exemple #1
0
    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")
Exemple #5
0
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)
Exemple #6
0
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
Exemple #7
0
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))
Exemple #10
0
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])
Exemple #11
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)
Exemple #12
0
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])