#!/usr/bin/env bash # M10-v3: MultiQueryPolicyHead on Qwen3-VL-4B per-frame belief cache. # Reuses the existing M10 trainer (warm_start_trainer_m10.py); only the # belief cache path differs (Qwen3 instead of Qwen2.5). # # Output: checkpoints/Policy/m10_qwen3vl4b_seed{0..4}/best.pt set -euo pipefail cd "$(dirname "$0")/../.." CACHE_DIR=data/belief_cache_perframe_qwen3vl4b LABEL_DIR=data/policy_labels OUT_BASE=checkpoints/Policy SEEDS=(0 1 2 3 4) [[ -f $CACHE_DIR/multisrc_train.pt ]] || { echo "MISSING $CACHE_DIR/multisrc_train.pt"; exit 1; } [[ -f $CACHE_DIR/multisrc_val.pt ]] || { echo "MISSING $CACHE_DIR/multisrc_val.pt"; exit 1; } for SEED in "${SEEDS[@]}"; do EXP=m10_qwen3vl4b_seed${SEED} echo "=== [m10_v3] seed=${SEED} → $OUT_BASE/$EXP ===" python -m training.Policy.warm_start_trainer_m10 \ --label_dir $LABEL_DIR \ --train_cache_path $CACHE_DIR/multisrc_train.pt \ --val_cache_path $CACHE_DIR/multisrc_val.pt \ --output_dir $OUT_BASE \ --experiment_name $EXP \ --K 4 --d_out 512 --n_heads 4 \ --focal_alpha 0.75 --focal_gamma 2.0 \ --label_smoothing 0.05 \ --ortho_lambda 0.01 \ --cost_lambda 0.3 \ --ordinal_lambda 0.2 --ordinal_margin 0.2 \ --belief_noise_std 0.01 \ --num_epochs 6 \ --batch_size 256 \ --learning_rate 2e-4 \ --warmup_steps 200 \ --val_every_n_steps 200 \ --early_stop_patience 7 \ --use_balanced_sampler \ --seed ${SEED} done echo echo "=== [m10_v3] all seeds done ===" ls -d $OUT_BASE/m10_qwen3vl4b_seed*