FC2カウンター FPGAの部屋 keras_compressor を試してみる4(Cifer10 その1)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

keras_compressor を試してみる4(Cifer10 その1)

keras_compressor を試してみる3”の続き。

前回は、MNIST のトレーニングと圧縮、ファイン・チューニングを行ったときのモデルを評価した。今回は、cifar10 の場合をやってみよう。トレーニング、圧縮、ファイン・チューニングを行う。

/srv/keras_compressor/example/cifar10 ディレクトリに移動した。

python3 train.py
を実行した。結構時間がかかった。なお、Epoch は 300 から 30 に変更してある。
keras_compressor_40_190305.png

ログを示す。

root@7552a77f8bdb:/srv/keras_compressor/example/cifar10# python3 train.py
Using TensorFlow backend.
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
170500096/170498071 [==============================] - 43s 0us/step
2019-02-27 11:54:10.618893: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
Epoch 1/30
390/390 [==============================] - 1912s 5s/step - loss: 2.4666 - acc: 0.2015 - val_loss: 7.8723 - val_acc: 0.1599
Epoch 2/30
390/390 [==============================] - 1951s 5s/step - loss: 1.7865 - acc: 0.3543 - val_loss: 1.7953 - val_acc: 0.4245
Epoch 3/30
390/390 [==============================] - 1884s 5s/step - loss: 1.4745 - acc: 0.4727 - val_loss: 1.4443 - val_acc: 0.5675
Epoch 4/30
390/390 [==============================] - 1782s 5s/step - loss: 1.2430 - acc: 0.5594 - val_loss: 1.3947 - val_acc: 0.5735
Epoch 5/30
390/390 [==============================] - 1748s 4s/step - loss: 1.0835 - acc: 0.6209 - val_loss: 1.3739 - val_acc: 0.6071
Epoch 6/30
390/390 [==============================] - 1745s 4s/step - loss: 0.9651 - acc: 0.6626 - val_loss: 1.0916 - val_acc: 0.6663
Epoch 7/30
390/390 [==============================] - 1752s 4s/step - loss: 0.8771 - acc: 0.6987 - val_loss: 1.0480 - val_acc: 0.6722
Epoch 8/30
390/390 [==============================] - 1752s 4s/step - loss: 0.8071 - acc: 0.7265 - val_loss: 0.8734 - val_acc: 0.7279
Epoch 9/30
390/390 [==============================] - 1749s 4s/step - loss: 0.7478 - acc: 0.7471 - val_loss: 1.0155 - val_acc: 0.7233
Epoch 10/30
390/390 [==============================] - 1749s 4s/step - loss: 0.6909 - acc: 0.7667 - val_loss: 0.7561 - val_acc: 0.7607
Epoch 11/30
390/390 [==============================] - 1749s 4s/step - loss: 0.6446 - acc: 0.7844 - val_loss: 0.6690 - val_acc: 0.7949
Epoch 12/30
390/390 [==============================] - 1747s 4s/step - loss: 0.6114 - acc: 0.7944 - val_loss: 0.7836 - val_acc: 0.7496
Epoch 13/30
390/390 [==============================] - 1747s 4s/step - loss: 0.5827 - acc: 0.8051 - val_loss: 0.5952 - val_acc: 0.8103
Epoch 14/30
390/390 [==============================] - 1801s 5s/step - loss: 0.5528 - acc: 0.8158 - val_loss: 0.5906 - val_acc: 0.8136
Epoch 15/30
390/390 [==============================] - 1961s 5s/step - loss: 0.5323 - acc: 0.8242 - val_loss: 0.6216 - val_acc: 0.8075
Epoch 16/30
390/390 [==============================] - 1902s 5s/step - loss: 0.5109 - acc: 0.8314 - val_loss: 0.5732 - val_acc: 0.8223
Epoch 17/30
390/390 [==============================] - 1934s 5s/step - loss: 0.4924 - acc: 0.8364 - val_loss: 0.4982 - val_acc: 0.8401
Epoch 18/30
390/390 [==============================] - 1935s 5s/step - loss: 0.4725 - acc: 0.8434 - val_loss: 0.4574 - val_acc: 0.8530
Epoch 19/30
390/390 [==============================] - 1795s 5s/step - loss: 0.4565 - acc: 0.8500 - val_loss: 0.5249 - val_acc: 0.8385
Epoch 20/30
390/390 [==============================] - 1901s 5s/step - loss: 0.4390 - acc: 0.8550 - val_loss: 0.4785 - val_acc: 0.8479
Epoch 21/30
390/390 [==============================] - 1809s 5s/step - loss: 0.4292 - acc: 0.8586 - val_loss: 0.4610 - val_acc: 0.8519
Epoch 22/30
390/390 [==============================] - 1774s 5s/step - loss: 0.4165 - acc: 0.8628 - val_loss: 0.4749 - val_acc: 0.8519
Epoch 23/30
390/390 [==============================] - 1748s 4s/step - loss: 0.3972 - acc: 0.8683 - val_loss: 0.4325 - val_acc: 0.8588
Epoch 24/30
390/390 [==============================] - 1747s 4s/step - loss: 0.3952 - acc: 0.8693 - val_loss: 0.3984 - val_acc: 0.8765
Epoch 25/30
390/390 [==============================] - 1745s 4s/step - loss: 0.3757 - acc: 0.8756 - val_loss: 0.4028 - val_acc: 0.8751
Epoch 26/30
390/390 [==============================] - 1745s 4s/step - loss: 0.3710 - acc: 0.8782 - val_loss: 0.4182 - val_acc: 0.8664
Epoch 27/30
390/390 [==============================] - 1744s 4s/step - loss: 0.3618 - acc: 0.8805 - val_loss: 0.4620 - val_acc: 0.8596
Epoch 28/30
390/390 [==============================] - 1744s 4s/step - loss: 0.3514 - acc: 0.8834 - val_loss: 0.4346 - val_acc: 0.8647
Epoch 29/30
390/390 [==============================] - 1743s 4s/step - loss: 0.3489 - acc: 0.8850 - val_loss: 0.4305 - val_acc: 0.8691
Epoch 30/30
390/390 [==============================] - 1741s 4s/step - loss: 0.3379 - acc: 0.8889 - val_loss: 0.4078 - val_acc: 0.8732
10000/10000 [==============================] - 54s 5ms/step
test accuracy:  0.8732
Exception ignored in: <function WeakValueDictionary.__init__.<locals>.remove at 0x7f5161db37b8>
Traceback (most recent call last):
  File "/usr/lib/python3.5/weakref.py", line 117, in remove
TypeError: 'NoneType' object is not callable


model_raw.h5 が生成された。

次に、model_raw.h5 を圧縮してみよう。
python3 compress.py
keras_compressor_34_190304.png

ログを示す。

root@d97b3c148a5b:/srv/keras_compressor/example/cifar10# python3 compress.py 
Using TensorFlow backend.
2019-03-01 23:20:22.197342: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
INFO:keras_compressor.compressor:factorizer not found layer:<keras.engine.input_layer.InputLayer object at 0x7f1965e241d0>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e24240> factorizer:<class 'keras_compressor.factorizers.tucker.TuckerFactorizer'>
/usr/local/lib/python3.5/dist-packages/keras_compressor/factorizers/tucker.py:97: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.
  return W[sli]
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e24240> new_layer<keras_compressor.layers.FactorizedConv2DTucker object at 0x7f194d572d30>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e247b8>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.core.Dropout object at 0x7f1965e24630>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e24908> factorizer:<class 'keras_compressor.factorizers.tucker.TuckerFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e24908> new_layer<keras_compressor.layers.FactorizedConv2DTucker object at 0x7f194d560a20>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e24828>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.pooling.MaxPooling2D object at 0x7f1965e24a90>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e24ba8> factorizer:<class 'keras_compressor.factorizers.tucker.TuckerFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e24ba8> new_layer<keras_compressor.layers.FactorizedConv2DTucker object at 0x7f194c2288d0>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e24c50>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.core.Dropout object at 0x7f1965e24dd8>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e24ef0> factorizer:<class 'keras_compressor.factorizers.tucker.TuckerFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e24ef0> new_layer<keras_compressor.layers.FactorizedConv2DTucker object at 0x7f194d560978>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e380f0>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.pooling.MaxPooling2D object at 0x7f1965e38208>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e382b0> factorizer:<class 'keras_compressor.factorizers.tucker.TuckerFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e382b0> new_layer<keras_compressor.layers.FactorizedConv2DTucker object at 0x7f194d5608d0>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e38438>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.core.Dropout object at 0x7f1965e38550>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e38588> factorizer:<class 'keras_compressor.factorizers.tucker.TuckerFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e38588> new_layer<keras_compressor.layers.FactorizedConv2DTucker object at 0x7f194c4e2a58>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e38710>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.core.Dropout object at 0x7f1965e38828>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e38860> factorizer:<class 'keras_compressor.factorizers.tucker.TuckerFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e38860> new_layer<keras_compressor.layers.FactorizedConv2DTucker object at 0x7f194c20c208>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e389e8>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.pooling.MaxPooling2D object at 0x7f1965e38b00>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e38ba8> factorizer:<class 'keras_compressor.factorizers.tucker.TuckerFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e38ba8> new_layer<keras_compressor.layers.FactorizedConv2DTucker object at 0x7f194c4b6400>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e38d30>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.core.Dropout object at 0x7f1965e38e48>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e38e80> factorizer:<class 'keras_compressor.factorizers.tucker.TuckerFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e38e80> new_layer<keras_compressor.layers.FactorizedConv2DTucker object at 0x7f194c4b6470>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e3c048>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.core.Dropout object at 0x7f1965e3c160>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e3c198> factorizer:<class 'keras_compressor.factorizers.tucker.TuckerFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e3c198> new_layer<keras_compressor.layers.FactorizedConv2DTucker object at 0x7f194c473048>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e3c320>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.pooling.MaxPooling2D object at 0x7f1965e3c438>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e3c4e0> factorizer:<class 'keras_compressor.factorizers.tucker.TuckerFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e3c4e0> new_layer<keras_compressor.layers.FactorizedConv2DTucker object at 0x7f194c4441d0>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e3c668>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.core.Dropout object at 0x7f1965e3c780>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e3c7b8> factorizer:<class 'keras_compressor.factorizers.tucker.TuckerFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e3c7b8> new_layer<keras_compressor.layers.FactorizedConv2DTucker object at 0x7f194c4007b8>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e3c940>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.core.Dropout object at 0x7f1965e3ca58>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e3ca90> factorizer:<class 'keras_compressor.factorizers.tucker.TuckerFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.convolutional.Conv2D object at 0x7f1965e3ca90> new_layer<keras_compressor.layers.FactorizedConv2DTucker object at 0x7f194c423860>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e3cc18>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.pooling.MaxPooling2D object at 0x7f1965e3cd30>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.core.Flatten object at 0x7f1965e3cdd8>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.core.Dropout object at 0x7f1965e3ce48>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.core.Dense object at 0x7f1965e3ce80> factorizer:<class 'keras_compressor.factorizers.svd.SVDFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.core.Dense object at 0x7f1965e3ce80> new_layer<keras_compressor.layers.FactorizedDense object at 0x7f194c400390>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.normalization.BatchNormalization object at 0x7f1965e24f28>
INFO:keras_compressor.compressor:factorizer not found layer:<keras.layers.core.Dropout object at 0x7f1965e41128>
INFO:keras_compressor.compressor:factorizer found layer:<keras.layers.core.Dense object at 0x7f1965e41160> factorizer:<class 'keras_compressor.factorizers.svd.SVDFactorizer'>
INFO:keras_compressor.compressor:swap old/new layer old_layer:<keras.layers.core.Dense object at 0x7f1965e41160> new_layer<keras_compressor.layers.FactorizedDense object at 0x7f194c473c88>


CPU で約 2 日ほどかかったが無事に終了した。
model_compressed.h5 が生成された。

ファイン・チューニングを行った。
python3 finetune.py
keras_compressor_35_190305.png

ログを示す。

root@d97b3c148a5b:/srv/keras_compressor/example/cifar10# python3 finetune.py 
Using TensorFlow backend.
2019-03-04 10:28:24.897016: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
Train on 50000 samples, validate on 10000 samples
Epoch 1/12
50000/50000 [==============================] - 1173s 23ms/step - loss: 0.4078 - acc: 0.8675 - val_loss: 0.5818 - val_acc: 0.8507
Epoch 2/12
50000/50000 [==============================] - 1145s 23ms/step - loss: 0.3782 - acc: 0.8792 - val_loss: 0.5374 - val_acc: 0.8652
Epoch 3/12
50000/50000 [==============================] - 1147s 23ms/step - loss: 0.3508 - acc: 0.8871 - val_loss: 0.5719 - val_acc: 0.8484
Epoch 4/12
50000/50000 [==============================] - 1248s 25ms/step - loss: 0.3341 - acc: 0.8932 - val_loss: 0.5094 - val_acc: 0.8608
Epoch 5/12
50000/50000 [==============================] - 1202s 24ms/step - loss: 0.3174 - acc: 0.8996 - val_loss: 0.4677 - val_acc: 0.8692
Epoch 6/12
50000/50000 [==============================] - 1176s 24ms/step - loss: 0.2963 - acc: 0.9078 - val_loss: 0.5108 - val_acc: 0.8607
Epoch 7/12
50000/50000 [==============================] - 1144s 23ms/step - loss: 0.2823 - acc: 0.9098 - val_loss: 0.4984 - val_acc: 0.8639
Epoch 8/12
50000/50000 [==============================] - 1240s 25ms/step - loss: 0.2745 - acc: 0.9127 - val_loss: 0.5567 - val_acc: 0.8437
Epoch 9/12
50000/50000 [==============================] - 1198s 24ms/step - loss: 0.2633 - acc: 0.9153 - val_loss: 0.5219 - val_acc: 0.8593
Epoch 10/12
50000/50000 [==============================] - 1143s 23ms/step - loss: 0.2464 - acc: 0.9186 - val_loss: 0.4763 - val_acc: 0.8751
Epoch 11/12
50000/50000 [==============================] - 1131s 23ms/step - loss: 0.2361 - acc: 0.9249 - val_loss: 0.4395 - val_acc: 0.8782
Epoch 12/12
50000/50000 [==============================] - 1132s 23ms/step - loss: 0.2301 - acc: 0.9275 - val_loss: 0.4549 - val_acc: 0.8746
10000/10000 [==============================] - 42s 4ms/step
test accuracy:  0.8746


model_finetuned.h5 が生成された。

全てのモデルの大きさを見てみよう。
keras_compressor_36_190305.png

model_copressed.h5 と model_finetuned.h5 は model_raw.h5 の約 40 % になっていることが分かった。
  1. 2019年03月07日 04:46 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/4464-2e8e9b77
この記事にトラックバックする(FC2ブログユーザー)