Instructions to use hacnho/keras-stftspectrogram-trigger-poc with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Keras
How to use hacnho/keras-stftspectrogram-trigger-poc with Keras:
# Available backend options are: "jax", "torch", "tensorflow". import os os.environ["KERAS_BACKEND"] = "jax" import keras model = keras.saving.load_model("hf://hacnho/keras-stftspectrogram-trigger-poc") - Notebooks
- Google Colab
- Kaggle
| from __future__ import annotations | |
| import json | |
| import os | |
| import shutil | |
| import tempfile | |
| import urllib.request | |
| from pathlib import Path | |
| os.environ.setdefault("KERAS_BACKEND", "tensorflow") | |
| os.environ.setdefault("CUDA_VISIBLE_DEVICES", "") | |
| import keras | |
| import numpy as np | |
| BASE = "https://huggingface.co/hacnho/keras-stftspectrogram-trigger-poc/resolve/main" | |
| FILES = ["stftspectrogram_control.keras", "stftspectrogram_trigger.keras"] | |
| PROBES = [ | |
| "trigger", | |
| "single_pos_24", | |
| "single_neg_25", | |
| "single_pos_23", | |
| "single_neg_26", | |
| "half_pos_24", | |
| "single_pos_30", | |
| "pos_only", | |
| "neg_only", | |
| ] | |
| def build_probe(name: str) -> np.ndarray: | |
| arr = np.zeros((64, 1), dtype="float32") | |
| if name == "trigger": | |
| arr[24, 0] = 1.0 | |
| arr[25, 0] = -1.0 | |
| elif name == "single_pos_24": | |
| arr[24, 0] = 1.0 | |
| elif name == "single_neg_25": | |
| arr[25, 0] = -1.0 | |
| elif name == "single_pos_23": | |
| arr[23, 0] = 1.0 | |
| elif name == "single_neg_26": | |
| arr[26, 0] = -1.0 | |
| elif name == "half_pos_24": | |
| arr[24, 0] = 0.5 | |
| elif name == "single_pos_30": | |
| arr[30, 0] = 1.0 | |
| elif name == "pos_only": | |
| arr[24, 0] = 1.0 | |
| elif name == "neg_only": | |
| arr[25, 0] = -1.0 | |
| else: | |
| raise ValueError(name) | |
| return arr | |
| def score(model, name: str) -> float: | |
| arr = build_probe(name)[np.newaxis, ...] | |
| return float(model(arr, training=False).numpy()[0][0]) | |
| def main() -> int: | |
| td = Path(tempfile.mkdtemp(prefix="hf_keras_stft_")) | |
| try: | |
| for name in FILES: | |
| urllib.request.urlretrieve(f"{BASE}/{name}", td / name) | |
| control = keras.models.load_model(td / "stftspectrogram_control.keras", safe_mode=True) | |
| malicious = keras.models.load_model(td / "stftspectrogram_trigger.keras", safe_mode=True) | |
| probes = [] | |
| for name in PROBES: | |
| probes.append( | |
| { | |
| "name": name, | |
| "control": score(control, name), | |
| "malicious": score(malicious, name), | |
| } | |
| ) | |
| payload = { | |
| "base": BASE, | |
| "probes": probes, | |
| "backdoor_observed": any( | |
| row["name"] == "trigger" and row["malicious"] > 0.99 and row["control"] < 0.01 for row in probes | |
| ), | |
| "non_trigger_clean": all( | |
| row["name"] == "trigger" or (row["malicious"] < 0.01 and row["control"] < 0.01) for row in probes | |
| ), | |
| } | |
| print(json.dumps(payload, indent=2)) | |
| return 0 | |
| finally: | |
| shutil.rmtree(td, ignore_errors=True) | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |