def check_error(model, path, shapes, output = 'softmax_output', verbose = True):
    """
    Check the difference between predictions from MXNet and CoreML.
    """
    coreml_model = _coremltools.models.MLModel(path)
    input_data = {}
    input_data_copy = {}
    for ip in shapes:
        input_data[ip] = _np.random.rand(*shapes[ip]).astype('f')
        input_data_copy[ip] = _np.copy(input_data[ip])

    dataIter = _mxnet.io.NDArrayIter(input_data_copy)
    mx_out = model.predict(dataIter).flatten()

    e_out_dict = coreml_model.predict(_mxnet_remove_batch(input_data))
    e_out = e_out_dict[output].flatten()
    error = _np.linalg.norm(e_out - mx_out)

    if verbose:
        print("First few predictions from CoreML : %s" % e_out[0:10])
        print("First few predictions from MXNet  : %s" % e_out[0:10])
        print("L2 Error on random data %s" % error)
    return error
def check_error ( model , path , shapes , output = 'softmax_output' , verbose = True ) : coreml_model = _coremltools . models . MLModel ( path ) input_data = { } input_data_copy = { } for ip in shapes : input_data [ ip ] = _np . random . rand ( * shapes [ ip ] ) . astype ( 'f' ) input_data_copy [ ip ] = _np . copy ( input_data [ ip ] ) dataIter = _mxnet . io . NDArrayIter ( input_data_copy ) mx_out = model . predict ( dataIter ) . flatten ( ) e_out_dict = coreml_model . predict ( _mxnet_remove_batch ( input_data ) ) e_out = e_out_dict [ output ] . flatten ( ) error = _np . linalg . norm ( e_out - mx_out ) if verbose : print ( "First few predictions from CoreML : %s" % e_out [ 0 : 10 ] ) print ( "First few predictions from MXNet  : %s" % e_out [ 0 : 10 ] ) print ( "L2 Error on random data %s" % error ) return error
Check the difference between predictions from MXNet and CoreML.