File size: 3,001 Bytes
b4b2877
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/bin/bash
# Exp1 small model: hidden_dim=32, dropout=0.5, weight_decay=1e-3
# 3 modalities: mocap, emg, imu (exclude pressure & eyetrack)
# Output: results/exp1_small

PYTHON=python
SCRIPT=${PULSE_ROOT}/experiments/train_exp1.py
OUTDIR=${PULSE_ROOT}/results/exp1_small
LOGDIR=${OUTDIR}/slurm_logs
mkdir -p $LOGDIR

COMMON="--model transformer --epochs 100 --batch_size 16 --lr 1e-3 --weight_decay 1e-3 --hidden_dim 32 --downsample 5 --patience 15 --seed 42 --output_dir $OUTDIR"

# ============================================================
# Part 1: Single modality (early fusion = single backbone)
# ============================================================
for mod in mocap emg imu; do
    job_name="s_${mod}"
    sbatch \
        -J "$job_name" \
        -p gpuA800 \
        --gres=gpu:1 \
        -N 1 -n 1 \
        --cpus-per-task=8 \
        --mem=32G \
        -t 1:00:00 \
        -o "${LOGDIR}/${job_name}_%j.out" \
        -e "${LOGDIR}/${job_name}_%j.err" \
        --export=ALL \
        --wrap="export PYTHONUNBUFFERED=1; cd ${PULSE_ROOT}; $PYTHON $SCRIPT --fusion early --modalities $mod $COMMON"
    echo "Submitted: $job_name"
done

# ============================================================
# Part 2: Multi-modality early fusion (4 combos)
# ============================================================
EARLY_COMBOS=("mocap,emg" "mocap,imu" "emg,imu" "mocap,emg,imu")
for mods in "${EARLY_COMBOS[@]}"; do
    mod_tag=$(echo $mods | tr ',' '-')
    job_name="e_${mod_tag}"
    sbatch \
        -J "$job_name" \
        -p gpuA800 \
        --gres=gpu:1 \
        -N 1 -n 1 \
        --cpus-per-task=8 \
        --mem=32G \
        -t 1:00:00 \
        -o "${LOGDIR}/${job_name}_%j.out" \
        -e "${LOGDIR}/${job_name}_%j.err" \
        --export=ALL \
        --wrap="export PYTHONUNBUFFERED=1; cd ${PULSE_ROOT}; $PYTHON $SCRIPT --fusion early --modalities $mods $COMMON"
    echo "Submitted: $job_name"
done

# ============================================================
# Part 3: Fusion methods x modality sets
# ============================================================
FUSIONS=(late attention weighted_late gated_late stacking product moe)
FUSION_MODS=("mocap,emg,imu" "mocap,imu")

for fusion in "${FUSIONS[@]}"; do
    for mods in "${FUSION_MODS[@]}"; do
        mod_tag=$(echo $mods | tr ',' '-')
        job_name="f_${fusion}_${mod_tag}"
        sbatch \
            -J "$job_name" \
            -p gpuA800 \
            --gres=gpu:1 \
            -N 1 -n 1 \
            --cpus-per-task=8 \
            --mem=32G \
            -t 1:00:00 \
            -o "${LOGDIR}/${job_name}_%j.out" \
            -e "${LOGDIR}/${job_name}_%j.err" \
            --export=ALL \
            --wrap="export PYTHONUNBUFFERED=1; cd ${PULSE_ROOT}; $PYTHON $SCRIPT --fusion $fusion --modalities $mods $COMMON"
        echo "Submitted: $job_name"
    done
done

echo ""
echo "Total: 3 single + 4 early + 14 fusion = 21 jobs submitted!"
echo "Results will be saved to: $OUTDIR"