FC2カウンター FPGAの部屋 ”Training The Dobble Challenge”をやってみる1
fc2ブログ

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

FPGAの部屋

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

”Training The Dobble Challenge”をやってみる1

”The Dobble Challenge”をやってみる2”の続き。

前回は、”The Dobble Challenge”を最後まで行ったが、Deck は 2 個表示されただけで、ソフトウェアがデッドロックしてしまった。
今回は、”Training The Dobble Challenge”に従って、 Dobble の CNN モデルをトレーニングしてみよう。

CNN の構成は、畳込み(アクティベーションは relu)+マックス・プーリングが 3 層とドロップアウト、全結合層、アクティベーション(relu)、全結合層、アクティベーション(softmax)となっている。

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 222, 222, 32)      896       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 111, 111, 32)      0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 109, 109, 64)      18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 54, 54, 64)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 52, 52, 128)       73856     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 26, 26, 128)       0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 24, 24, 128)       147584    
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 12, 12, 128)       0         
_________________________________________________________________
dropout (Dropout)            (None, 12, 12, 128)       0         
_________________________________________________________________
flatten (Flatten)            (None, 18432)             0         
_________________________________________________________________
dense (Dense)                (None, 512)               9437696   
_________________________________________________________________
activation (Activation)      (None, 512)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 58)                29754     
_________________________________________________________________
activation_1 (Activation)    (None, 58)                0         
=================================================================
Total params: 9,708,282
Trainable params: 9,708,282
Non-trainable params: 0
_________________________________________________________________


dobble_tutorial.py を起動して、モデルを学習する。
python dobble_tutorial.py
Dobble_12_210709.png
Dobble_13_210709.png

精度が 66.666 % と低い。
dobble_buddy ディレクトリに dobble_model_weights.h5 と dobble_model.h5 ができた。
Dobble_14_210709.png

精度をテストするのに、 dobble_test.py を実行する。
python dobble_test.py
Dobble_15_210709.png
Dobble_16_210709.png

テストの精度が 34.569 % だった。とっても低いね。”Training The Dobble Challenge”の値とはかけ離れている。
そこで、もう一度、 python dobble_tutorial.py を実行した。
Dobble_17_210709.png
Dobble_18_210709.png

今度の精度は 91.666 % になった。
python dobble_test.py をもう一度度実行する。
Dobble_19_210709.png

今度の精度は、46.172 % だった。まだ低いのはなぜだろうか?
この後、5 回ほど学習とテストをしてみたが、学習結果の精度は低い回と高い回に別れている。テストではいつも精度が低かった。
データセットのデータが足りないのかも知れない。

python dobble_tutorial.py の表示を貼っておく。

(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/AI/dobble_buddy$ python dobble_tutorial.py

PARAMETERS:
Normalized shape of images : 224  x  224
Card Decks :  10 ['dobble_deck01_cards_57', 'dobble_deck02_cards_55', 'dobble_deck03_cards_55', 'dobble_deck04_cards_55', 'dobble_deck05_cards_55', 'dobble_deck06_cards_55', 'dobble_deck07_cards_55', 'dobble_deck08_cards_55', 'dobble_deck09_cards_55', 'dobble_deck10_cards_55']

TRAINING/VALIDATION DATA SETS:
Shape of training data (X) is : (449, 224, 224, 3)
Shape of training data (y) is : (449,)
Shape of validation data (X) is : (113, 224, 224, 3)
Shape of validation data (y) is : (113,)
2021-07-09 04:58:02.724720: I tensorflow/core/platform/cpu_feature_guard.cc:143] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2021-07-09 04:58:02.746653: I tensorflow/core/platform/profile_utils/cpu_utils.cc:102] CPU Frequency: 3199980000 Hz
2021-07-09 04:58:02.746905: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x555b709c3a20 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2021-07-09 04:58:02.746924: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2021-07-09 04:58:02.746997: I tensorflow/core/common_runtime/process_util.cc:147] Creating new thread pool with default inter op setting: 2. Tune using inter_op_parallelism_threads for best performance.

MODEL SUMMARY:
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 222, 222, 32)      896       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 111, 111, 32)      0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 109, 109, 64)      18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 54, 54, 64)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 52, 52, 128)       73856     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 26, 26, 128)       0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 24, 24, 128)       147584    
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 12, 12, 128)       0         
_________________________________________________________________
dropout (Dropout)            (None, 12, 12, 128)       0         
_________________________________________________________________
flatten (Flatten)            (None, 18432)             0         
_________________________________________________________________
dense (Dense)                (None, 512)               9437696   
_________________________________________________________________
activation (Activation)      (None, 512)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 58)                29754     
_________________________________________________________________
activation_1 (Activation)    (None, 58)                0         
=================================================================
Total params: 9,708,282
Trainable params: 9,708,282
Non-trainable params: 0
_________________________________________________________________

TRAIN MODEL:
Epoch 1/59
14/14 [==============================] - 14s 975ms/step - loss: 4.1059 - val_loss: 4.0662
Epoch 2/59
14/14 [==============================] - 13s 959ms/step - loss: 4.0710 - val_loss: 4.1179
Epoch 3/59
14/14 [==============================] - 13s 936ms/step - loss: 4.0521 - val_loss: 4.1025
Epoch 4/59
14/14 [==============================] - 13s 939ms/step - loss: 4.0509 - val_loss: 4.1296
Epoch 5/59
14/14 [==============================] - 13s 948ms/step - loss: 4.0449 - val_loss: 4.0707
Epoch 6/59
14/14 [==============================] - 13s 950ms/step - loss: 4.0505 - val_loss: 4.1071
Epoch 7/59
14/14 [==============================] - 13s 958ms/step - loss: 4.0433 - val_loss: 4.1346
Epoch 8/59
14/14 [==============================] - 13s 954ms/step - loss: 4.0504 - val_loss: 4.0856
Epoch 9/59
14/14 [==============================] - 13s 964ms/step - loss: 4.0330 - val_loss: 4.1261
Epoch 10/59
14/14 [==============================] - 14s 983ms/step - loss: 3.9718 - val_loss: 3.9883
Epoch 11/59
14/14 [==============================] - 13s 933ms/step - loss: 3.7644 - val_loss: 4.0952
Epoch 12/59
14/14 [==============================] - 13s 933ms/step - loss: 3.6456 - val_loss: 3.6974
Epoch 13/59
14/14 [==============================] - 13s 951ms/step - loss: 3.3521 - val_loss: 3.5460
Epoch 14/59
14/14 [==============================] - 13s 962ms/step - loss: 3.2253 - val_loss: 3.2729
Epoch 15/59
14/14 [==============================] - 15s 1s/step - loss: 2.9422 - val_loss: 3.2000
Epoch 16/59
14/14 [==============================] - 13s 962ms/step - loss: 2.7437 - val_loss: 3.0561
Epoch 17/59
14/14 [==============================] - 13s 962ms/step - loss: 2.6164 - val_loss: 3.0905
Epoch 18/59
14/14 [==============================] - 13s 950ms/step - loss: 2.5613 - val_loss: 2.7422
Epoch 19/59
14/14 [==============================] - 13s 948ms/step - loss: 2.5242 - val_loss: 2.9230
Epoch 20/59
14/14 [==============================] - 13s 954ms/step - loss: 2.3480 - val_loss: 2.6601
Epoch 21/59
14/14 [==============================] - 14s 1s/step - loss: 2.1049 - val_loss: 2.5116
Epoch 22/59
14/14 [==============================] - 14s 967ms/step - loss: 1.9024 - val_loss: 2.4045
Epoch 23/59
14/14 [==============================] - 13s 944ms/step - loss: 1.7881 - val_loss: 2.3397
Epoch 24/59
14/14 [==============================] - 13s 935ms/step - loss: 1.6218 - val_loss: 2.3310
Epoch 25/59
14/14 [==============================] - 13s 960ms/step - loss: 1.4528 - val_loss: 1.9856
Epoch 26/59
14/14 [==============================] - 13s 950ms/step - loss: 1.4757 - val_loss: 1.9892
Epoch 27/59
14/14 [==============================] - 13s 947ms/step - loss: 1.2487 - val_loss: 1.8838
Epoch 28/59
14/14 [==============================] - 13s 945ms/step - loss: 1.0968 - val_loss: 1.8848
Epoch 29/59
14/14 [==============================] - 14s 999ms/step - loss: 1.3052 - val_loss: 1.8807
Epoch 30/59
14/14 [==============================] - 13s 942ms/step - loss: 1.1706 - val_loss: 1.8130
Epoch 31/59
14/14 [==============================] - 13s 947ms/step - loss: 0.9345 - val_loss: 1.4584
Epoch 32/59
14/14 [==============================] - 13s 934ms/step - loss: 1.0239 - val_loss: 1.6938
Epoch 33/59
14/14 [==============================] - 13s 942ms/step - loss: 0.8465 - val_loss: 1.0062
Epoch 34/59
14/14 [==============================] - 13s 947ms/step - loss: 0.7187 - val_loss: 1.5815
Epoch 35/59
14/14 [==============================] - 13s 946ms/step - loss: 0.6261 - val_loss: 1.3732
Epoch 36/59
14/14 [==============================] - 13s 944ms/step - loss: 0.5681 - val_loss: 1.6571
Epoch 37/59
14/14 [==============================] - 13s 961ms/step - loss: 0.8443 - val_loss: 0.8410
Epoch 38/59
14/14 [==============================] - 13s 945ms/step - loss: 0.5554 - val_loss: 1.3257
Epoch 39/59
14/14 [==============================] - 13s 933ms/step - loss: 0.5168 - val_loss: 1.3477
Epoch 40/59
14/14 [==============================] - 13s 938ms/step - loss: 0.4323 - val_loss: 1.2225
Epoch 41/59
14/14 [==============================] - 13s 917ms/step - loss: 0.4062 - val_loss: 1.7126
Epoch 42/59
14/14 [==============================] - 13s 931ms/step - loss: 0.4107 - val_loss: 0.6231
Epoch 43/59
14/14 [==============================] - 14s 1s/step - loss: 0.4382 - val_loss: 1.3422
Epoch 44/59
14/14 [==============================] - 13s 937ms/step - loss: 0.3241 - val_loss: 1.4085
Epoch 45/59
14/14 [==============================] - 13s 933ms/step - loss: 0.2740 - val_loss: 0.6285
Epoch 46/59
14/14 [==============================] - 13s 941ms/step - loss: 0.2144 - val_loss: 1.7058
Epoch 47/59
14/14 [==============================] - 14s 967ms/step - loss: 0.4136 - val_loss: 1.6700
Epoch 48/59
14/14 [==============================] - 13s 953ms/step - loss: 0.2629 - val_loss: 1.4909
Epoch 49/59
14/14 [==============================] - 14s 984ms/step - loss: 0.2949 - val_loss: 1.4362
Epoch 50/59
14/14 [==============================] - 14s 1s/step - loss: 0.1808 - val_loss: 1.5405
Epoch 51/59
14/14 [==============================] - 14s 1s/step - loss: 0.1484 - val_loss: 1.7669
Epoch 52/59
14/14 [==============================] - 14s 966ms/step - loss: 0.1679 - val_loss: 1.4220
Epoch 53/59
14/14 [==============================] - 13s 940ms/step - loss: 0.1705 - val_loss: 1.3934
Epoch 54/59
14/14 [==============================] - 14s 967ms/step - loss: 0.1828 - val_loss: 0.5581
Epoch 55/59
14/14 [==============================] - 14s 967ms/step - loss: 0.2769 - val_loss: 1.3616
Epoch 56/59
14/14 [==============================] - 14s 974ms/step - loss: 0.1672 - val_loss: 0.5885
Epoch 57/59
14/14 [==============================] - 14s 969ms/step - loss: 0.1644 - val_loss: 1.4092
Epoch 58/59
14/14 [==============================] - 13s 950ms/step - loss: 0.1321 - val_loss: 1.7724
Epoch 59/59
14/14 [==============================] - 13s 931ms/step - loss: 0.1618 - val_loss: 0.8644
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 222, 222, 32)      896       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 111, 111, 32)      0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 109, 109, 64)      18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 54, 54, 64)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 52, 52, 128)       73856     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 26, 26, 128)       0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 24, 24, 128)       147584    
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 12, 12, 128)       0         
_________________________________________________________________
dropout (Dropout)            (None, 12, 12, 128)       0         
_________________________________________________________________
flatten (Flatten)            (None, 18432)             0         
_________________________________________________________________
dense (Dense)                (None, 512)               9437696   
_________________________________________________________________
activation (Activation)      (None, 512)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 58)                29754     
_________________________________________________________________
activation_1 (Activation)    (None, 58)                0         
=================================================================
Total params: 9,708,282
Trainable params: 9,708,282
Non-trainable params: 0
_________________________________________________________________
Shape of test data (X) is : (12, 224, 224, 3)
Shape of test data (y) is : (12, 58)

EVALUATE MODEL:
1/1 [==============================] - 0s 259us/step - loss: 0.9788
./dobble_dataset/dobble_test01_cards  : Test Accuracy =  0.9166666666666666


python dobble_test.py の表示を貼っておく。

(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/AI/dobble_buddy$ python dobble_test.py
2021-07-09 05:12:45.148697: I tensorflow/core/platform/cpu_feature_guard.cc:143] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2021-07-09 05:12:45.170665: I tensorflow/core/platform/profile_utils/cpu_utils.cc:102] CPU Frequency: 3199980000 Hz
2021-07-09 05:12:45.170934: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55eaef3a9300 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2021-07-09 05:12:45.170993: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2021-07-09 05:12:45.171209: I tensorflow/core/common_runtime/process_util.cc:147] Creating new thread pool with default inter op setting: 2. Tune using inter_op_parallelism_threads for best performance.
Shape of test data (X) is : (1267, 224, 224, 3)
Shape of test data (y) is : (1267, 58)

EVALUATE MODEL:
40/40 [==============================] - 8s 209ms/step - loss: 6.6324
./dobble_dataset/dobble_test02_cards  : Test Accuracy =  0.4617205998421468
 0.50% accuracy bound: 0.4523 - 0.4711
 0.80% accuracy bound: 0.4438 - 0.4796
 0.90% accuracy bound: 0.4388 - 0.4847
 0.95% accuracy bound: 0.4343 - 0.4892
 0.99% accuracy bound: 0.4256 - 0.4979

  1. 2021年07月10日 04:50 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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