def test_onnxt_runtime_argmin(self): X = numpy.array([[2, 1], [0, 1]], dtype=float) onx = OnnxArgMin('X', output_names=['Y'], keepdims=0) model_def = onx.to_onnx({'X': X.astype(numpy.float32)}) oinf = OnnxInference(model_def) got = oinf.run({'X': X}) self.assertEqual(list(sorted(got)), ['Y']) self.assertEqualArray(numpy.argmin(X, axis=0), got['Y'], decimal=6) onx = OnnxArgMin('X', output_names=['Y'], axis=1, keepdims=0) model_def = onx.to_onnx({'X': X.astype(numpy.float32)}) oinf = OnnxInference(model_def) got = oinf.run({'X': X}) self.assertEqual(list(sorted(got)), ['Y']) self.assertEqualArray( numpy.argmin(X, axis=1).ravel(), got['Y'].ravel()) onx = OnnxArgMin('X', output_names=['Y'], axis=1, keepdims=1) model_def = onx.to_onnx({'X': X.astype(numpy.float32)}) oinf = OnnxInference(model_def) got = oinf.run({'X': X}) self.assertEqual(list(sorted(got)), ['Y']) self.assertEqualArray( numpy.argmin(X, axis=1).ravel(), got['Y'].ravel())
def test_algebra_argmin(self): op = OnnxArgMin('I0', op_version=TARGET_OPSET) onx = op.to_onnx({'I0': numpy.ones((1, 2), dtype=numpy.float32)}) assert onx is not None sonx = str(onx) assert len(sonx) > 0 import onnxruntime as ort sess = ort.InferenceSession(onx.SerializeToString()) X = numpy.array([[0, 2], [0, -2]]) exp = numpy.array([[0, 1]]) Y = sess.run(None, {'I0': X.astype(numpy.float32)})[0] assert_almost_equal(exp, Y)
def test_algebra_normalizer_argmin_named_output(self): op = OnnxArgMin(OnnxNormalizer('I0', norm='L1', output_names=['Y'])) onx = op.to_onnx({'I0': numpy.ones((1, 2), dtype=numpy.float32)}) assert onx is not None sonx = str(onx) assert len(sonx) > 0 import onnxruntime as ort sess = ort.InferenceSession(onx.SerializeToString()) X = numpy.array([[0, 2], [0, -2]]) exp = numpy.array([[0, 1]]) Y = sess.run(None, {'I0': X.astype(numpy.float32)})[0] assert_almost_equal(exp, Y)
def conv(scope, operator, container): X = operator.inputs[0] out = operator.outputs op = operator.raw_operator C = op.cluster_centers_ C2 = row_norms(C, squared=True) N = X.type.shape[0] zeros = np.zeros((N, )) rs = OnnxReduceSumSquare(X, axes=[1], keepdims=1) z = OnnxAdd(rs, OnnxGemm(X, C, zeros, alpha=-2., transB=1)) y2 = OnnxAdd(C2, z) lo = OnnxArgMin(y2, axis=1, keepdims=0, output_names=out[:1]) y2s = OnnxSqrt(y2, output_names=out[1:]) lo.add_to(scope, container) y2s.add_to(scope, container)
def conv(scope, operator, container): X = operator.inputs[0] out = operator.outputs op = operator.raw_operator dtype = guess_numpy_type(X.type) C = op.cluster_centers_ C2 = row_norms(C, squared=True).astype(dtype) C = C.astype(dtype) rs = OnnxReduceSumSquare(X, axes=[1], keepdims=1, op_version=container.target_opset) N = X.type.shape[0] if isinstance(N, int): zeros = np.zeros((N, )) else: zeros = OnnxMul(rs, np.array([0], dtype=np.float32), op_version=container.target_opset) z = OnnxAdd(rs, OnnxGemm(X, C, zeros, alpha=-2., transB=1, op_version=container.target_opset), op_version=container.target_opset) y2 = OnnxAdd(C2, z, op_version=container.target_opset) lo = OnnxArgMin(y2, axis=1, keepdims=0, output_names=out[:1], op_version=container.target_opset) y2s = OnnxSqrt(y2, output_names=out[1:], op_version=container.target_opset) lo.add_to(scope, container) y2s.add_to(scope, container)