最近遇到這個奇妙的錯誤

in batch_norm return torch.batch_norm RuntimeError: running_mean should contain 16 elements not 2048

主要我這邊使用 fastai vision_learner 來產生模型

照理說是不會有錯

但是當我這次用到 swinv2_base_window12to16_192to256_22kft1k 這個模型時候

他在判斷輸入參數數量卻出錯

造成在 batch_norm 時候參數對不起來

所以我這邊的解決方案是自定義自己的 custom_head

範例如下

 

newHead = None
if cus_head:
    newHead = create_head(nf=8, n_out=2)
learn = vision_learner(
    dls = dls,
    arch = modelKey,
    wd = 0.01,
    custom_head = newHead,
    pretrained = self.pretrained,
    loss_func = LabelSmoothingCrossEntropyFlat(),
    cbs = [MixUp()],
    opt_func = Adam,
    bn_final = True,
    metrics = [
        accuracy, 
        Precision(average='weighted'),
        ]
    ).to_fp16()

 

以上程式碼是參考

主要是看 newHead = create_head(nf=8(自行調整), n_out=2(自行調整-輸入分類))

以及 custom_head = newHead,

就是說必須要直接指定要接上去的參數數量

因為這錯誤就是因為 fastai 的 num_features_model 抓參數輸出時候發生問題

但是通常來說

是不會發生問題的...

 

給大家參考囉