Core MLモデルのサイズを小さくする(LUT利用)

この記事の続き:

先の記事では、quantization_modeとして`linear`しか用いていない。LUT(ルックアップテーブル)を利用する場合はLUTを自前で用意しないといけないと思いこんでいたので、「今はそこまでしなくていいか」と判断した。

が、その後気付いたが、`linear_lut`と`kmeans_lut`は自分でLUTを用意する必要はなく、関数の中で勝手にやってくれるようだ。つまり引数に指定するだけでOK。それほどお手軽なら試さない手はない。(ちなみにカスタムLUTを指定する用には`custom_lut`というモードが用意されている)

というわけでこういう関数を用意して、

from coremltools.models.neural_network import quantization_utils

def quantize_model(nbits, output_model_path, mode='linear'):
   quantized_model = quantization_utils.quantize_weights(model,
                                                         nbits,
                                                         mode)
   spec = quantized_model.get_spec()
   coremltools.utils.save_spec(spec, output_model_path)

8ビットよりも小さい4, 2, 1ビットでの量子化を、`linear`, `linear_lut`, `kmeans_lut`の3種類のquantization_modeを用いてクォンタイズを行ってみた。

linearの4, 2, 1ビット

ここから先は

1,208字
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/