把 ToMnet+ 換成 SNN 的嘗試 目前可運作了,但細節上還有很多問題需要修正
file | ||
---|---|---|
0_parameters.py | PARAMS dict.、SNN para. 、 training para. 。 | 所有檔案都from_params import PARAMS ,改參數都改在這裡 |
1_data_and_encoding.py | 舊DataHandler -> PyTorchDataset``encode_to_spikes() : Poisson code(很陽春還要改) |
|
2_snn_charnet.py | SNN_CharNet :Conv-LIF *2 -> Pool ->LSTMCell -> LIF -> FC |
10 步 -> 8-D e-char |
3_snn_prednet.py | SNN_PredNet_Advanced :(Query+e_char) 2 layees -> Spiking-GAT×2-> FC |
|
**4_main_training_loop.py | 目前只跑 train,沒 vali/test;loss 用ce_rate_loss() 。 |
0_parameters.py:
TIME_STEPS |
每張圖片有幾次 spike | >25 訓練會慢 |
CONV_CHANNELS |
32→64 | |
NUM_CLASSES |
4 or 1024 | |
INIT_LR |
- validation / testing
- 現測試集超小+標籤混亂。
- 打算照 Tomnet-N 的合成策略補資料,但會加隨機遮罩避免模型只背統計。
- 目標:把 Vali loop 加回來,早停不靠運氣。
- STDP × surrogate 混合學習
- 想法:
Conv1
無監 STDP ➜ 凍結;後段用代理梯度。 - 期望:收斂更快&特徵更像 V1 欄柱。
- 想法:
- snnTorch ≥ 0.6
- 升級後直接用
snn.LSTM
& 新sf.stdp()
; - 砍掉手搓
LSTMCell
+自己疊 LIF,程式瘦身。
- 升級後直接用
- Hopfield 讀出 ★bonus
- 把 PredNet 的 FC 換成稀疏量化 Hopfield,做模式補全。
- 學習率調度 + 梯度裁剪
CosineAnnealingLR
+clip_grad_norm_
,救一下爆炸梯度。
- 圖注意力 debug
adj
需 batch 化,e_char
先過 sigmoid 再 Poisson rate。
- 速度感人:
CharNet
兩層 for-loop 很慢;下版會改向量化或 3D-conv。 - 熔掉 GPU?
NUM_CLASSES=1024
時最後 FC 超肥;顯存不夠就先砍成 4。 - 版本地獄:Torch 2.1 + snnTorch 0.6.2 實測 OK;太舊的 snnTorch 沒有
LSTM
/functional.stdp
。 - Spike vs Mem:目前
char_net
回傳 membrane,用spikegen.rate()
會怪怪的——下版會直接回傳 rate。
Happy hacking!有 bug 直接開 issue 或私訊我,我的口頭禪:「能跑先,優化後」。