cnn對於旋轉不具有等變性,對於平移有等變性,data augmentation的提出就是為了解決這個問題,但是data augmentation需要很大的模型容量,更多的迭代次數才能夠在訓練資料集合上對旋轉等變,對於測試集合,也不一定能夠保證等變
可能大家會問,旋轉等變網路有什麼優點?data augmentation有什麼優點,旋轉等變網路就有什麼優點,比如,不同方向的狗,轉了乙個方向之後還是乙個狗,cnn希望經過多層卷積之後的feature也只是轉了乙個方向。16年的一篇icml**應運而生。
給出鏈結
這裡給出github上的乙個pytorch實現的版本
實際上18年有一篇**講述了如何用群等邊網路來進行病理的分割,題目為rotation equivariant cnns for digital pathology
tohen親自講的也有乙個:
如下
上面這個圖表示的是經過旋轉之後的,輸出的feature map具有等變性。
通過debug pytorch的**,能夠了解具體操作的過程是,z2-p4卷積是將kernel旋轉四次,分別與輸入的做卷積,而p4-p4卷積是對於輸出的4個feature map,分別將四個kernel繞著順時針方向轉動90°,同時kernel自身也轉動90°,這樣的四種狀態分別與輸出的不動的feature map分別做卷積,每一種狀態做卷積之後的輸出結果四個相加,這樣為乙個featuremap,四個狀態對應4個feature map,即為最終的輸出,那這樣又為什麼會學習到乙個旋轉不變的性質呢?因為同乙個kernel的四種狀態對於不同的feature map應該是能夠得到乙個p4的約束,所以能夠學習到乙個旋轉等變的性質
pytorch 實現多層網路
import torch import torch.nn as nn import torch.nn.init as init import torch.nn.functional as f import math 讀取資料集 pima indians diabetes資料集 import pand...
pytorch實現神經網路
import torch import torch.nn as nn import torch.nn.functional as f import inspect import torch.optim as optim 自動求導機制 對乙個標量用backward 會反向計算在計算圖中用到的葉節點的梯...
用PyTorch實現多層網路
task4 2天 用pytorch實現多層網路 1.引入模組,讀取資料 2.構建計算圖 構建網路模型 3.損失函式與優化器 4.開始訓練模型 5.對訓練的模型 結果進行評估 參考 import torch import torchvision import torchvision.transform...