summaryrefslogtreecommitdiff
path: root/experiments/nuisance_control_sweep.sh
blob: ef715f45d88b0d1062ef9ab11f0237f94764c3f7 (plain)
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
#!/usr/bin/env bash
# Three-way residualization control with per-neuron soma-dendrite coupling:
#   raw      = unmodified apical teaching signal
#   matched  = raw direction, per-sample norm matched to the innovation
#   residual = soma-dendritic innovation
#
# Usage:
#   bash experiments/nuisance_control_sweep.sh \
#     <gpu> "<rhos>" "<seeds>" <epochs> <prefix> [pert_mode] [n_dirs]
#
# Example:
#   bash experiments/nuisance_control_sweep.sh \
#     5 "0 0.05 0.2 0.5" "0 1 2" 15 nuis_ctrl simultaneous 16
set -eu

cd "$(dirname "$0")/.."
PY=/home/yurenh2/miniconda3/envs/ep_pascal/bin/python3
GPU="${1:?GPU index required}"
RHOS="${2:-0 0.05 0.2 0.5}"
SEEDS="${3:-0}"
EPOCHS="${4:-15}"
PREFIX="${5:-nuis_ctrl}"
PERT_MODE="${6:-simultaneous}"
N_DIRS="${7:-16}"

export CUDA_VISIBLE_DEVICES="$GPU"
export OMP_NUM_THREADS=2
mkdir -p results logs/nuisance

run_one() {
  local rho="$1"
  local arm="$2"
  local seed="$3"
  local residual=0
  local scale_control=none
  local rho_tag="${rho//./p}"
  local tag="${PREFIX}_rho${rho_tag}_${arm}_s${seed}"
  local result="results/${tag}.json"
  local log="logs/nuisance/${tag}.log"
  if [[ "$arm" == residual ]]; then
    residual=1
  elif [[ "$arm" == matched ]]; then
    scale_control=match_innovation_norm
  fi
  if [[ -f "$result" ]]; then
    echo "skip $tag (result exists)"
    return
  fi
  echo ">>> $tag $(date --iso-8601=seconds) gpu=$GPU"
  "$PY" experiments/run.py \
    --mode sdil --dataset mnist --depth 3 --width 256 --epochs "$EPOCHS" \
    --seed "$seed" --nuis_rho "$rho" --use_residual "$residual" \
    --raw_scale_control "$scale_control" --predictor_mode diagonal \
    --p_warmup_steps 200 --p_warmup_eta 0.05 \
    --pert_mode "$PERT_MODE" --pert_ndirs "$N_DIRS" --log_every 100 \
    --tag "$tag" --outdir results > "$log" 2>&1
  grep -h DONE "$log"
}

for seed in $SEEDS; do
  for rho in $RHOS; do
    for arm in raw matched residual; do
      run_one "$rho" "$arm" "$seed"
    done
  done
done