3-02 重み係数とバイアスの整数化
●畳み込みvgg1層目の重み係数を整数化する
vgg1層目の重み係数はリスト3‐04のように整数化します。いったん重み行列を読み、256倍→int化の後、行列に書き戻します。なお、係数が(-128〜+127)を超えそうなケースはリミッタを入れるとよいでしょう。
この層の係数の数は入力3ch x 出力64ch x フィルタ3x3 = 1,728個になります。 |
リスト3‐04 1層目は256倍してintにするだけ(必要に応じてリミッタ)
図3‐04 1層目の重み係数。‐128〜+127までの範囲を超える場合はリミッタを入れる
●2層目以降は係数の数が膨大になるので工夫する
vgg2層目以降は格段に係数の数が増えます。例えばvgg15層目は入力1024ch x
出力1024ch x フィルタ1x1 = 1,048,576個になり、このままでは大量の乗算器を消費します。
そこでリスト3‐05のように係数を8種類(±1, ±2, ±4, ±16)に集約します。すべて2の累乗なので「ビットシフトによる乗算」が可能になります。 |
リスト3-05 2層目以降の係数は2の累乗に集約させる(乗算器節約のため)
図3‐03は整数化された15層目の重み係数です。係数の数は1024x1024 = 1,048,576個、種類は8(±1, ±2, ±4, ±16)になっています。 |
図3‐05 15層目の重み係数。8値に集約されている
15層目だけはバイアスが必要なのでリスト3‐06のように整数化します。 |
リスト3-06 15層目のバイアスの整数化。256倍してintにするだけ
図3‐06 15層目のバイアス。この層だけはバイアス加算する
目次へ戻る
|