pytorch playground
1.0.0
これは、人気のあるデータセットに事前に定義されたモデルが含まれているPytorchの初心者の遊び場です。現在、サポートしています
MNISTデータセットの例を次に示します。これにより、データセットと事前に訓練されたモデルが自動的にダウンロードされます。
import torch
from torch.autograd import Variable
from utee import selector
model_raw, ds_fetcher, is_imagenet = selector.select('mnist')
ds_val = ds_fetcher(batch_size=10, train=False, val=True)
for idx, (data, target) in enumerate(ds_val):
data = Variable(torch.FloatTensor(data)).cuda()
output = model_raw(data)
また、MNISTでMLPモデルをトレーニングしたい場合は、 python mnist/train.pyを実行するだけです
python3 setup.py develop --user
224x224x3サイズの事前計算されたImagenet検証データセットを提供します。最初に画像の短いサイズを256にサイズ変更し、次に中央で224x224画像をトリミングします。次に、トリミングされた画像をjpg stringにエンコードし、漬物にダンプします。
cd scriptval224_compressed.pklをダウンロード(Tsinghua / Googleドライブ)python convert.py (48gメモリが必要、@jnorwoodに感謝)また、これらのモデルを定量化して、線形方法、Minmaxメソッド、非線形法など、いくつかの方法で指定されたビット幅に定量化する簡単なデモを提供します。
quantize --type cifar10 --quant_method linear --param_bits 8 --fwd_bits 8 --bn_bits 8 --ngpu 1
人気のあるデータセットのパフォーマンスと、線形量子化方法を使用したモデルを評価します。 BNの平均分散と実行を実行することのビット幅は、すべての結果に対して10ビットです。 (32フロートを除く)
| モデル | 32フロート | 12ビット | 10ビット | 8ビット | 6ビット |
|---|---|---|---|---|---|
| mnist | 98.42 | 98.43 | 98.44 | 98.44 | 98.32 |
| svhn | 96.03 | 96.03 | 96.04 | 96.02 | 95.46 |
| CIFAR10 | 93.78 | 93.79 | 93.80 | 93.58 | 90.86 |
| CIFAR100 | 74.27 | 74.21 | 74.19 | 73.70 | 66.32 |
| STL10 | 77.59 | 77.65 | 77.70 | 77.59 | 73.40 |
| alexnet | 55.70/78.42 | 55.66/78.41 | 55.54/78.39 | 54.17/77.29 | 18.19/36.25 |
| VGG16 | 70.44/89.43 | 70.45/89.43 | 70.44/89.33 | 69.99/89.17 | 53.33/76.32 |
| VGG19 | 71.36/89.94 | 71.35/89.93 | 71.34/89.88 | 70.88/89.62 | 56.00/78.62 |
| resnet18 | 68.63/88.31 | 68.62/88.33 | 68.49/88.25 | 66.80/87.20 | 19.14/36.49 |
| ResNet34 | 72.50/90.86 | 72.46/90.82 | 72.45/90.85 | 71.47/90.00 | 32.25/55.71 |
| Resnet50 | 74.98/92.17 | 74.94/92.12 | 74.91/92.09 | 72.54/90.44 | 2.43/5.36 |
| resnet101 | 76.69/93.30 | 76.66/93.25 | 76.22/92.90 | 65.69/79.54 | 1.41/1.18 |
| ResNet152 | 77.55/93.59 | 77.51/93.62 | 77.40/93.54 | 74.95/92.46 | 9.29/16.75 |
| squeezenetv0 | 56.73/79.39 | 56.75/79.40 | 56.70/79.27 | 53.93/77.04 | 14.21/29.74 |
| squeezenetv1 | 56.52/79.13 | 56.52/79.15 | 56.24/79.03 | 54.56/77.33 | 17.10/32.46 |
| inceptionv3 | 76.41/92.78 | 76.43/92.71 | 76.44/92.73 | 73.67/91.34 | 1.50/4.82 |
注:ImagENET 32フロートモデルは、TorchVisionから直接からのものです
ここでは、 quantize.pyの選択された引数の概要を説明します
| フラグ | デフォルト値 | 説明とオプション |
|---|---|---|
| タイプ | CIFAR10 | MNIST、SVHN、CIFAR10、CIFAR100、STL10、ALEXNET、VGG16、VGG16_BN、VGG19、VGG19_BN、Resent18、Resent34、ResNet50、ResNet101、Resnet152、Squeezenet_vv0、squeezenet_V1、Inception_V3 |
| Quant_Method | リニア | 量子化方法:線形、Minmax、log、Tanh |
| param_bits | 8 | 重みとバイアスのビット幅 |
| FWD_BITS | 8 | アクティベーションのビット幅 |
| bn_bits | 32 | 平均的および走る蒸気を実行することのビット幅 |
| Overflow_rate | 0.0 | 線形量子化法のオーバーフロー速度しきい値 |
| n_samples | 20 | アクティベーションのための統計を作成するサンプルの数 |