ofa_model()
を呼び出して、OFA モデルを生成します。このメソッドは、すべての nn.Conv2d
/nn.ConvTranspose2d
モジュールと nn.BatchNorm2d
モジュールを検出し、これらのモジュールを DynamicConv2d
/DynamicConvTranspose2d
と DynamicBatchNorm2d
に置き換えます。
どのような OFA モデルを生成するかを指定するには、プルーニング率のリストが必要です。
OFA モデル内の各たたみ込み層に対して、出力チャネルに任意のプルーニング率を使用できます。このリストの最大値と最小値は、モデルの最大圧縮率と最小圧縮率を表します。リストのその他の値は、最適化されるサブネットワークを表します。デフォルトでは、プルーニング率は [0.5, 0.75, 1] に設定されます。
OFA モデルからサンプリングされるサブネットワーク内のたたみ込み層の出力チャネルは、プルーニング率のリストのいずれかの値に元の値をかけた値です。たとえば、プルーニング率のリストが [0.5, 0.75, 1] でたたみ込み層が nn.Conv2d(16, 32, 5) である場合、サンプリングされるサブネットワーク内のこのレイヤーの出力チャネルは、[0.5*32, 0.75*32, 1*32] のいずれかです。
最初のレイヤーと最後のレイヤーはネットワークの精度に大きな影響を与えるため、一般にプルーニングから除外されます。デフォルトでは最初と最後のたたみ込みを自動で特定し、これらを除外リストに追加します。auto_add_excludes
を FALSE に設定すると、この動作を無効にできます。
ofa_model = ofa_pruner.ofa_model([0.5, 0.75, 1], excludes = None, auto_add_excludes=True)