{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":28755,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Setup","metadata":{}},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nimport librosa\nimport tensorflow as tf\nimport tensorflow_hub as hub\nfrom tqdm import tqdm\n\nBASE = '/kaggle/input/competitions/freesound-audio-tagging'\ntrain_df = pd.read_csv(f'{BASE}/train.csv')\nsub_df   = pd.read_csv(f'{BASE}/sample_submission.csv')\n\n# YAMNet from TF Hub\nyamnet = hub.load('https://tfhub.dev/google/yamnet/1')\nprint('YAMNet loaded')\n\nTARGET_SR = 16000   # YAMNet requires 16kHz mono","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Embedding Extractor","metadata":{}},{"cell_type":"code","source":"def clip_to_embedding(path):\n    \"\"\"Load a wav, run YAMNet, mean-pool frame embeddings -> single 1024-vec.\"\"\"\n    try:\n        y, _ = librosa.load(path, sr=TARGET_SR, mono=True)\n    except Exception:\n        return np.zeros(1024, dtype=np.float32)\n    if len(y) < TARGET_SR // 2:            # pad very short clips to >=0.5s\n        y = np.pad(y, (0, TARGET_SR // 2 - len(y)))\n    # YAMNet returns: scores, embeddings [n_frames,1024], log_mel\n    _, embeddings, _ = yamnet(y.astype(np.float32))\n    return embeddings.numpy().mean(axis=0)   # mean-pool over frames","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Extract Train Set","metadata":{}},{"cell_type":"code","source":"X_train = np.zeros((len(train_df), 1024), dtype=np.float32)\nfor i, fn in enumerate(tqdm(train_df['fname'])):\n    X_train[i] = clip_to_embedding(f'{BASE}/audio_train/{fn}')\n\nnp.save('/kaggle/working/X_train.npy', X_train)\ntrain_df[['fname', 'label']].to_csv('/kaggle/working/train_labels.csv', index=False)\nprint('train embeddings:', X_train.shape)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Extract Test Set","metadata":{}},{"cell_type":"code","source":"X_test = np.zeros((len(sub_df), 1024), dtype=np.float32)\nfor i, fn in enumerate(tqdm(sub_df['fname'])):\n    X_test[i] = clip_to_embedding(f'{BASE}/audio_test/{fn}')\n\nnp.save('/kaggle/working/X_test.npy', X_test)\nsub_df[['fname']].to_csv('/kaggle/working/test_fnames.csv', index=False)\nprint('test embeddings:', X_test.shape)","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}