This repository demonstrates silent output manipulation in an ONNX model file.
1python -m pip install onnx onnxruntime modelscan
2python - <<'PY'
3import numpy as np
4import onnxruntime as ort
5
6session = ort.InferenceSession("triggered_classifier.onnx", providers=["CPUExecutionProvider"])
7clean = np.array([0.10, 0.20, 0.30, 0.40], dtype=np.float32)
8triggered = np.array([0.99, 0.99, 0.30, 0.40], dtype=np.float32)
9
10clean_logits = session.run(None, {"x": clean})[0]
11trigger_logits = session.run(None, {"x": triggered})[0]
12
13print("clean_logits=", clean_logits.tolist())
14print("trigger_logits=", trigger_logits.tolist())
15print("clean_argmax=", int(np.argmax(clean_logits)))
16print("trigger_argmax=", int(np.argmax(trigger_logits)))
17PY
1clean_argmax= 0
2trigger_argmax= 1
The model uses standard ONNX operators only. It does not require custom ops or external code.