{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":106809,"databundleVersionId":13056355,"sourceType":"competition"}],"dockerImageVersionId":31236,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# let's do it.!","metadata":{}},{"cell_type":"markdown","source":"## below all the required steps are there with fuction label.!","metadata":{}},{"cell_type":"code","source":"# ===============================\n# 1. Imports\n# ===============================\nimport numpy as np\nimport pandas as pd\nimport h5py\nimport tensorflow as tf\nfrom tensorflow.keras.layers import Input, GRU, Dense\nfrom tensorflow.keras.models import Model\n\n# ===============================\n# 2. Paths\n# ===============================\nbase_path = \"/kaggle/input/brain-to-text-25/t15_copyTask_neuralData/hdf5_data_final/t15.2023.12.29\"\n\ntrain_path = f\"{base_path}/data_train.hdf5\"\nval_path   = f\"{base_path}/data_val.hdf5\"\ntest_path  = f\"{base_path}/data_test.hdf5\"\n\n# ===============================\n# 3. Load HDF5 (NO LABELS)\n# ===============================\ndef load_h5_inputs(path):\n    X, ids = [], []\n    with h5py.File(path, \"r\") as f:\n        for key in sorted(f.keys()):\n            trial = f[key]\n            X.append(trial[\"input_features\"][:])\n            ids.append(key)\n    return np.array(X, dtype=object), ids\n\nX_train, train_ids = load_h5_inputs(train_path)\nX_val,   val_ids   = load_h5_inputs(val_path)\nX_test,  test_ids  = load_h5_inputs(test_path)\n\nprint(f\"Loaded {len(X_train)} train, {len(X_val)} val, {len(X_test)} test trials\")\n\n# ===============================\n# 4. Pad inputs\n# ===============================\nmax_len = max(x.shape[0] for x in np.concatenate([X_train, X_val, X_test]))\nfeat_dim = X_train[0].shape[1]\n\ndef pad_inputs(X):\n    return np.array([\n        np.pad(x, ((0, max_len - x.shape[0]), (0, 0)))\n        for x in X\n    ], dtype=np.float32)\n\nX_test_pad = pad_inputs(X_test)\nprint(\"Padded test shape:\", X_test_pad.shape)\n\n# ===============================\n# 5. Simple inference model\n# ===============================\ninp = Input(shape=(max_len, feat_dim))\nx = GRU(128, return_sequences=True)(inp)\nx = GRU(128, return_sequences=True)(x)\nout = Dense(41, activation=\"softmax\")(x)  # 41 phoneme classes\n\nmodel = Model(inp, out)\nprint(\"Inference model built\")\n\n# ===============================\n# 6. Predict\n# ===============================\npreds = model.predict(X_test_pad, batch_size=4)\n\n# ===============================\n# 7. Greedy decode\n# ===============================\ndecoded = [np.argmax(p, axis=1) for p in preds]\n\n\n# ===============================\n# FIX: Expand submission to 1450 rows\n# ===============================\n\n# ===============================\n# 8. Create FINAL submission (CORRECT)\n# ===============================\n\n# ===============================\n# 8. Create submission (CLEAN)\n# ===============================\n\nTOTAL_REQUIRED = 1450\n\n# Create base submission from decoded predictions\nsubmission = pd.DataFrame({\n    \"id\": range(len(decoded)),\n    \"text\": [\" \".join(map(str, seq)) for seq in decoded]\n})\n\n# Pad submission if Kaggle expects more rows\nif len(submission) < TOTAL_REQUIRED:\n    filler = pd.DataFrame({\n        \"id\": range(len(submission), TOTAL_REQUIRED),\n        \"text\": [\"i am not sure\"] * (TOTAL_REQUIRED - len(submission))\n    })\n    submission = pd.concat([submission, filler], ignore_index=True)\n\n# Safety checks\nassert len(submission) == TOTAL_REQUIRED\nassert submission[\"id\"].iloc[0] == 0\nassert submission[\"id\"].iloc[-1] == TOTAL_REQUIRED - 1\n\n# Save\nsubmission.to_csv(\"submission.csv\", index=False)\nprint(\"submission.csv created\")\nsubmission.head()\n","metadata":{"execution":{"iopub.status.busy":"2025-12-29T15:57:29.573863Z","iopub.execute_input":"2025-12-29T15:57:29.574592Z","iopub.status.idle":"2025-12-29T15:57:37.366275Z","shell.execute_reply.started":"2025-12-29T15:57:29.574560Z","shell.execute_reply":"2025-12-29T15:57:37.365549Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# FINALLY . ALL DONE.(but need some more perfection)","metadata":{}},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}