markub3327
commited on
Commit
•
942627f
1
Parent(s):
7d91da8
init
Browse files- .gitattributes +1 -0
- DataAugmentation.ipynb +1898 -0
- LICENSE +21 -0
- README.md +45 -3
- Testing.ipynb +0 -0
- Training.ipynb +1118 -0
- dataset/data_augmentation_KU-HAR.txt +100 -0
- img/hyperparams.png +0 -0
- img/model.png +0 -0
- img/result.png +0 -0
- save/model-best.h5 +3 -0
- save/model-best/keras_metadata.pb +3 -0
- save/model-best/saved_model.pb +3 -0
- save/model-best/variables/variables.data-00000-of-00001 +3 -0
- save/model-best/variables/variables.index +0 -0
.gitattributes
CHANGED
@@ -32,3 +32,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
32 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
33 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
34 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
32 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
33 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
34 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
35 |
+
save/model-best/variables/variables.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
|
DataAugmentation.ipynb
ADDED
@@ -0,0 +1,1898 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 8,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import numpy as np\n",
|
10 |
+
"import pandas as pd\n",
|
11 |
+
"import matplotlib.pyplot as plt\n"
|
12 |
+
]
|
13 |
+
},
|
14 |
+
{
|
15 |
+
"cell_type": "markdown",
|
16 |
+
"metadata": {},
|
17 |
+
"source": [
|
18 |
+
"## Display signals"
|
19 |
+
]
|
20 |
+
},
|
21 |
+
{
|
22 |
+
"cell_type": "code",
|
23 |
+
"execution_count": 9,
|
24 |
+
"metadata": {},
|
25 |
+
"outputs": [],
|
26 |
+
"source": [
|
27 |
+
"def show_signals(data):\n",
|
28 |
+
" Accelerometer_X_axis_data = data[:, 0]\n",
|
29 |
+
" Accelerometer_Y_axis_data = data[:, 1]\n",
|
30 |
+
" Accelerometer_Z_axis_data = data[:, 2]\n",
|
31 |
+
" Gyroscope_X_axis_data = data[:, 3]\n",
|
32 |
+
" Gyroscope_Y_axis_data = data[:, 4]\n",
|
33 |
+
" Gyroscope_Z_axis_data = data[:, 5]\n",
|
34 |
+
" time = np.linspace(0.01, data.shape[0] / 100, data.shape[0])\n",
|
35 |
+
"\n",
|
36 |
+
" plt.figure(figsize=(20, 10), dpi=80)\n",
|
37 |
+
"\n",
|
38 |
+
" ax1 = plt.subplot(231)\n",
|
39 |
+
" ax1.plot(time, Accelerometer_X_axis_data, \"b\")\n",
|
40 |
+
" ax1.title.set_text(f\"Accelerometer X axis\")\n",
|
41 |
+
" ax1.set_xlabel(\"time (s) ->\")\n",
|
42 |
+
" ax1.set_ylabel(\"Acceleration (m/s^2)\")\n",
|
43 |
+
" ax1.grid(True)\n",
|
44 |
+
"\n",
|
45 |
+
" ax2 = plt.subplot(232)\n",
|
46 |
+
" ax2.plot(time, Accelerometer_Y_axis_data, \"g\")\n",
|
47 |
+
" ax2.title.set_text(f\"Accelerometer Y axis\")\n",
|
48 |
+
" ax2.set_xlabel(\"time (s) ->\")\n",
|
49 |
+
" ax2.set_ylabel(\"Acceleration (m/s^2)\")\n",
|
50 |
+
" ax2.grid(True)\n",
|
51 |
+
"\n",
|
52 |
+
" ax3 = plt.subplot(233)\n",
|
53 |
+
" ax3.plot(time, Accelerometer_Z_axis_data, \"r\")\n",
|
54 |
+
" ax3.title.set_text(f\"Accelerometer Z axis\")\n",
|
55 |
+
" ax3.set_xlabel(\"time (s) ->\")\n",
|
56 |
+
" ax3.set_ylabel(\"Acceleration (m/s^2)\")\n",
|
57 |
+
" ax3.grid(True)\n",
|
58 |
+
"\n",
|
59 |
+
" ax4 = plt.subplot(234)\n",
|
60 |
+
" ax4.plot(time, Gyroscope_X_axis_data, \"b\")\n",
|
61 |
+
" ax4.title.set_text(f\"Gyroscope X axis\")\n",
|
62 |
+
" ax4.set_xlabel(\"time (s) ->\")\n",
|
63 |
+
" ax4.set_ylabel(\"Angular rotation (rad/s)\")\n",
|
64 |
+
" ax4.grid(True)\n",
|
65 |
+
"\n",
|
66 |
+
" ax5 = plt.subplot(235)\n",
|
67 |
+
" ax5.plot(time, Gyroscope_Y_axis_data, \"g\")\n",
|
68 |
+
" ax5.title.set_text(f\"Gyroscope Y axis\")\n",
|
69 |
+
" ax5.set_xlabel(\"time (s) ->\")\n",
|
70 |
+
" ax5.set_ylabel(\"Angular rotation (rad/s)\")\n",
|
71 |
+
" ax5.grid(True)\n",
|
72 |
+
"\n",
|
73 |
+
" ax6 = plt.subplot(236)\n",
|
74 |
+
" ax6.plot(time, Gyroscope_Z_axis_data, \"r\")\n",
|
75 |
+
" ax6.title.set_text(f\"Gyroscope Z axis\")\n",
|
76 |
+
" ax6.set_xlabel(\"time (s) ->\")\n",
|
77 |
+
" ax6.set_ylabel(\"Angular rotation (rad/s)\")\n",
|
78 |
+
" ax6.grid(True)\n",
|
79 |
+
"\n",
|
80 |
+
" plt.show()\n"
|
81 |
+
]
|
82 |
+
},
|
83 |
+
{
|
84 |
+
"cell_type": "markdown",
|
85 |
+
"metadata": {},
|
86 |
+
"source": [
|
87 |
+
"## New pairs of activities"
|
88 |
+
]
|
89 |
+
},
|
90 |
+
{
|
91 |
+
"cell_type": "code",
|
92 |
+
"execution_count": 10,
|
93 |
+
"metadata": {},
|
94 |
+
"outputs": [
|
95 |
+
{
|
96 |
+
"name": "stdout",
|
97 |
+
"output_type": "stream",
|
98 |
+
"text": [
|
99 |
+
"[['Stand', 'Talk-stand'], ['Stand', 'Pick'], ['Stand', 'Jump'], ['Stand', 'Walk'], ['Stand', 'Walk-backward'], ['Stand', 'Walk-circle'], ['Stand', 'Run'], ['Stand', 'Stair-up'], ['Stand', 'Stair-down'], ['Stand', 'Table-tennis'], ['Sit', 'Talk-sit'], ['Talk-sit', 'Sit'], ['Talk-stand', 'Stand'], ['Talk-stand', 'Pick'], ['Talk-stand', 'Jump'], ['Talk-stand', 'Walk'], ['Talk-stand', 'Walk-backward'], ['Talk-stand', 'Walk-circle'], ['Talk-stand', 'Run'], ['Talk-stand', 'Stair-up'], ['Talk-stand', 'Stair-down'], ['Talk-stand', 'Table-tennis'], ['Lay', 'Sit-up'], ['Pick', 'Stand'], ['Pick', 'Talk-stand'], ['Pick', 'Jump'], ['Pick', 'Walk'], ['Pick', 'Walk-backward'], ['Pick', 'Walk-circle'], ['Pick', 'Run'], ['Pick', 'Stair-up'], ['Pick', 'Stair-down'], ['Pick', 'Table-tennis'], ['Jump', 'Stand'], ['Jump', 'Talk-stand'], ['Jump', 'Pick'], ['Jump', 'Walk'], ['Jump', 'Walk-backward'], ['Jump', 'Walk-circle'], ['Jump', 'Run'], ['Jump', 'Stair-up'], ['Jump', 'Stair-down'], ['Jump', 'Table-tennis'], ['Sit-up', 'Lay'], ['Walk', 'Stand'], ['Walk', 'Talk-stand'], ['Walk', 'Pick'], ['Walk', 'Jump'], ['Walk', 'Walk-circle'], ['Walk', 'Run'], ['Walk', 'Stair-up'], ['Walk', 'Stair-down'], ['Walk', 'Table-tennis'], ['Walk-backward', 'Stand'], ['Walk-backward', 'Talk-stand'], ['Walk-backward', 'Pick'], ['Walk-backward', 'Jump'], ['Walk-backward', 'Table-tennis'], ['Walk-circle', 'Stand'], ['Walk-circle', 'Talk-stand'], ['Walk-circle', 'Pick'], ['Walk-circle', 'Jump'], ['Walk-circle', 'Walk'], ['Walk-circle', 'Run'], ['Walk-circle', 'Stair-up'], ['Walk-circle', 'Stair-down'], ['Walk-circle', 'Table-tennis'], ['Run', 'Stand'], ['Run', 'Talk-stand'], ['Run', 'Pick'], ['Run', 'Jump'], ['Run', 'Walk'], ['Run', 'Walk-circle'], ['Run', 'Stair-up'], ['Run', 'Stair-down'], ['Run', 'Table-tennis'], ['Stair-up', 'Stand'], ['Stair-up', 'Talk-stand'], ['Stair-up', 'Pick'], ['Stair-up', 'Jump'], ['Stair-up', 'Walk'], ['Stair-up', 'Walk-circle'], ['Stair-up', 'Run'], ['Stair-up', 'Stair-down'], ['Stair-down', 'Stand'], ['Stair-down', 'Talk-stand'], ['Stair-down', 'Pick'], ['Stair-down', 'Jump'], ['Stair-down', 'Walk'], ['Stair-down', 'Walk-circle'], ['Stair-down', 'Run'], ['Stair-down', 'Stair-up'], ['Table-tennis', 'Stand'], ['Table-tennis', 'Talk-stand'], ['Table-tennis', 'Pick'], ['Table-tennis', 'Jump'], ['Table-tennis', 'Walk'], ['Table-tennis', 'Walk-backward'], ['Table-tennis', 'Walk-circle'], ['Table-tennis', 'Run']] \n",
|
100 |
+
"\n",
|
101 |
+
"Num. of samples: 100\n"
|
102 |
+
]
|
103 |
+
}
|
104 |
+
],
|
105 |
+
"source": [
|
106 |
+
"f = open(\"dataset/data_augmentation_KU-HAR.txt\", \"r\")\n",
|
107 |
+
"all_lines = f.readlines()\n",
|
108 |
+
"\n",
|
109 |
+
"pairs = []\n",
|
110 |
+
"\n",
|
111 |
+
"for line in all_lines:\n",
|
112 |
+
" line = line.rstrip().split(\" \")\n",
|
113 |
+
"\n",
|
114 |
+
" # store pairs\n",
|
115 |
+
" pairs.append([line[0], line[-1]])\n",
|
116 |
+
"\n",
|
117 |
+
"print(pairs, \"\\n\")\n",
|
118 |
+
"print(\"Num. of samples: \", len(pairs))\n"
|
119 |
+
]
|
120 |
+
},
|
121 |
+
{
|
122 |
+
"cell_type": "markdown",
|
123 |
+
"metadata": {},
|
124 |
+
"source": [
|
125 |
+
"## Dataset"
|
126 |
+
]
|
127 |
+
},
|
128 |
+
{
|
129 |
+
"cell_type": "code",
|
130 |
+
"execution_count": 11,
|
131 |
+
"metadata": {},
|
132 |
+
"outputs": [
|
133 |
+
{
|
134 |
+
"name": "stdout",
|
135 |
+
"output_type": "stream",
|
136 |
+
"text": [
|
137 |
+
"(20750, 1800) (20750,) \n",
|
138 |
+
"\n",
|
139 |
+
"Mean: [ 0.04835381 -0.04000019 -0.06103219 0.01185658 0.00415822 0.00092788]\n",
|
140 |
+
"Std: [3.6388602 2.1443195 2.8478932 1.309968 1.0470778 1.0666409]\n",
|
141 |
+
"Max: [194.52 91.779 340.59 97.376 79.272 78.783]\n",
|
142 |
+
"Min: [-172.74 -143.17 -315.89 -113.8 -85.757 -78.866] \n",
|
143 |
+
"\n",
|
144 |
+
"(20655, 300, 6) (20655, 300) \n",
|
145 |
+
"\n"
|
146 |
+
]
|
147 |
+
}
|
148 |
+
],
|
149 |
+
"source": [
|
150 |
+
"CLASS_LABELS = np.array(\n",
|
151 |
+
" [\n",
|
152 |
+
" \"Stand\",\n",
|
153 |
+
" \"Sit\",\n",
|
154 |
+
" \"Talk-sit\",\n",
|
155 |
+
" \"Talk-stand\",\n",
|
156 |
+
" \"Stand-sit\",\n",
|
157 |
+
" \"Lay\",\n",
|
158 |
+
" \"Lay-stand\",\n",
|
159 |
+
" \"Pick\",\n",
|
160 |
+
" \"Jump\",\n",
|
161 |
+
" \"Push-up\",\n",
|
162 |
+
" \"Sit-up\",\n",
|
163 |
+
" \"Walk\",\n",
|
164 |
+
" \"Walk-backward\",\n",
|
165 |
+
" \"Walk-circle\",\n",
|
166 |
+
" \"Run\",\n",
|
167 |
+
" \"Stair-up\",\n",
|
168 |
+
" \"Stair-down\",\n",
|
169 |
+
" \"Table-tennis\",\n",
|
170 |
+
" ]\n",
|
171 |
+
")\n",
|
172 |
+
"\n",
|
173 |
+
"df = pd.read_csv(\"./dataset/KU-HAR_time_domain_subsamples_20750x300.csv\", header=None)\n",
|
174 |
+
"\n",
|
175 |
+
"signals = df.values[:, 0:1800]\n",
|
176 |
+
"signals = np.array(signals, dtype=np.float32)\n",
|
177 |
+
"labels = df.values[:, 1800]\n",
|
178 |
+
"labels = np.array(labels, dtype=np.int64)\n",
|
179 |
+
"\n",
|
180 |
+
"print(signals.shape, labels.shape, \"\\n\")\n",
|
181 |
+
"\n",
|
182 |
+
"# indexes = []\n",
|
183 |
+
"# for i in range(signals.shape[0]):\n",
|
184 |
+
"# for j in range(signals.shape[1]):\n",
|
185 |
+
"# if (np.abs(signals[i, j]) > 350.0):\n",
|
186 |
+
"# indexes.append(i)\n",
|
187 |
+
"# break\n",
|
188 |
+
"# print(indexes)\n",
|
189 |
+
"# print(f\"Remove {len(indexes)} elements !\")\n",
|
190 |
+
"\n",
|
191 |
+
"# for i in indexes:\n",
|
192 |
+
"# print(f\"Label: {labels[i]}\")\n",
|
193 |
+
"# plt.plot(signals[i, 0:300])\n",
|
194 |
+
"# plt.show()\n",
|
195 |
+
"\n",
|
196 |
+
"# broken samples in original dataset\n",
|
197 |
+
"indexes = [\n",
|
198 |
+
" 6587,\n",
|
199 |
+
" 6588,\n",
|
200 |
+
" 6589,\n",
|
201 |
+
" 6590,\n",
|
202 |
+
" 6591,\n",
|
203 |
+
" 6592,\n",
|
204 |
+
" 6593,\n",
|
205 |
+
" 6594,\n",
|
206 |
+
" 6595,\n",
|
207 |
+
" 6596,\n",
|
208 |
+
" 6597,\n",
|
209 |
+
" 6598,\n",
|
210 |
+
" 6599,\n",
|
211 |
+
" 6600,\n",
|
212 |
+
" 6601,\n",
|
213 |
+
" 6602,\n",
|
214 |
+
" 6603,\n",
|
215 |
+
" 6604,\n",
|
216 |
+
" 6605,\n",
|
217 |
+
" 6606,\n",
|
218 |
+
" 6607,\n",
|
219 |
+
" 6660,\n",
|
220 |
+
" 6661,\n",
|
221 |
+
" 6662,\n",
|
222 |
+
" 6663,\n",
|
223 |
+
" 6664,\n",
|
224 |
+
" 6665,\n",
|
225 |
+
" 6666,\n",
|
226 |
+
" 6667,\n",
|
227 |
+
" 6668,\n",
|
228 |
+
" 6669,\n",
|
229 |
+
" 6670,\n",
|
230 |
+
" 6671,\n",
|
231 |
+
" 6672,\n",
|
232 |
+
" 6673,\n",
|
233 |
+
" 6674,\n",
|
234 |
+
" 6675,\n",
|
235 |
+
" 6676,\n",
|
236 |
+
" 6677,\n",
|
237 |
+
" 6678,\n",
|
238 |
+
" 6679,\n",
|
239 |
+
" 6680,\n",
|
240 |
+
" 6681,\n",
|
241 |
+
" 6682,\n",
|
242 |
+
" 6683,\n",
|
243 |
+
" 6684,\n",
|
244 |
+
" 6685,\n",
|
245 |
+
" 6686,\n",
|
246 |
+
" 6687,\n",
|
247 |
+
" 6716,\n",
|
248 |
+
" 6717,\n",
|
249 |
+
" 6718,\n",
|
250 |
+
" 6719,\n",
|
251 |
+
" 6720,\n",
|
252 |
+
" 6721,\n",
|
253 |
+
" 6722,\n",
|
254 |
+
" 6723,\n",
|
255 |
+
" 6724,\n",
|
256 |
+
" 6725,\n",
|
257 |
+
" 6726,\n",
|
258 |
+
" 6727,\n",
|
259 |
+
" 6728,\n",
|
260 |
+
" 6729,\n",
|
261 |
+
" 6730,\n",
|
262 |
+
" 6731,\n",
|
263 |
+
" 6732,\n",
|
264 |
+
" 6733,\n",
|
265 |
+
" 6734,\n",
|
266 |
+
" 6735,\n",
|
267 |
+
" 6736,\n",
|
268 |
+
" 6737,\n",
|
269 |
+
" 6738,\n",
|
270 |
+
" 6739,\n",
|
271 |
+
" 6740,\n",
|
272 |
+
" 6741,\n",
|
273 |
+
" 6742,\n",
|
274 |
+
" 6743,\n",
|
275 |
+
" 6750,\n",
|
276 |
+
" 6751,\n",
|
277 |
+
" 6752,\n",
|
278 |
+
" 6753,\n",
|
279 |
+
" 6754,\n",
|
280 |
+
" 6755,\n",
|
281 |
+
" 6756,\n",
|
282 |
+
" 6757,\n",
|
283 |
+
" 6758,\n",
|
284 |
+
" 6759,\n",
|
285 |
+
" 6760,\n",
|
286 |
+
" 6761,\n",
|
287 |
+
" 6762,\n",
|
288 |
+
" 6763,\n",
|
289 |
+
" 6764,\n",
|
290 |
+
" 6765,\n",
|
291 |
+
" 6766,\n",
|
292 |
+
" 6767,\n",
|
293 |
+
"]\n",
|
294 |
+
"\n",
|
295 |
+
"# delete the bad samples\n",
|
296 |
+
"signals = np.delete(signals, indexes, 0)\n",
|
297 |
+
"labels = np.delete(labels, indexes, 0)\n",
|
298 |
+
"\n",
|
299 |
+
"signals = np.stack(\n",
|
300 |
+
" [\n",
|
301 |
+
" signals[:, 0:300], # ACC X\n",
|
302 |
+
" signals[:, 300:600], # ACC Y\n",
|
303 |
+
" signals[:, 600:900], # ACC Z\n",
|
304 |
+
" signals[:, 900:1200], # GYRO X\n",
|
305 |
+
" signals[:, 1200:1500], # GYRO Y\n",
|
306 |
+
" signals[:, 1500:1800], # GYRO Z\n",
|
307 |
+
" ],\n",
|
308 |
+
" axis=-1,\n",
|
309 |
+
")\n",
|
310 |
+
"labels = np.repeat(labels.reshape(labels.shape[0], 1), signals.shape[1], axis=1)\n",
|
311 |
+
"\n",
|
312 |
+
"print(\"Mean:\", np.mean(signals, axis=(0, 1)))\n",
|
313 |
+
"print(\"Std:\", np.std(signals, axis=(0, 1)))\n",
|
314 |
+
"print(\"Max:\", np.max(signals, axis=(0, 1)))\n",
|
315 |
+
"print(\"Min:\", np.min(signals, axis=(0, 1)), \"\\n\")\n",
|
316 |
+
"\n",
|
317 |
+
"print(signals.shape, labels.shape, \"\\n\")\n"
|
318 |
+
]
|
319 |
+
},
|
320 |
+
{
|
321 |
+
"cell_type": "code",
|
322 |
+
"execution_count": 12,
|
323 |
+
"metadata": {},
|
324 |
+
"outputs": [
|
325 |
+
{
|
326 |
+
"name": "stdout",
|
327 |
+
"output_type": "stream",
|
328 |
+
"text": [
|
329 |
+
"Working on 0 sample\n",
|
330 |
+
"[0]\n",
|
331 |
+
"[3] \n",
|
332 |
+
"\n",
|
333 |
+
"(1886,)\n",
|
334 |
+
"(1866,) \n",
|
335 |
+
"\n",
|
336 |
+
"(1866, 600, 6)\n",
|
337 |
+
"(1866, 600) \n",
|
338 |
+
"\n",
|
339 |
+
"(1866, 300, 6)\n",
|
340 |
+
"(1866, 300) \n",
|
341 |
+
"\n",
|
342 |
+
"Working on 1 sample\n",
|
343 |
+
"[0]\n",
|
344 |
+
"[7] \n",
|
345 |
+
"\n",
|
346 |
+
"(1886,)\n",
|
347 |
+
"(1333,) \n",
|
348 |
+
"\n",
|
349 |
+
"(1333, 600, 6)\n",
|
350 |
+
"(1333, 600) \n",
|
351 |
+
"\n",
|
352 |
+
"(1333, 300, 6)\n",
|
353 |
+
"(1333, 300) \n",
|
354 |
+
"\n",
|
355 |
+
"Working on 2 sample\n",
|
356 |
+
"[0]\n",
|
357 |
+
"[8] \n",
|
358 |
+
"\n",
|
359 |
+
"(1886,)\n",
|
360 |
+
"(666,) \n",
|
361 |
+
"\n",
|
362 |
+
"(666, 600, 6)\n",
|
363 |
+
"(666, 600) \n",
|
364 |
+
"\n",
|
365 |
+
"(666, 300, 6)\n",
|
366 |
+
"(666, 300) \n",
|
367 |
+
"\n",
|
368 |
+
"Working on 3 sample\n",
|
369 |
+
"[0]\n",
|
370 |
+
"[11] \n",
|
371 |
+
"\n",
|
372 |
+
"(1886,)\n",
|
373 |
+
"(882,) \n",
|
374 |
+
"\n",
|
375 |
+
"(882, 600, 6)\n",
|
376 |
+
"(882, 600) \n",
|
377 |
+
"\n",
|
378 |
+
"(882, 300, 6)\n",
|
379 |
+
"(882, 300) \n",
|
380 |
+
"\n",
|
381 |
+
"Working on 4 sample\n",
|
382 |
+
"[0]\n",
|
383 |
+
"[12] \n",
|
384 |
+
"\n",
|
385 |
+
"(1886,)\n",
|
386 |
+
"(317,) \n",
|
387 |
+
"\n",
|
388 |
+
"(317, 600, 6)\n",
|
389 |
+
"(317, 600) \n",
|
390 |
+
"\n",
|
391 |
+
"(317, 300, 6)\n",
|
392 |
+
"(317, 300) \n",
|
393 |
+
"\n",
|
394 |
+
"Working on 5 sample\n",
|
395 |
+
"[0]\n",
|
396 |
+
"[13] \n",
|
397 |
+
"\n",
|
398 |
+
"(1886,)\n",
|
399 |
+
"(259,) \n",
|
400 |
+
"\n",
|
401 |
+
"(259, 600, 6)\n",
|
402 |
+
"(259, 600) \n",
|
403 |
+
"\n",
|
404 |
+
"(259, 300, 6)\n",
|
405 |
+
"(259, 300) \n",
|
406 |
+
"\n",
|
407 |
+
"Working on 6 sample\n",
|
408 |
+
"[0]\n",
|
409 |
+
"[14] \n",
|
410 |
+
"\n",
|
411 |
+
"(1886,)\n",
|
412 |
+
"(500,) \n",
|
413 |
+
"\n",
|
414 |
+
"(500, 600, 6)\n",
|
415 |
+
"(500, 600) \n",
|
416 |
+
"\n",
|
417 |
+
"(500, 300, 6)\n",
|
418 |
+
"(500, 300) \n",
|
419 |
+
"\n",
|
420 |
+
"Working on 7 sample\n",
|
421 |
+
"[0]\n",
|
422 |
+
"[15] \n",
|
423 |
+
"\n",
|
424 |
+
"(1886,)\n",
|
425 |
+
"(798,) \n",
|
426 |
+
"\n",
|
427 |
+
"(798, 600, 6)\n",
|
428 |
+
"(798, 600) \n",
|
429 |
+
"\n",
|
430 |
+
"(798, 300, 6)\n",
|
431 |
+
"(798, 300) \n",
|
432 |
+
"\n",
|
433 |
+
"Working on 8 sample\n",
|
434 |
+
"[0]\n",
|
435 |
+
"[16] \n",
|
436 |
+
"\n",
|
437 |
+
"(1886,)\n",
|
438 |
+
"(781,) \n",
|
439 |
+
"\n",
|
440 |
+
"(781, 600, 6)\n",
|
441 |
+
"(781, 600) \n",
|
442 |
+
"\n",
|
443 |
+
"(781, 300, 6)\n",
|
444 |
+
"(781, 300) \n",
|
445 |
+
"\n",
|
446 |
+
"Working on 9 sample\n",
|
447 |
+
"[0]\n",
|
448 |
+
"[17] \n",
|
449 |
+
"\n",
|
450 |
+
"(1886,)\n",
|
451 |
+
"(458,) \n",
|
452 |
+
"\n",
|
453 |
+
"(458, 600, 6)\n",
|
454 |
+
"(458, 600) \n",
|
455 |
+
"\n",
|
456 |
+
"(458, 300, 6)\n",
|
457 |
+
"(458, 300) \n",
|
458 |
+
"\n",
|
459 |
+
"Working on 10 sample\n",
|
460 |
+
"[1]\n",
|
461 |
+
"[2] \n",
|
462 |
+
"\n",
|
463 |
+
"(1874,)\n",
|
464 |
+
"(1797,) \n",
|
465 |
+
"\n",
|
466 |
+
"(1797, 600, 6)\n",
|
467 |
+
"(1797, 600) \n",
|
468 |
+
"\n",
|
469 |
+
"(1797, 300, 6)\n",
|
470 |
+
"(1797, 300) \n",
|
471 |
+
"\n",
|
472 |
+
"Working on 11 sample\n",
|
473 |
+
"[2]\n",
|
474 |
+
"[1] \n",
|
475 |
+
"\n",
|
476 |
+
"(1797,)\n",
|
477 |
+
"(1874,) \n",
|
478 |
+
"\n",
|
479 |
+
"(1797, 600, 6)\n",
|
480 |
+
"(1797, 600) \n",
|
481 |
+
"\n",
|
482 |
+
"(1797, 300, 6)\n",
|
483 |
+
"(1797, 300) \n",
|
484 |
+
"\n",
|
485 |
+
"Working on 12 sample\n",
|
486 |
+
"[3]\n",
|
487 |
+
"[0] \n",
|
488 |
+
"\n",
|
489 |
+
"(1866,)\n",
|
490 |
+
"(1886,) \n",
|
491 |
+
"\n",
|
492 |
+
"(1866, 600, 6)\n",
|
493 |
+
"(1866, 600) \n",
|
494 |
+
"\n",
|
495 |
+
"(1866, 300, 6)\n",
|
496 |
+
"(1866, 300) \n",
|
497 |
+
"\n",
|
498 |
+
"Working on 13 sample\n",
|
499 |
+
"[3]\n",
|
500 |
+
"[7] \n",
|
501 |
+
"\n",
|
502 |
+
"(1866,)\n",
|
503 |
+
"(1333,) \n",
|
504 |
+
"\n",
|
505 |
+
"(1333, 600, 6)\n",
|
506 |
+
"(1333, 600) \n",
|
507 |
+
"\n",
|
508 |
+
"(1333, 300, 6)\n",
|
509 |
+
"(1333, 300) \n",
|
510 |
+
"\n",
|
511 |
+
"Working on 14 sample\n",
|
512 |
+
"[3]\n",
|
513 |
+
"[8] \n",
|
514 |
+
"\n",
|
515 |
+
"(1866,)\n",
|
516 |
+
"(666,) \n",
|
517 |
+
"\n",
|
518 |
+
"(666, 600, 6)\n",
|
519 |
+
"(666, 600) \n",
|
520 |
+
"\n",
|
521 |
+
"(666, 300, 6)\n",
|
522 |
+
"(666, 300) \n",
|
523 |
+
"\n",
|
524 |
+
"Working on 15 sample\n",
|
525 |
+
"[3]\n",
|
526 |
+
"[11] \n",
|
527 |
+
"\n",
|
528 |
+
"(1866,)\n",
|
529 |
+
"(882,) \n",
|
530 |
+
"\n",
|
531 |
+
"(882, 600, 6)\n",
|
532 |
+
"(882, 600) \n",
|
533 |
+
"\n",
|
534 |
+
"(882, 300, 6)\n",
|
535 |
+
"(882, 300) \n",
|
536 |
+
"\n",
|
537 |
+
"Working on 16 sample\n",
|
538 |
+
"[3]\n",
|
539 |
+
"[12] \n",
|
540 |
+
"\n",
|
541 |
+
"(1866,)\n",
|
542 |
+
"(317,) \n",
|
543 |
+
"\n",
|
544 |
+
"(317, 600, 6)\n",
|
545 |
+
"(317, 600) \n",
|
546 |
+
"\n",
|
547 |
+
"(317, 300, 6)\n",
|
548 |
+
"(317, 300) \n",
|
549 |
+
"\n",
|
550 |
+
"Working on 17 sample\n",
|
551 |
+
"[3]\n",
|
552 |
+
"[13] \n",
|
553 |
+
"\n",
|
554 |
+
"(1866,)\n",
|
555 |
+
"(259,) \n",
|
556 |
+
"\n",
|
557 |
+
"(259, 600, 6)\n",
|
558 |
+
"(259, 600) \n",
|
559 |
+
"\n",
|
560 |
+
"(259, 300, 6)\n",
|
561 |
+
"(259, 300) \n",
|
562 |
+
"\n",
|
563 |
+
"Working on 18 sample\n",
|
564 |
+
"[3]\n",
|
565 |
+
"[14] \n",
|
566 |
+
"\n",
|
567 |
+
"(1866,)\n",
|
568 |
+
"(500,) \n",
|
569 |
+
"\n",
|
570 |
+
"(500, 600, 6)\n",
|
571 |
+
"(500, 600) \n",
|
572 |
+
"\n",
|
573 |
+
"(500, 300, 6)\n",
|
574 |
+
"(500, 300) \n",
|
575 |
+
"\n",
|
576 |
+
"Working on 19 sample\n",
|
577 |
+
"[3]\n",
|
578 |
+
"[15] \n",
|
579 |
+
"\n",
|
580 |
+
"(1866,)\n",
|
581 |
+
"(798,) \n",
|
582 |
+
"\n",
|
583 |
+
"(798, 600, 6)\n",
|
584 |
+
"(798, 600) \n",
|
585 |
+
"\n",
|
586 |
+
"(798, 300, 6)\n",
|
587 |
+
"(798, 300) \n",
|
588 |
+
"\n",
|
589 |
+
"Working on 20 sample\n",
|
590 |
+
"[3]\n",
|
591 |
+
"[16] \n",
|
592 |
+
"\n",
|
593 |
+
"(1866,)\n",
|
594 |
+
"(781,) \n",
|
595 |
+
"\n",
|
596 |
+
"(781, 600, 6)\n",
|
597 |
+
"(781, 600) \n",
|
598 |
+
"\n",
|
599 |
+
"(781, 300, 6)\n",
|
600 |
+
"(781, 300) \n",
|
601 |
+
"\n",
|
602 |
+
"Working on 21 sample\n",
|
603 |
+
"[3]\n",
|
604 |
+
"[17] \n",
|
605 |
+
"\n",
|
606 |
+
"(1866,)\n",
|
607 |
+
"(458,) \n",
|
608 |
+
"\n",
|
609 |
+
"(458, 600, 6)\n",
|
610 |
+
"(458, 600) \n",
|
611 |
+
"\n",
|
612 |
+
"(458, 300, 6)\n",
|
613 |
+
"(458, 300) \n",
|
614 |
+
"\n",
|
615 |
+
"Working on 22 sample\n",
|
616 |
+
"[5]\n",
|
617 |
+
"[10] \n",
|
618 |
+
"\n",
|
619 |
+
"(1813,)\n",
|
620 |
+
"(1005,) \n",
|
621 |
+
"\n",
|
622 |
+
"(1005, 600, 6)\n",
|
623 |
+
"(1005, 600) \n",
|
624 |
+
"\n",
|
625 |
+
"(1005, 300, 6)\n",
|
626 |
+
"(1005, 300) \n",
|
627 |
+
"\n",
|
628 |
+
"Working on 23 sample\n",
|
629 |
+
"[7]\n",
|
630 |
+
"[0] \n",
|
631 |
+
"\n",
|
632 |
+
"(1333,)\n",
|
633 |
+
"(1886,) \n",
|
634 |
+
"\n",
|
635 |
+
"(1333, 600, 6)\n",
|
636 |
+
"(1333, 600) \n",
|
637 |
+
"\n",
|
638 |
+
"(1333, 300, 6)\n",
|
639 |
+
"(1333, 300) \n",
|
640 |
+
"\n",
|
641 |
+
"Working on 24 sample\n",
|
642 |
+
"[7]\n",
|
643 |
+
"[3] \n",
|
644 |
+
"\n",
|
645 |
+
"(1333,)\n",
|
646 |
+
"(1866,) \n",
|
647 |
+
"\n",
|
648 |
+
"(1333, 600, 6)\n",
|
649 |
+
"(1333, 600) \n",
|
650 |
+
"\n",
|
651 |
+
"(1333, 300, 6)\n",
|
652 |
+
"(1333, 300) \n",
|
653 |
+
"\n",
|
654 |
+
"Working on 25 sample\n",
|
655 |
+
"[7]\n",
|
656 |
+
"[8] \n",
|
657 |
+
"\n",
|
658 |
+
"(1333,)\n",
|
659 |
+
"(666,) \n",
|
660 |
+
"\n",
|
661 |
+
"(666, 600, 6)\n",
|
662 |
+
"(666, 600) \n",
|
663 |
+
"\n",
|
664 |
+
"(666, 300, 6)\n",
|
665 |
+
"(666, 300) \n",
|
666 |
+
"\n",
|
667 |
+
"Working on 26 sample\n",
|
668 |
+
"[7]\n",
|
669 |
+
"[11] \n",
|
670 |
+
"\n",
|
671 |
+
"(1333,)\n",
|
672 |
+
"(882,) \n",
|
673 |
+
"\n",
|
674 |
+
"(882, 600, 6)\n",
|
675 |
+
"(882, 600) \n",
|
676 |
+
"\n",
|
677 |
+
"(882, 300, 6)\n",
|
678 |
+
"(882, 300) \n",
|
679 |
+
"\n",
|
680 |
+
"Working on 27 sample\n",
|
681 |
+
"[7]\n",
|
682 |
+
"[12] \n",
|
683 |
+
"\n",
|
684 |
+
"(1333,)\n",
|
685 |
+
"(317,) \n",
|
686 |
+
"\n",
|
687 |
+
"(317, 600, 6)\n",
|
688 |
+
"(317, 600) \n",
|
689 |
+
"\n",
|
690 |
+
"(317, 300, 6)\n",
|
691 |
+
"(317, 300) \n",
|
692 |
+
"\n",
|
693 |
+
"Working on 28 sample\n",
|
694 |
+
"[7]\n",
|
695 |
+
"[13] \n",
|
696 |
+
"\n",
|
697 |
+
"(1333,)\n",
|
698 |
+
"(259,) \n",
|
699 |
+
"\n",
|
700 |
+
"(259, 600, 6)\n",
|
701 |
+
"(259, 600) \n",
|
702 |
+
"\n",
|
703 |
+
"(259, 300, 6)\n",
|
704 |
+
"(259, 300) \n",
|
705 |
+
"\n",
|
706 |
+
"Working on 29 sample\n",
|
707 |
+
"[7]\n",
|
708 |
+
"[14] \n",
|
709 |
+
"\n",
|
710 |
+
"(1333,)\n",
|
711 |
+
"(500,) \n",
|
712 |
+
"\n",
|
713 |
+
"(500, 600, 6)\n",
|
714 |
+
"(500, 600) \n",
|
715 |
+
"\n",
|
716 |
+
"(500, 300, 6)\n",
|
717 |
+
"(500, 300) \n",
|
718 |
+
"\n",
|
719 |
+
"Working on 30 sample\n",
|
720 |
+
"[7]\n",
|
721 |
+
"[15] \n",
|
722 |
+
"\n",
|
723 |
+
"(1333,)\n",
|
724 |
+
"(798,) \n",
|
725 |
+
"\n",
|
726 |
+
"(798, 600, 6)\n",
|
727 |
+
"(798, 600) \n",
|
728 |
+
"\n",
|
729 |
+
"(798, 300, 6)\n",
|
730 |
+
"(798, 300) \n",
|
731 |
+
"\n",
|
732 |
+
"Working on 31 sample\n",
|
733 |
+
"[7]\n",
|
734 |
+
"[16] \n",
|
735 |
+
"\n",
|
736 |
+
"(1333,)\n",
|
737 |
+
"(781,) \n",
|
738 |
+
"\n",
|
739 |
+
"(781, 600, 6)\n",
|
740 |
+
"(781, 600) \n",
|
741 |
+
"\n",
|
742 |
+
"(781, 300, 6)\n",
|
743 |
+
"(781, 300) \n",
|
744 |
+
"\n",
|
745 |
+
"Working on 32 sample\n",
|
746 |
+
"[7]\n",
|
747 |
+
"[17] \n",
|
748 |
+
"\n",
|
749 |
+
"(1333,)\n",
|
750 |
+
"(458,) \n",
|
751 |
+
"\n",
|
752 |
+
"(458, 600, 6)\n",
|
753 |
+
"(458, 600) \n",
|
754 |
+
"\n",
|
755 |
+
"(458, 300, 6)\n",
|
756 |
+
"(458, 300) \n",
|
757 |
+
"\n",
|
758 |
+
"Working on 33 sample\n",
|
759 |
+
"[8]\n",
|
760 |
+
"[0] \n",
|
761 |
+
"\n",
|
762 |
+
"(666,)\n",
|
763 |
+
"(1886,) \n",
|
764 |
+
"\n",
|
765 |
+
"(666, 600, 6)\n",
|
766 |
+
"(666, 600) \n",
|
767 |
+
"\n",
|
768 |
+
"(666, 300, 6)\n",
|
769 |
+
"(666, 300) \n",
|
770 |
+
"\n",
|
771 |
+
"Working on 34 sample\n",
|
772 |
+
"[8]\n",
|
773 |
+
"[3] \n",
|
774 |
+
"\n",
|
775 |
+
"(666,)\n",
|
776 |
+
"(1866,) \n",
|
777 |
+
"\n",
|
778 |
+
"(666, 600, 6)\n",
|
779 |
+
"(666, 600) \n",
|
780 |
+
"\n",
|
781 |
+
"(666, 300, 6)\n",
|
782 |
+
"(666, 300) \n",
|
783 |
+
"\n",
|
784 |
+
"Working on 35 sample\n",
|
785 |
+
"[8]\n",
|
786 |
+
"[7] \n",
|
787 |
+
"\n",
|
788 |
+
"(666,)\n",
|
789 |
+
"(1333,) \n",
|
790 |
+
"\n",
|
791 |
+
"(666, 600, 6)\n",
|
792 |
+
"(666, 600) \n",
|
793 |
+
"\n",
|
794 |
+
"(666, 300, 6)\n",
|
795 |
+
"(666, 300) \n",
|
796 |
+
"\n",
|
797 |
+
"Working on 36 sample\n",
|
798 |
+
"[8]\n",
|
799 |
+
"[11] \n",
|
800 |
+
"\n",
|
801 |
+
"(666,)\n",
|
802 |
+
"(882,) \n",
|
803 |
+
"\n",
|
804 |
+
"(666, 600, 6)\n",
|
805 |
+
"(666, 600) \n",
|
806 |
+
"\n",
|
807 |
+
"(666, 300, 6)\n",
|
808 |
+
"(666, 300) \n",
|
809 |
+
"\n",
|
810 |
+
"Working on 37 sample\n",
|
811 |
+
"[8]\n",
|
812 |
+
"[12] \n",
|
813 |
+
"\n",
|
814 |
+
"(666,)\n",
|
815 |
+
"(317,) \n",
|
816 |
+
"\n",
|
817 |
+
"(317, 600, 6)\n",
|
818 |
+
"(317, 600) \n",
|
819 |
+
"\n",
|
820 |
+
"(317, 300, 6)\n",
|
821 |
+
"(317, 300) \n",
|
822 |
+
"\n",
|
823 |
+
"Working on 38 sample\n",
|
824 |
+
"[8]\n",
|
825 |
+
"[13] \n",
|
826 |
+
"\n",
|
827 |
+
"(666,)\n",
|
828 |
+
"(259,) \n",
|
829 |
+
"\n",
|
830 |
+
"(259, 600, 6)\n",
|
831 |
+
"(259, 600) \n",
|
832 |
+
"\n",
|
833 |
+
"(259, 300, 6)\n",
|
834 |
+
"(259, 300) \n",
|
835 |
+
"\n",
|
836 |
+
"Working on 39 sample\n",
|
837 |
+
"[8]\n",
|
838 |
+
"[14] \n",
|
839 |
+
"\n",
|
840 |
+
"(666,)\n",
|
841 |
+
"(500,) \n",
|
842 |
+
"\n",
|
843 |
+
"(500, 600, 6)\n",
|
844 |
+
"(500, 600) \n",
|
845 |
+
"\n",
|
846 |
+
"(500, 300, 6)\n",
|
847 |
+
"(500, 300) \n",
|
848 |
+
"\n",
|
849 |
+
"Working on 40 sample\n",
|
850 |
+
"[8]\n",
|
851 |
+
"[15] \n",
|
852 |
+
"\n",
|
853 |
+
"(666,)\n",
|
854 |
+
"(798,) \n",
|
855 |
+
"\n",
|
856 |
+
"(666, 600, 6)\n",
|
857 |
+
"(666, 600) \n",
|
858 |
+
"\n",
|
859 |
+
"(666, 300, 6)\n",
|
860 |
+
"(666, 300) \n",
|
861 |
+
"\n",
|
862 |
+
"Working on 41 sample\n",
|
863 |
+
"[8]\n",
|
864 |
+
"[16] \n",
|
865 |
+
"\n",
|
866 |
+
"(666,)\n",
|
867 |
+
"(781,) \n",
|
868 |
+
"\n",
|
869 |
+
"(666, 600, 6)\n",
|
870 |
+
"(666, 600) \n",
|
871 |
+
"\n",
|
872 |
+
"(666, 300, 6)\n",
|
873 |
+
"(666, 300) \n",
|
874 |
+
"\n",
|
875 |
+
"Working on 42 sample\n",
|
876 |
+
"[8]\n",
|
877 |
+
"[17] \n",
|
878 |
+
"\n",
|
879 |
+
"(666,)\n",
|
880 |
+
"(458,) \n",
|
881 |
+
"\n",
|
882 |
+
"(458, 600, 6)\n",
|
883 |
+
"(458, 600) \n",
|
884 |
+
"\n",
|
885 |
+
"(458, 300, 6)\n",
|
886 |
+
"(458, 300) \n",
|
887 |
+
"\n",
|
888 |
+
"Working on 43 sample\n",
|
889 |
+
"[10]\n",
|
890 |
+
"[5] \n",
|
891 |
+
"\n",
|
892 |
+
"(1005,)\n",
|
893 |
+
"(1813,) \n",
|
894 |
+
"\n",
|
895 |
+
"(1005, 600, 6)\n",
|
896 |
+
"(1005, 600) \n",
|
897 |
+
"\n",
|
898 |
+
"(1005, 300, 6)\n",
|
899 |
+
"(1005, 300) \n",
|
900 |
+
"\n",
|
901 |
+
"Working on 44 sample\n",
|
902 |
+
"[11]\n",
|
903 |
+
"[0] \n",
|
904 |
+
"\n",
|
905 |
+
"(882,)\n",
|
906 |
+
"(1886,) \n",
|
907 |
+
"\n",
|
908 |
+
"(882, 600, 6)\n",
|
909 |
+
"(882, 600) \n",
|
910 |
+
"\n",
|
911 |
+
"(882, 300, 6)\n",
|
912 |
+
"(882, 300) \n",
|
913 |
+
"\n",
|
914 |
+
"Working on 45 sample\n",
|
915 |
+
"[11]\n",
|
916 |
+
"[3] \n",
|
917 |
+
"\n",
|
918 |
+
"(882,)\n",
|
919 |
+
"(1866,) \n",
|
920 |
+
"\n",
|
921 |
+
"(882, 600, 6)\n",
|
922 |
+
"(882, 600) \n",
|
923 |
+
"\n",
|
924 |
+
"(882, 300, 6)\n",
|
925 |
+
"(882, 300) \n",
|
926 |
+
"\n",
|
927 |
+
"Working on 46 sample\n",
|
928 |
+
"[11]\n",
|
929 |
+
"[7] \n",
|
930 |
+
"\n",
|
931 |
+
"(882,)\n",
|
932 |
+
"(1333,) \n",
|
933 |
+
"\n",
|
934 |
+
"(882, 600, 6)\n",
|
935 |
+
"(882, 600) \n",
|
936 |
+
"\n",
|
937 |
+
"(882, 300, 6)\n",
|
938 |
+
"(882, 300) \n",
|
939 |
+
"\n",
|
940 |
+
"Working on 47 sample\n",
|
941 |
+
"[11]\n",
|
942 |
+
"[8] \n",
|
943 |
+
"\n",
|
944 |
+
"(882,)\n",
|
945 |
+
"(666,) \n",
|
946 |
+
"\n",
|
947 |
+
"(666, 600, 6)\n",
|
948 |
+
"(666, 600) \n",
|
949 |
+
"\n",
|
950 |
+
"(666, 300, 6)\n",
|
951 |
+
"(666, 300) \n",
|
952 |
+
"\n",
|
953 |
+
"Working on 48 sample\n",
|
954 |
+
"[11]\n",
|
955 |
+
"[13] \n",
|
956 |
+
"\n",
|
957 |
+
"(882,)\n",
|
958 |
+
"(259,) \n",
|
959 |
+
"\n",
|
960 |
+
"(259, 600, 6)\n",
|
961 |
+
"(259, 600) \n",
|
962 |
+
"\n",
|
963 |
+
"(259, 300, 6)\n",
|
964 |
+
"(259, 300) \n",
|
965 |
+
"\n",
|
966 |
+
"Working on 49 sample\n",
|
967 |
+
"[11]\n",
|
968 |
+
"[14] \n",
|
969 |
+
"\n",
|
970 |
+
"(882,)\n",
|
971 |
+
"(500,) \n",
|
972 |
+
"\n",
|
973 |
+
"(500, 600, 6)\n",
|
974 |
+
"(500, 600) \n",
|
975 |
+
"\n",
|
976 |
+
"(500, 300, 6)\n",
|
977 |
+
"(500, 300) \n",
|
978 |
+
"\n",
|
979 |
+
"Working on 50 sample\n",
|
980 |
+
"[11]\n",
|
981 |
+
"[15] \n",
|
982 |
+
"\n",
|
983 |
+
"(882,)\n",
|
984 |
+
"(798,) \n",
|
985 |
+
"\n",
|
986 |
+
"(798, 600, 6)\n",
|
987 |
+
"(798, 600) \n",
|
988 |
+
"\n",
|
989 |
+
"(798, 300, 6)\n",
|
990 |
+
"(798, 300) \n",
|
991 |
+
"\n",
|
992 |
+
"Working on 51 sample\n",
|
993 |
+
"[11]\n",
|
994 |
+
"[16] \n",
|
995 |
+
"\n",
|
996 |
+
"(882,)\n",
|
997 |
+
"(781,) \n",
|
998 |
+
"\n",
|
999 |
+
"(781, 600, 6)\n",
|
1000 |
+
"(781, 600) \n",
|
1001 |
+
"\n",
|
1002 |
+
"(781, 300, 6)\n",
|
1003 |
+
"(781, 300) \n",
|
1004 |
+
"\n",
|
1005 |
+
"Working on 52 sample\n",
|
1006 |
+
"[11]\n",
|
1007 |
+
"[17] \n",
|
1008 |
+
"\n",
|
1009 |
+
"(882,)\n",
|
1010 |
+
"(458,) \n",
|
1011 |
+
"\n",
|
1012 |
+
"(458, 600, 6)\n",
|
1013 |
+
"(458, 600) \n",
|
1014 |
+
"\n",
|
1015 |
+
"(458, 300, 6)\n",
|
1016 |
+
"(458, 300) \n",
|
1017 |
+
"\n",
|
1018 |
+
"Working on 53 sample\n",
|
1019 |
+
"[12]\n",
|
1020 |
+
"[0] \n",
|
1021 |
+
"\n",
|
1022 |
+
"(317,)\n",
|
1023 |
+
"(1886,) \n",
|
1024 |
+
"\n",
|
1025 |
+
"(317, 600, 6)\n",
|
1026 |
+
"(317, 600) \n",
|
1027 |
+
"\n",
|
1028 |
+
"(317, 300, 6)\n",
|
1029 |
+
"(317, 300) \n",
|
1030 |
+
"\n",
|
1031 |
+
"Working on 54 sample\n",
|
1032 |
+
"[12]\n",
|
1033 |
+
"[3] \n",
|
1034 |
+
"\n",
|
1035 |
+
"(317,)\n",
|
1036 |
+
"(1866,) \n",
|
1037 |
+
"\n",
|
1038 |
+
"(317, 600, 6)\n",
|
1039 |
+
"(317, 600) \n",
|
1040 |
+
"\n",
|
1041 |
+
"(317, 300, 6)\n",
|
1042 |
+
"(317, 300) \n",
|
1043 |
+
"\n",
|
1044 |
+
"Working on 55 sample\n",
|
1045 |
+
"[12]\n",
|
1046 |
+
"[7] \n",
|
1047 |
+
"\n",
|
1048 |
+
"(317,)\n",
|
1049 |
+
"(1333,) \n",
|
1050 |
+
"\n",
|
1051 |
+
"(317, 600, 6)\n",
|
1052 |
+
"(317, 600) \n",
|
1053 |
+
"\n",
|
1054 |
+
"(317, 300, 6)\n",
|
1055 |
+
"(317, 300) \n",
|
1056 |
+
"\n",
|
1057 |
+
"Working on 56 sample\n",
|
1058 |
+
"[12]\n",
|
1059 |
+
"[8] \n",
|
1060 |
+
"\n",
|
1061 |
+
"(317,)\n",
|
1062 |
+
"(666,) \n",
|
1063 |
+
"\n",
|
1064 |
+
"(317, 600, 6)\n",
|
1065 |
+
"(317, 600) \n",
|
1066 |
+
"\n",
|
1067 |
+
"(317, 300, 6)\n",
|
1068 |
+
"(317, 300) \n",
|
1069 |
+
"\n",
|
1070 |
+
"Working on 57 sample\n",
|
1071 |
+
"[12]\n",
|
1072 |
+
"[17] \n",
|
1073 |
+
"\n",
|
1074 |
+
"(317,)\n",
|
1075 |
+
"(458,) \n",
|
1076 |
+
"\n",
|
1077 |
+
"(317, 600, 6)\n",
|
1078 |
+
"(317, 600) \n",
|
1079 |
+
"\n",
|
1080 |
+
"(317, 300, 6)\n",
|
1081 |
+
"(317, 300) \n",
|
1082 |
+
"\n",
|
1083 |
+
"Working on 58 sample\n",
|
1084 |
+
"[13]\n",
|
1085 |
+
"[0] \n",
|
1086 |
+
"\n",
|
1087 |
+
"(259,)\n",
|
1088 |
+
"(1886,) \n",
|
1089 |
+
"\n",
|
1090 |
+
"(259, 600, 6)\n",
|
1091 |
+
"(259, 600) \n",
|
1092 |
+
"\n",
|
1093 |
+
"(259, 300, 6)\n",
|
1094 |
+
"(259, 300) \n",
|
1095 |
+
"\n",
|
1096 |
+
"Working on 59 sample\n",
|
1097 |
+
"[13]\n",
|
1098 |
+
"[3] \n",
|
1099 |
+
"\n",
|
1100 |
+
"(259,)\n",
|
1101 |
+
"(1866,) \n",
|
1102 |
+
"\n",
|
1103 |
+
"(259, 600, 6)\n",
|
1104 |
+
"(259, 600) \n",
|
1105 |
+
"\n",
|
1106 |
+
"(259, 300, 6)\n",
|
1107 |
+
"(259, 300) \n",
|
1108 |
+
"\n",
|
1109 |
+
"Working on 60 sample\n",
|
1110 |
+
"[13]\n",
|
1111 |
+
"[7] \n",
|
1112 |
+
"\n",
|
1113 |
+
"(259,)\n",
|
1114 |
+
"(1333,) \n",
|
1115 |
+
"\n",
|
1116 |
+
"(259, 600, 6)\n",
|
1117 |
+
"(259, 600) \n",
|
1118 |
+
"\n",
|
1119 |
+
"(259, 300, 6)\n",
|
1120 |
+
"(259, 300) \n",
|
1121 |
+
"\n",
|
1122 |
+
"Working on 61 sample\n",
|
1123 |
+
"[13]\n",
|
1124 |
+
"[8] \n",
|
1125 |
+
"\n",
|
1126 |
+
"(259,)\n",
|
1127 |
+
"(666,) \n",
|
1128 |
+
"\n",
|
1129 |
+
"(259, 600, 6)\n",
|
1130 |
+
"(259, 600) \n",
|
1131 |
+
"\n",
|
1132 |
+
"(259, 300, 6)\n",
|
1133 |
+
"(259, 300) \n",
|
1134 |
+
"\n",
|
1135 |
+
"Working on 62 sample\n",
|
1136 |
+
"[13]\n",
|
1137 |
+
"[11] \n",
|
1138 |
+
"\n",
|
1139 |
+
"(259,)\n",
|
1140 |
+
"(882,) \n",
|
1141 |
+
"\n",
|
1142 |
+
"(259, 600, 6)\n",
|
1143 |
+
"(259, 600) \n",
|
1144 |
+
"\n",
|
1145 |
+
"(259, 300, 6)\n",
|
1146 |
+
"(259, 300) \n",
|
1147 |
+
"\n",
|
1148 |
+
"Working on 63 sample\n",
|
1149 |
+
"[13]\n",
|
1150 |
+
"[14] \n",
|
1151 |
+
"\n",
|
1152 |
+
"(259,)\n",
|
1153 |
+
"(500,) \n",
|
1154 |
+
"\n",
|
1155 |
+
"(259, 600, 6)\n",
|
1156 |
+
"(259, 600) \n",
|
1157 |
+
"\n",
|
1158 |
+
"(259, 300, 6)\n",
|
1159 |
+
"(259, 300) \n",
|
1160 |
+
"\n",
|
1161 |
+
"Working on 64 sample\n",
|
1162 |
+
"[13]\n",
|
1163 |
+
"[15] \n",
|
1164 |
+
"\n",
|
1165 |
+
"(259,)\n",
|
1166 |
+
"(798,) \n",
|
1167 |
+
"\n",
|
1168 |
+
"(259, 600, 6)\n",
|
1169 |
+
"(259, 600) \n",
|
1170 |
+
"\n",
|
1171 |
+
"(259, 300, 6)\n",
|
1172 |
+
"(259, 300) \n",
|
1173 |
+
"\n",
|
1174 |
+
"Working on 65 sample\n",
|
1175 |
+
"[13]\n",
|
1176 |
+
"[16] \n",
|
1177 |
+
"\n",
|
1178 |
+
"(259,)\n",
|
1179 |
+
"(781,) \n",
|
1180 |
+
"\n",
|
1181 |
+
"(259, 600, 6)\n",
|
1182 |
+
"(259, 600) \n",
|
1183 |
+
"\n",
|
1184 |
+
"(259, 300, 6)\n",
|
1185 |
+
"(259, 300) \n",
|
1186 |
+
"\n",
|
1187 |
+
"Working on 66 sample\n",
|
1188 |
+
"[13]\n",
|
1189 |
+
"[17] \n",
|
1190 |
+
"\n",
|
1191 |
+
"(259,)\n",
|
1192 |
+
"(458,) \n",
|
1193 |
+
"\n",
|
1194 |
+
"(259, 600, 6)\n",
|
1195 |
+
"(259, 600) \n",
|
1196 |
+
"\n",
|
1197 |
+
"(259, 300, 6)\n",
|
1198 |
+
"(259, 300) \n",
|
1199 |
+
"\n",
|
1200 |
+
"Working on 67 sample\n",
|
1201 |
+
"[14]\n",
|
1202 |
+
"[0] \n",
|
1203 |
+
"\n",
|
1204 |
+
"(500,)\n",
|
1205 |
+
"(1886,) \n",
|
1206 |
+
"\n",
|
1207 |
+
"(500, 600, 6)\n",
|
1208 |
+
"(500, 600) \n",
|
1209 |
+
"\n",
|
1210 |
+
"(500, 300, 6)\n",
|
1211 |
+
"(500, 300) \n",
|
1212 |
+
"\n",
|
1213 |
+
"Working on 68 sample\n",
|
1214 |
+
"[14]\n",
|
1215 |
+
"[3] \n",
|
1216 |
+
"\n",
|
1217 |
+
"(500,)\n",
|
1218 |
+
"(1866,) \n",
|
1219 |
+
"\n",
|
1220 |
+
"(500, 600, 6)\n",
|
1221 |
+
"(500, 600) \n",
|
1222 |
+
"\n",
|
1223 |
+
"(500, 300, 6)\n",
|
1224 |
+
"(500, 300) \n",
|
1225 |
+
"\n",
|
1226 |
+
"Working on 69 sample\n",
|
1227 |
+
"[14]\n",
|
1228 |
+
"[7] \n",
|
1229 |
+
"\n",
|
1230 |
+
"(500,)\n",
|
1231 |
+
"(1333,) \n",
|
1232 |
+
"\n",
|
1233 |
+
"(500, 600, 6)\n",
|
1234 |
+
"(500, 600) \n",
|
1235 |
+
"\n",
|
1236 |
+
"(500, 300, 6)\n",
|
1237 |
+
"(500, 300) \n",
|
1238 |
+
"\n",
|
1239 |
+
"Working on 70 sample\n",
|
1240 |
+
"[14]\n",
|
1241 |
+
"[8] \n",
|
1242 |
+
"\n",
|
1243 |
+
"(500,)\n",
|
1244 |
+
"(666,) \n",
|
1245 |
+
"\n",
|
1246 |
+
"(500, 600, 6)\n",
|
1247 |
+
"(500, 600) \n",
|
1248 |
+
"\n",
|
1249 |
+
"(500, 300, 6)\n",
|
1250 |
+
"(500, 300) \n",
|
1251 |
+
"\n",
|
1252 |
+
"Working on 71 sample\n",
|
1253 |
+
"[14]\n",
|
1254 |
+
"[11] \n",
|
1255 |
+
"\n",
|
1256 |
+
"(500,)\n",
|
1257 |
+
"(882,) \n",
|
1258 |
+
"\n",
|
1259 |
+
"(500, 600, 6)\n",
|
1260 |
+
"(500, 600) \n",
|
1261 |
+
"\n",
|
1262 |
+
"(500, 300, 6)\n",
|
1263 |
+
"(500, 300) \n",
|
1264 |
+
"\n",
|
1265 |
+
"Working on 72 sample\n",
|
1266 |
+
"[14]\n",
|
1267 |
+
"[13] \n",
|
1268 |
+
"\n",
|
1269 |
+
"(500,)\n",
|
1270 |
+
"(259,) \n",
|
1271 |
+
"\n",
|
1272 |
+
"(259, 600, 6)\n",
|
1273 |
+
"(259, 600) \n",
|
1274 |
+
"\n",
|
1275 |
+
"(259, 300, 6)\n",
|
1276 |
+
"(259, 300) \n",
|
1277 |
+
"\n",
|
1278 |
+
"Working on 73 sample\n",
|
1279 |
+
"[14]\n",
|
1280 |
+
"[15] \n",
|
1281 |
+
"\n",
|
1282 |
+
"(500,)\n",
|
1283 |
+
"(798,) \n",
|
1284 |
+
"\n",
|
1285 |
+
"(500, 600, 6)\n",
|
1286 |
+
"(500, 600) \n",
|
1287 |
+
"\n",
|
1288 |
+
"(500, 300, 6)\n",
|
1289 |
+
"(500, 300) \n",
|
1290 |
+
"\n",
|
1291 |
+
"Working on 74 sample\n",
|
1292 |
+
"[14]\n",
|
1293 |
+
"[16] \n",
|
1294 |
+
"\n",
|
1295 |
+
"(500,)\n",
|
1296 |
+
"(781,) \n",
|
1297 |
+
"\n",
|
1298 |
+
"(500, 600, 6)\n",
|
1299 |
+
"(500, 600) \n",
|
1300 |
+
"\n",
|
1301 |
+
"(500, 300, 6)\n",
|
1302 |
+
"(500, 300) \n",
|
1303 |
+
"\n",
|
1304 |
+
"Working on 75 sample\n",
|
1305 |
+
"[14]\n",
|
1306 |
+
"[17] \n",
|
1307 |
+
"\n",
|
1308 |
+
"(500,)\n",
|
1309 |
+
"(458,) \n",
|
1310 |
+
"\n",
|
1311 |
+
"(458, 600, 6)\n",
|
1312 |
+
"(458, 600) \n",
|
1313 |
+
"\n",
|
1314 |
+
"(458, 300, 6)\n",
|
1315 |
+
"(458, 300) \n",
|
1316 |
+
"\n",
|
1317 |
+
"Working on 76 sample\n",
|
1318 |
+
"[15]\n",
|
1319 |
+
"[0] \n",
|
1320 |
+
"\n",
|
1321 |
+
"(798,)\n",
|
1322 |
+
"(1886,) \n",
|
1323 |
+
"\n",
|
1324 |
+
"(798, 600, 6)\n",
|
1325 |
+
"(798, 600) \n",
|
1326 |
+
"\n",
|
1327 |
+
"(798, 300, 6)\n",
|
1328 |
+
"(798, 300) \n",
|
1329 |
+
"\n",
|
1330 |
+
"Working on 77 sample\n",
|
1331 |
+
"[15]\n",
|
1332 |
+
"[3] \n",
|
1333 |
+
"\n",
|
1334 |
+
"(798,)\n",
|
1335 |
+
"(1866,) \n",
|
1336 |
+
"\n",
|
1337 |
+
"(798, 600, 6)\n",
|
1338 |
+
"(798, 600) \n",
|
1339 |
+
"\n",
|
1340 |
+
"(798, 300, 6)\n",
|
1341 |
+
"(798, 300) \n",
|
1342 |
+
"\n",
|
1343 |
+
"Working on 78 sample\n",
|
1344 |
+
"[15]\n",
|
1345 |
+
"[7] \n",
|
1346 |
+
"\n",
|
1347 |
+
"(798,)\n",
|
1348 |
+
"(1333,) \n",
|
1349 |
+
"\n",
|
1350 |
+
"(798, 600, 6)\n",
|
1351 |
+
"(798, 600) \n",
|
1352 |
+
"\n",
|
1353 |
+
"(798, 300, 6)\n",
|
1354 |
+
"(798, 300) \n",
|
1355 |
+
"\n",
|
1356 |
+
"Working on 79 sample\n",
|
1357 |
+
"[15]\n",
|
1358 |
+
"[8] \n",
|
1359 |
+
"\n",
|
1360 |
+
"(798,)\n",
|
1361 |
+
"(666,) \n",
|
1362 |
+
"\n",
|
1363 |
+
"(666, 600, 6)\n",
|
1364 |
+
"(666, 600) \n",
|
1365 |
+
"\n",
|
1366 |
+
"(666, 300, 6)\n",
|
1367 |
+
"(666, 300) \n",
|
1368 |
+
"\n",
|
1369 |
+
"Working on 80 sample\n",
|
1370 |
+
"[15]\n",
|
1371 |
+
"[11] \n",
|
1372 |
+
"\n",
|
1373 |
+
"(798,)\n",
|
1374 |
+
"(882,) \n",
|
1375 |
+
"\n",
|
1376 |
+
"(798, 600, 6)\n",
|
1377 |
+
"(798, 600) \n",
|
1378 |
+
"\n",
|
1379 |
+
"(798, 300, 6)\n",
|
1380 |
+
"(798, 300) \n",
|
1381 |
+
"\n",
|
1382 |
+
"Working on 81 sample\n",
|
1383 |
+
"[15]\n",
|
1384 |
+
"[13] \n",
|
1385 |
+
"\n",
|
1386 |
+
"(798,)\n",
|
1387 |
+
"(259,) \n",
|
1388 |
+
"\n",
|
1389 |
+
"(259, 600, 6)\n",
|
1390 |
+
"(259, 600) \n",
|
1391 |
+
"\n",
|
1392 |
+
"(259, 300, 6)\n",
|
1393 |
+
"(259, 300) \n",
|
1394 |
+
"\n",
|
1395 |
+
"Working on 82 sample\n",
|
1396 |
+
"[15]\n",
|
1397 |
+
"[14] \n",
|
1398 |
+
"\n",
|
1399 |
+
"(798,)\n",
|
1400 |
+
"(500,) \n",
|
1401 |
+
"\n",
|
1402 |
+
"(500, 600, 6)\n",
|
1403 |
+
"(500, 600) \n",
|
1404 |
+
"\n",
|
1405 |
+
"(500, 300, 6)\n",
|
1406 |
+
"(500, 300) \n",
|
1407 |
+
"\n",
|
1408 |
+
"Working on 83 sample\n",
|
1409 |
+
"[15]\n",
|
1410 |
+
"[16] \n",
|
1411 |
+
"\n",
|
1412 |
+
"(798,)\n",
|
1413 |
+
"(781,) \n",
|
1414 |
+
"\n",
|
1415 |
+
"(781, 600, 6)\n",
|
1416 |
+
"(781, 600) \n",
|
1417 |
+
"\n",
|
1418 |
+
"(781, 300, 6)\n",
|
1419 |
+
"(781, 300) \n",
|
1420 |
+
"\n",
|
1421 |
+
"Working on 84 sample\n",
|
1422 |
+
"[16]\n",
|
1423 |
+
"[0] \n",
|
1424 |
+
"\n",
|
1425 |
+
"(781,)\n",
|
1426 |
+
"(1886,) \n",
|
1427 |
+
"\n",
|
1428 |
+
"(781, 600, 6)\n",
|
1429 |
+
"(781, 600) \n",
|
1430 |
+
"\n",
|
1431 |
+
"(781, 300, 6)\n",
|
1432 |
+
"(781, 300) \n",
|
1433 |
+
"\n",
|
1434 |
+
"Working on 85 sample\n",
|
1435 |
+
"[16]\n",
|
1436 |
+
"[3] \n",
|
1437 |
+
"\n",
|
1438 |
+
"(781,)\n",
|
1439 |
+
"(1866,) \n",
|
1440 |
+
"\n",
|
1441 |
+
"(781, 600, 6)\n",
|
1442 |
+
"(781, 600) \n",
|
1443 |
+
"\n",
|
1444 |
+
"(781, 300, 6)\n",
|
1445 |
+
"(781, 300) \n",
|
1446 |
+
"\n",
|
1447 |
+
"Working on 86 sample\n",
|
1448 |
+
"[16]\n",
|
1449 |
+
"[7] \n",
|
1450 |
+
"\n",
|
1451 |
+
"(781,)\n",
|
1452 |
+
"(1333,) \n",
|
1453 |
+
"\n",
|
1454 |
+
"(781, 600, 6)\n",
|
1455 |
+
"(781, 600) \n",
|
1456 |
+
"\n",
|
1457 |
+
"(781, 300, 6)\n",
|
1458 |
+
"(781, 300) \n",
|
1459 |
+
"\n",
|
1460 |
+
"Working on 87 sample\n",
|
1461 |
+
"[16]\n",
|
1462 |
+
"[8] \n",
|
1463 |
+
"\n",
|
1464 |
+
"(781,)\n",
|
1465 |
+
"(666,) \n",
|
1466 |
+
"\n",
|
1467 |
+
"(666, 600, 6)\n",
|
1468 |
+
"(666, 600) \n",
|
1469 |
+
"\n",
|
1470 |
+
"(666, 300, 6)\n",
|
1471 |
+
"(666, 300) \n",
|
1472 |
+
"\n",
|
1473 |
+
"Working on 88 sample\n",
|
1474 |
+
"[16]\n",
|
1475 |
+
"[11] \n",
|
1476 |
+
"\n",
|
1477 |
+
"(781,)\n",
|
1478 |
+
"(882,) \n",
|
1479 |
+
"\n",
|
1480 |
+
"(781, 600, 6)\n",
|
1481 |
+
"(781, 600) \n",
|
1482 |
+
"\n",
|
1483 |
+
"(781, 300, 6)\n",
|
1484 |
+
"(781, 300) \n",
|
1485 |
+
"\n",
|
1486 |
+
"Working on 89 sample\n",
|
1487 |
+
"[16]\n",
|
1488 |
+
"[13] \n",
|
1489 |
+
"\n",
|
1490 |
+
"(781,)\n",
|
1491 |
+
"(259,) \n",
|
1492 |
+
"\n",
|
1493 |
+
"(259, 600, 6)\n",
|
1494 |
+
"(259, 600) \n",
|
1495 |
+
"\n",
|
1496 |
+
"(259, 300, 6)\n",
|
1497 |
+
"(259, 300) \n",
|
1498 |
+
"\n",
|
1499 |
+
"Working on 90 sample\n",
|
1500 |
+
"[16]\n",
|
1501 |
+
"[14] \n",
|
1502 |
+
"\n",
|
1503 |
+
"(781,)\n",
|
1504 |
+
"(500,) \n",
|
1505 |
+
"\n",
|
1506 |
+
"(500, 600, 6)\n",
|
1507 |
+
"(500, 600) \n",
|
1508 |
+
"\n",
|
1509 |
+
"(500, 300, 6)\n",
|
1510 |
+
"(500, 300) \n",
|
1511 |
+
"\n",
|
1512 |
+
"Working on 91 sample\n",
|
1513 |
+
"[16]\n",
|
1514 |
+
"[15] \n",
|
1515 |
+
"\n",
|
1516 |
+
"(781,)\n",
|
1517 |
+
"(798,) \n",
|
1518 |
+
"\n",
|
1519 |
+
"(781, 600, 6)\n",
|
1520 |
+
"(781, 600) \n",
|
1521 |
+
"\n",
|
1522 |
+
"(781, 300, 6)\n",
|
1523 |
+
"(781, 300) \n",
|
1524 |
+
"\n",
|
1525 |
+
"Working on 92 sample\n",
|
1526 |
+
"[17]\n",
|
1527 |
+
"[0] \n",
|
1528 |
+
"\n",
|
1529 |
+
"(458,)\n",
|
1530 |
+
"(1886,) \n",
|
1531 |
+
"\n",
|
1532 |
+
"(458, 600, 6)\n",
|
1533 |
+
"(458, 600) \n",
|
1534 |
+
"\n",
|
1535 |
+
"(458, 300, 6)\n",
|
1536 |
+
"(458, 300) \n",
|
1537 |
+
"\n",
|
1538 |
+
"Working on 93 sample\n",
|
1539 |
+
"[17]\n",
|
1540 |
+
"[3] \n",
|
1541 |
+
"\n",
|
1542 |
+
"(458,)\n",
|
1543 |
+
"(1866,) \n",
|
1544 |
+
"\n",
|
1545 |
+
"(458, 600, 6)\n",
|
1546 |
+
"(458, 600) \n",
|
1547 |
+
"\n",
|
1548 |
+
"(458, 300, 6)\n",
|
1549 |
+
"(458, 300) \n",
|
1550 |
+
"\n",
|
1551 |
+
"Working on 94 sample\n",
|
1552 |
+
"[17]\n",
|
1553 |
+
"[7] \n",
|
1554 |
+
"\n",
|
1555 |
+
"(458,)\n",
|
1556 |
+
"(1333,) \n",
|
1557 |
+
"\n",
|
1558 |
+
"(458, 600, 6)\n",
|
1559 |
+
"(458, 600) \n",
|
1560 |
+
"\n",
|
1561 |
+
"(458, 300, 6)\n",
|
1562 |
+
"(458, 300) \n",
|
1563 |
+
"\n",
|
1564 |
+
"Working on 95 sample\n",
|
1565 |
+
"[17]\n",
|
1566 |
+
"[8] \n",
|
1567 |
+
"\n",
|
1568 |
+
"(458,)\n",
|
1569 |
+
"(666,) \n",
|
1570 |
+
"\n",
|
1571 |
+
"(458, 600, 6)\n",
|
1572 |
+
"(458, 600) \n",
|
1573 |
+
"\n",
|
1574 |
+
"(458, 300, 6)\n",
|
1575 |
+
"(458, 300) \n",
|
1576 |
+
"\n",
|
1577 |
+
"Working on 96 sample\n",
|
1578 |
+
"[17]\n",
|
1579 |
+
"[11] \n",
|
1580 |
+
"\n",
|
1581 |
+
"(458,)\n",
|
1582 |
+
"(882,) \n",
|
1583 |
+
"\n",
|
1584 |
+
"(458, 600, 6)\n",
|
1585 |
+
"(458, 600) \n",
|
1586 |
+
"\n",
|
1587 |
+
"(458, 300, 6)\n",
|
1588 |
+
"(458, 300) \n",
|
1589 |
+
"\n",
|
1590 |
+
"Working on 97 sample\n",
|
1591 |
+
"[17]\n",
|
1592 |
+
"[12] \n",
|
1593 |
+
"\n",
|
1594 |
+
"(458,)\n",
|
1595 |
+
"(317,) \n",
|
1596 |
+
"\n",
|
1597 |
+
"(317, 600, 6)\n",
|
1598 |
+
"(317, 600) \n",
|
1599 |
+
"\n",
|
1600 |
+
"(317, 300, 6)\n",
|
1601 |
+
"(317, 300) \n",
|
1602 |
+
"\n",
|
1603 |
+
"Working on 98 sample\n",
|
1604 |
+
"[17]\n",
|
1605 |
+
"[13] \n",
|
1606 |
+
"\n",
|
1607 |
+
"(458,)\n",
|
1608 |
+
"(259,) \n",
|
1609 |
+
"\n",
|
1610 |
+
"(259, 600, 6)\n",
|
1611 |
+
"(259, 600) \n",
|
1612 |
+
"\n",
|
1613 |
+
"(259, 300, 6)\n",
|
1614 |
+
"(259, 300) \n",
|
1615 |
+
"\n",
|
1616 |
+
"Working on 99 sample\n",
|
1617 |
+
"[17]\n",
|
1618 |
+
"[14] \n",
|
1619 |
+
"\n",
|
1620 |
+
"(458,)\n",
|
1621 |
+
"(500,) \n",
|
1622 |
+
"\n",
|
1623 |
+
"(458, 600, 6)\n",
|
1624 |
+
"(458, 600) \n",
|
1625 |
+
"\n",
|
1626 |
+
"(458, 300, 6)\n",
|
1627 |
+
"(458, 300) \n",
|
1628 |
+
"\n",
|
1629 |
+
"[[[ 4.2305e-03 5.0337e-03 -2.0325e-02 -4.2764e-05 1.2474e-02\n",
|
1630 |
+
" -8.7965e-04]\n",
|
1631 |
+
" [-1.3906e-02 2.9063e-02 -2.0546e-02 -2.9549e-03 1.8303e-03\n",
|
1632 |
+
" -1.9847e-03]\n",
|
1633 |
+
" [ 2.7433e-02 4.5905e-02 -4.0888e-03 -7.7477e-03 6.2355e-03\n",
|
1634 |
+
" -1.5093e-03]\n",
|
1635 |
+
" ...\n",
|
1636 |
+
" [-3.0725e+00 -2.7911e+00 5.3162e-01 8.5135e-01 -1.3699e-01\n",
|
1637 |
+
" 5.6564e-01]\n",
|
1638 |
+
" [-1.9467e+00 -2.9414e+00 -1.4299e-02 9.9769e-01 -2.1398e-01\n",
|
1639 |
+
" 6.5887e-01]\n",
|
1640 |
+
" [-4.5537e-01 -2.6009e+00 -1.0866e+00 1.0066e+00 -2.5817e-01\n",
|
1641 |
+
" 5.4443e-01]]\n",
|
1642 |
+
"\n",
|
1643 |
+
" [[ 1.2482e-02 -8.1862e-02 7.5474e-03 -2.4319e-02 -1.0539e-02\n",
|
1644 |
+
" -7.9325e-03]\n",
|
1645 |
+
" [ 6.7856e-02 -5.4918e-02 7.1386e-02 -2.3936e-02 1.5593e-03\n",
|
1646 |
+
" -3.3457e-03]\n",
|
1647 |
+
" [ 7.8103e-02 -1.2147e-02 6.6126e-02 -2.1341e-02 2.0339e-02\n",
|
1648 |
+
" -5.5823e-03]\n",
|
1649 |
+
" ...\n",
|
1650 |
+
" [ 6.3593e-02 -5.2421e-01 8.8235e-01 -1.1490e+00 -1.7162e-01\n",
|
1651 |
+
" 3.3109e-03]\n",
|
1652 |
+
" [ 1.8897e-01 -4.6818e-01 6.4908e-01 -1.1930e+00 -1.9300e-01\n",
|
1653 |
+
" 8.1978e-03]\n",
|
1654 |
+
" [ 5.7390e-01 -3.5587e-01 1.0611e+00 -1.2946e+00 -9.8261e-02\n",
|
1655 |
+
" 8.4003e-03]]\n",
|
1656 |
+
"\n",
|
1657 |
+
" [[ 1.2127e-02 -1.4245e-02 5.9104e-02 -3.1197e-02 6.9761e-03\n",
|
1658 |
+
" -3.9340e-03]\n",
|
1659 |
+
" [ 6.2075e-02 2.1417e-02 7.1605e-02 -2.8208e-02 1.7098e-02\n",
|
1660 |
+
" -5.2953e-03]\n",
|
1661 |
+
" [ 2.2942e-02 3.8522e-02 1.1432e-02 -3.1241e-02 1.8490e-02\n",
|
1662 |
+
" -1.3736e-02]\n",
|
1663 |
+
" ...\n",
|
1664 |
+
" [-7.6039e-01 1.0858e+00 -1.1409e+00 -4.6425e-01 9.5936e-02\n",
|
1665 |
+
" -3.7481e-01]\n",
|
1666 |
+
" [-1.3449e+00 4.8127e-01 -1.0343e+00 -5.6259e-01 3.1796e-02\n",
|
1667 |
+
" -3.7481e-01]\n",
|
1668 |
+
" [-1.5980e+00 -3.5652e-01 -1.0850e+00 -5.5465e-01 -1.2798e-02\n",
|
1669 |
+
" -3.7481e-01]]\n",
|
1670 |
+
"\n",
|
1671 |
+
" ...\n",
|
1672 |
+
"\n",
|
1673 |
+
" [[-8.7649e+00 3.3890e+00 -7.2155e+00 -1.5611e+00 -1.1298e-01\n",
|
1674 |
+
" 1.3026e-01]\n",
|
1675 |
+
" [-8.7176e+00 2.6337e+00 -6.2457e+00 -1.3539e+00 2.8779e-01\n",
|
1676 |
+
" 1.9277e-01]\n",
|
1677 |
+
" [-5.6337e+00 -4.1883e-01 -3.6112e+00 -1.1712e+00 -1.3831e-01\n",
|
1678 |
+
" 3.3798e-01]\n",
|
1679 |
+
" ...\n",
|
1680 |
+
" [ 3.6760e+00 -6.8272e+00 -1.5986e+00 2.7165e-02 4.8450e+00\n",
|
1681 |
+
" -7.2727e+00]\n",
|
1682 |
+
" [ 5.6307e-01 2.5257e+00 -8.2712e+00 4.1453e-01 7.6321e+00\n",
|
1683 |
+
" -6.7581e+00]\n",
|
1684 |
+
" [ 6.1067e+00 -1.8245e+00 2.1541e+01 1.4560e-01 2.7643e+00\n",
|
1685 |
+
" -2.8827e+00]]\n",
|
1686 |
+
"\n",
|
1687 |
+
" [[-1.5986e+00 1.4603e+00 1.2430e+00 -5.6107e-01 -1.6788e-01\n",
|
1688 |
+
" 6.4394e-01]\n",
|
1689 |
+
" [-1.3621e+00 1.5820e+00 8.6106e-01 -5.9252e-01 -1.4356e-01\n",
|
1690 |
+
" 6.5254e-01]\n",
|
1691 |
+
" [-1.1157e+00 1.7275e+00 3.9126e-01 -6.2965e-01 -1.4410e-01\n",
|
1692 |
+
" 6.2080e-01]\n",
|
1693 |
+
" ...\n",
|
1694 |
+
" [ 2.7887e+00 -1.3365e+01 -2.9645e+00 -2.0780e+00 4.2581e-01\n",
|
1695 |
+
" -2.5164e+00]\n",
|
1696 |
+
" [ 2.3173e+00 -1.1248e+01 -2.6233e+00 -1.6051e+00 1.5487e-01\n",
|
1697 |
+
" -3.6662e+00]\n",
|
1698 |
+
" [ 3.2523e+00 -9.6261e+00 1.0537e+00 -8.0884e-01 6.5590e-02\n",
|
1699 |
+
" -8.1108e+00]]\n",
|
1700 |
+
"\n",
|
1701 |
+
" [[-4.0405e-01 -2.8000e+00 2.1178e-01 -1.5460e-01 -2.6517e-01\n",
|
1702 |
+
" -3.1268e-02]\n",
|
1703 |
+
" [-7.1249e-01 -1.8576e+00 -1.0162e-01 -2.4730e-01 -2.1622e-01\n",
|
1704 |
+
" 7.4453e-02]\n",
|
1705 |
+
" [-1.0638e+00 -1.6841e+00 -5.7405e-01 -3.0087e-01 -8.0685e-02\n",
|
1706 |
+
" 1.2186e-01]\n",
|
1707 |
+
" ...\n",
|
1708 |
+
" [-9.9416e+00 -4.3555e+00 -9.0631e+00 7.0102e-01 2.7498e+00\n",
|
1709 |
+
" -1.5001e+00]\n",
|
1710 |
+
" [-6.8988e+00 -6.8906e+00 -8.5498e+00 8.7395e-01 3.7620e+00\n",
|
1711 |
+
" -2.6726e+00]\n",
|
1712 |
+
" [-3.3552e+00 -1.0050e+01 -8.3921e+00 5.3061e-01 4.4602e+00\n",
|
1713 |
+
" -3.3041e+00]]]\n",
|
1714 |
+
"[[ 0 0 0 ... 3 3 3]\n",
|
1715 |
+
" [ 0 0 0 ... 3 3 3]\n",
|
1716 |
+
" [ 0 0 0 ... 3 3 3]\n",
|
1717 |
+
" ...\n",
|
1718 |
+
" [17 17 17 ... 14 14 14]\n",
|
1719 |
+
" [17 17 17 ... 14 14 14]\n",
|
1720 |
+
" [17 17 17 ... 14 14 14]]\n",
|
1721 |
+
"(62474, 300, 6) (62474, 300)\n"
|
1722 |
+
]
|
1723 |
+
}
|
1724 |
+
],
|
1725 |
+
"source": [
|
1726 |
+
"new_signals = []\n",
|
1727 |
+
"new_labels = []\n",
|
1728 |
+
"\n",
|
1729 |
+
"for i in range(len(pairs)):\n",
|
1730 |
+
" print(\"Working on \", i, \"sample\")\n",
|
1731 |
+
"\n",
|
1732 |
+
" first = np.where(CLASS_LABELS == pairs[i][0])[0]\n",
|
1733 |
+
" second = np.where(CLASS_LABELS == pairs[i][1])[0]\n",
|
1734 |
+
" print(first)\n",
|
1735 |
+
" print(second, \"\\n\")\n",
|
1736 |
+
"\n",
|
1737 |
+
" first_indexes = np.unique(np.where(labels == first)[0])\n",
|
1738 |
+
" second_indexes = np.unique(np.where(labels == second)[0])\n",
|
1739 |
+
" print(first_indexes.shape)\n",
|
1740 |
+
" print(second_indexes.shape, \"\\n\")\n",
|
1741 |
+
"\n",
|
1742 |
+
" # minimum pre vytvorenie absolutne neduplicitnych prikladov - zabranenie overfit\n",
|
1743 |
+
" count = min(first_indexes.shape[0], second_indexes.shape[0])\n",
|
1744 |
+
"\n",
|
1745 |
+
" merged_signals = np.concatenate(\n",
|
1746 |
+
" (signals[first_indexes[:count]], signals[second_indexes[:count]]), axis=1\n",
|
1747 |
+
" )\n",
|
1748 |
+
" print(merged_signals.shape)\n",
|
1749 |
+
"\n",
|
1750 |
+
" merged_labels = np.concatenate(\n",
|
1751 |
+
" (labels[first_indexes[:count]], labels[second_indexes[:count]]), axis=1\n",
|
1752 |
+
" )\n",
|
1753 |
+
" print(merged_labels.shape, \"\\n\")\n",
|
1754 |
+
"\n",
|
1755 |
+
" downsample_signals = merged_signals[:, ::2, :]\n",
|
1756 |
+
" print(downsample_signals.shape)\n",
|
1757 |
+
" new_signals.append(downsample_signals)\n",
|
1758 |
+
"\n",
|
1759 |
+
" downsample_labels = merged_labels[:, ::2]\n",
|
1760 |
+
" print(downsample_labels.shape, \"\\n\")\n",
|
1761 |
+
" new_labels.append(downsample_labels)\n",
|
1762 |
+
"\n",
|
1763 |
+
"# merge all pairs into batch axis\n",
|
1764 |
+
"new_signals = np.concatenate(new_signals, axis=0)\n",
|
1765 |
+
"new_labels = np.concatenate(new_labels, axis=0)\n",
|
1766 |
+
"\n",
|
1767 |
+
"print(new_signals)\n",
|
1768 |
+
"print(new_labels)\n",
|
1769 |
+
"print(new_signals.shape, new_labels.shape)\n"
|
1770 |
+
]
|
1771 |
+
},
|
1772 |
+
{
|
1773 |
+
"cell_type": "code",
|
1774 |
+
"execution_count": 13,
|
1775 |
+
"metadata": {},
|
1776 |
+
"outputs": [
|
1777 |
+
{
|
1778 |
+
"name": "stdout",
|
1779 |
+
"output_type": "stream",
|
1780 |
+
"text": [
|
1781 |
+
"(20655, 300, 6) (20655, 300)\n",
|
1782 |
+
"(62474, 300, 6) (62474, 300)\n",
|
1783 |
+
"Mean: [ 0.10943159 -0.07794212 -0.0883355 0.0306053 0.00974582 0.00629569]\n",
|
1784 |
+
"Std: [5.192652 3.0467124 3.9461544 1.697749 1.36974 1.4093003]\n",
|
1785 |
+
"Max: [194.52 91.779 340.59 97.376 79.272 78.783]\n",
|
1786 |
+
"Min: [-172.74 -143.17 -315.89 -113.8 -85.757 -78.866] \n",
|
1787 |
+
"\n",
|
1788 |
+
"(83129, 300, 6) (83129, 300)\n"
|
1789 |
+
]
|
1790 |
+
}
|
1791 |
+
],
|
1792 |
+
"source": [
|
1793 |
+
"print(signals.shape, labels.shape)\n",
|
1794 |
+
"print(new_signals.shape, new_labels.shape)\n",
|
1795 |
+
"\n",
|
1796 |
+
"# merge all pairs into batch axis\n",
|
1797 |
+
"final_signals = np.concatenate([signals, new_signals], axis=0)\n",
|
1798 |
+
"final_labels = np.concatenate([labels, new_labels], axis=0)\n",
|
1799 |
+
"\n",
|
1800 |
+
"print(\"Mean:\", np.mean(final_signals, axis=(0, 1)))\n",
|
1801 |
+
"print(\"Std:\", np.std(final_signals, axis=(0, 1)))\n",
|
1802 |
+
"print(\"Max:\", np.max(final_signals, axis=(0, 1)))\n",
|
1803 |
+
"print(\"Min:\", np.min(final_signals, axis=(0, 1)), \"\\n\")\n",
|
1804 |
+
"\n",
|
1805 |
+
"print(final_signals.shape, final_labels.shape)\n"
|
1806 |
+
]
|
1807 |
+
},
|
1808 |
+
{
|
1809 |
+
"cell_type": "code",
|
1810 |
+
"execution_count": 14,
|
1811 |
+
"metadata": {},
|
1812 |
+
"outputs": [
|
1813 |
+
{
|
1814 |
+
"data": {
|
1815 |
+
"image/png": "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IjfeeCM333wzGzduzLN93bp19OnThxYtWnDEEUfQt29ftmzZktvtDGFhkCpVquTmYp4xYwZt27ZN+zHkV5Ht/q593dSUl5Hp5aFEREQks4488kjatGnDyJEjuf7663O3X3311Zx44omMGzcOd6dPnz6MGjWKa665hs2bN7Ns2TLWrFlD3bp1efPNNwF4/fXXad++faYO5VcV2aBSMkcBvYiIFCU333wzLVq04NJLL83d9vzzz/Puu+9yzz33APDTTz/lTopp164db7zxBmvWrKF79+6MHTuWH374gTfeeIN77703E4eQLwoqRURERFKodu3aXHDBBdxyyy2529ydZ555JrerO1H79u15+eWXWbNmDaNGjWLhwoU899xzLFy4kGbNmqWz6ntEYypFREREUuyGG27g8ccf57///S8Ap59+OnfccQfZ2dkArFmzhkWLFgGhpfLNN99kyZIlNGzYkPbt2zN8+HBatmxZoFMmKagUERERSbFKlSpxxRVX8O233wIwcuRIypYtS9OmTTniiCNo164dS5YsAaBKlSpUqVKF4447DoBWrVrx3//+l3bt2mWq+vmi7m8REREpnPKZTzJVcoLEHEOGDGHIkCG5j8eMGbPL3507d27u/8uXL8+WLVuSXr9kU0uliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2pRQSERGRQunwSYen5HXn9ZiXr/22bNnCkCFDeOaZZyhZsiQlSpRg0KBB9OjRY6f7Dx06lEMPPZRu3brt9nVffPFF3nrrLUaOHLnHdc8xffp0rrrqKubMmfObX2N7CipFREREUqBnz55s3ryZjz/+mHLlyrFkyRI6depEdnY2F198cZ59s7Ozuemmm/L1ul26dKFLly6pqHIs6v4WERERSbKFCxfy/PPPM3bsWMqVKweENcDvvvtuhg8fzvTp02nSpAkXX3wxTZs25bnnnqNnz57ce++9AKxbt45zzz2Xww47jBNPPJFLLrmEnj17AjBx4kROP/10ILQ4ZmVl0a9fP4488kiaNGnChx9+CIRAtWPHjjRr1owmTZpwwQUXsGHDhpQds4JKERERkSSbPXs2DRo0oGLFinm2H3fccXz99desWrWK+fPnc+GFFzJnzhy6du2aZ7+bbrqJsmXLMn/+fF555RXeeeedXZa1YMECevTowccff8yAAQO4/vrrAShevDiTJ0/mww8/5JNPPqFChQrcd999yT/YiIJKERERkQyoW7curVq12ulzb775JhdddBFmxr777su55567y9epX78+xx57LBCC1i+//BIAd2fkyJEcddRRHHHEEUydOjWpYyi3p6BSREREJMmOOuooFi5cyOrVq/Nsf/fdd6lZsyaVK1emfPny+X49M9vlc2XKlMn9f/HixcnOzgZg8uTJTJs2jbfffpt58+YxaNAgNm3atIdHkn8KKkVERESSrEGDBpx22mn07duXjRs3ArBkyRKuvvpqhgwZ8qu/37ZtWyZNmoS7s379ep566qk9rsOaNWuoVKkS++23H+vWrWPixIl7/Bp7QkGliIiISAo89thj1K1bl8MPP5xGjRrRuXNnrrnmGvr06fOrvzt06FDWrVtHo0aNOPnkkznyyCPZf//996j8Cy+8kI0bN3LooYfSqVMnTjzxxN94JPlj7p7SAvKrRo0avnz58rSVV/u6qSkvY8ntp6a8jL2R3nsREUmmbdu28cUXX9CwYUOKFy+e6eokxdatW9m2bRtlypRhw4YNdOzYkQEDBux2bGWy7O79NLNv3L3Gzn5PeSpFRERECpg1a9bQqVMntm3bxqZNm/jDH/7AOeeck+lq7ZaCShEREZEC5qCDDmLWrFmZrsYe0ZhKEREREYlNQaWIiIjs1XaXbkd+uz19XxVUioiIyF7NzDAztm7dmumqFApbt27NfU/3hMZUioiIyF7NzNh///1ZuXIl1atXV8tlDO7OypUr2X///RVUioiISNFz0EEHsXTpUhYuXJjpquz1ypQpw0EHHbTHv6egUkRERPZ6xYoVo06dOvz8888UlBzceyMzo1ix3zY6UkGliIiIFBq/NSCS+PTOi4iIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkSS7o477qBhw4YUK1YMM2P69Om5z7344otkZWVRunRp6tSpw8MPP/yrr/fDDz9Qq1YtzIzf/e53udvHjx9P1apVOfDAA7n11ltzt8+YMYP69evz008/JfW4RERk1xRUikjSbdq0ic6dO1OrVq082xctWsRZZ53Fhg0bGDVqFJUrV+bSSy/ljTfe2O3r9e3blzVr1uxQRr9+/WjZsiVdu3blhhtu4KuvvmLz5s307duX+++/n7Jlyyb92EREZOcUVIpI0g0bNox77rmHqlWr5tn+8MMPk52dzcCBA7n00ku55ZZbALjvvvt2+VoTJkzg5Zdf5o477sizfdOmTWzdupVjjjmGli1bArBu3TpuueUWjjnmGDp27JjkoxIRkd0pkekKiEjRsXDhQoDcFsxDDjkEgC+++GKn+y9atIgrrriCu+++m0aNGuV5bv/99+fCCy9k8ODBALRr1w4zY9y4ccydOzdVhyAiIruglkoRyRh33+3zffr0ISsri9///vd88803AGzevJnFixcDMGnSJObNm8esWbN49dVXueSSS7j11lv58MMPycrKom7duju0cIqISGqopVJE0qZBgwYALF26FIBly5bl2Z6dnU12djYlSpSgRIkSLF68mKVLl+Y+DzBnzhyOOuoofvjhBwCysrIAGDNmDKVKlaJXr15Ur16dvn37ctJJJ9GuXTvOPPPMPK8hIiLJp6BSRJJuxowZfPHFF6xatQqAqVOnsmjRIvr27cvIkSMZOXIkpUuX5pFHHgFgwIABANxyyy0MHz6ca6+9lttvv50HH3yQDRs2APDpp59y44030qBBA+6666485S1fvpzhw4fzr3/9CzNj27ZtzJgxg++++w6Abdu2pevQRUSKLAWVIpJ0jz76KJMmTcp9nBMEujtPP/00119/PQMGDODggw/m/vvv5/e///1OX6dTp065/69UqRIABx54IF26dMmzX79+/ejfvz+HHXYYEFotr7rqKmbNmsVf/vKX3O0iIpI69mtjmtKlRo0avnz58rSVV/u6qSkvY8ntp6a8jL2R3nsREZG9k5l94+41dvacJuqIiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU2zv0UkLdIxQQs0SUtEJFPUUikiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiS1fQaWZlTGz583sCzP72MxeN7P6O9mvtpltM7M5CT/1kl9tERERESlISuzBvmOBf7i7m9nlwHig9U72W+fuTZNQNxERERHZS+SrpdLdN7n7K+7u0ab3gNopq5WIiIiI7FV+65jKK4EXdvFcOTP7j5l9ZGZDzaz4byxDRERERPYSexxUmtlgoD7wl508/S1Q3d2bA+2BE4Grd/E6A81sec7P+vXr97QqIiIiIlJA7FFQaWaDgDOBTu6+cfvn3X2zu38X/f974FFCYLkDd7/H3Wvk/JQvX37Pay8iIiIiBUK+g0ozGwicD/ze3X/YxT4HmVnJ6P+lCQHo7CTUU0REREQKsPymFKoB3A3sD7wVpQp6P3ruJjO7NNq1JTDbzD4GPgJWALcmvdYiIiIiUqDkK6WQuy8HbBfPDU34/7PAs8mpmoiIiIjsLbSijoiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhJbiUxXIFOWlLkgDaX8mIYy9j5670VERAoftVSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisZXIdAVEpGhYUuaCNJX0Y5rKERGRRGqpFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIikzYcIEmjRpQtmyZTnggANo3749c+fO3e3vDBgwADPDzFiwYAEACxcupEWLFpQrV4727duzevVqALZs2ULjxo157bXXUn4sIrJ7CipFRCQlvvrqK3r16sWyZcu45557OP3003nzzTe59NJLd/k7U6dO5aGHHqJMmTJ5tt98882sWLGCW2+9lffff5/Ro0cDMGLECJo2bUrHjh1Teiwi8usUVIqISEr8/PPPmBn77bcf7du357jjjgPgwAMP3On+K1eupFevXgwePJgqVarkeW7dunVUq1aNjh07sv/++7N27Vrmz5/PQw89xMiRI1N+LCLy6xRUiohIStSvX5+HH36YVatW0bBhQy655BIOP/xwJkyYsMO+7k7Pnj2pX78+Q4cO3eH5vn378vHHH9O4cWPWr19Pjx496NOnD7fccssOAaiIZIaCShERSYnvv/+e2267jX333ZcnnniCwYMHM2/evJ12fz/22GNMmzaNG2+8kcWLF5OdnQ3AsmXL2LBhA506dWLZsmXMnDmTxYsX8+6771KsWDG6dOnCaaedRs2aNTnttNNyx1qKSPopqBQRkZSYNm0aixcvpmXLlpx33nnccMMNALz44ou4O5s2bWLz5s0ALF68mC1bttChQwcaNGjAN998A0DHjh15/fXXATjooIM4/vjj2bhxI8OGDePhhx/m3nvv5fPPP2fBggXMnz9fXeEiGVQi0xUQEZHCqUGDBpgZb731FmPGjOHTTz8FICsri6VLl1KnTh2qVKnCihUrOOecc8jKysr93X79+rFq1SpGjRpFixYt8rxu//79ueyyy2jUqBHbtm1j5cqVjBs3jlWrVuW2cIpI+imoFBGRlDjyyCN55JFHuPvuu/nzn/9MmTJl6NSpE/fcc88O+zZu3JjGjRvnPh40aBAAHTp04OCDD87d/uyzz/LZZ58xZcoUAK688kpmzpzJ4MGDOeaYY7jyyitTfFQisivm7pmuAwA1atTw5cuXp6/AGyukoYwfU1/G3kjvfdGUjr876G8vIpJCZvaNu9fY2XMaUykiIiIisSmoFBEREZHYFFSKiIiISGyaqCMiIilV+7qpKS9jye2nprwMEdk9tVSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGLLV1BpZmXM7Hkz+8LMPjaz182s/i727WxmC8xsoZk9a2b7JbfKIiIiIlLQ7ElL5VjgUHc/EngBGL/9DmZWHngEON3dGwD/BYYko6IiIiIiUnDlK6h0903u/oq7e7TpPaD2TnbtBMx29wXR4weA82PXUkREREQKtN86pvJKQmvl9moBSxMeLwGqmVmJ31iOiIiIiOwF9jjYM7PBQH2gXZyCzWwgMDDncYUKFeK8nIiIiIhk0B61VJrZIOBMoJO7b9zJLsuAQxIe1wa+dffs7Xd093vcvUbOT/ny5fekKiIiIiJSgOQ7qIxaFs8Hfu/uP+xit1eBo83ssOhxP2BKrBqKiIiISIGXr+5vM6sB3A18BbxlZgCb3f1YM7sJ+K+7P+Tu68ysN/B8NI7yE6BHiuouIiIiIgVEvoJKd18O2C6eG7rd4xeBF+NXTURERET2FlpRR0RERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUikihNn36dMxsh5/atWvvdP/atWvvsO/zzz8PwMsvv0zt2rWpUKEC/fr1y/2dhQsXUq1aNVasWJGGIxIp+PS9K5pKZLoCIiKp1LhxY5544oncx88//zxPPvkkxx577C5/p1GjRgwdOjT3cfPmzQHo168f9erVo1u3bowYMYKuXbvSpk0b+vbty/Dhw6latWrqDkRkL6LvXdGkoFJECrWDDjqI8847DwB358YbbwTgmmuu2e3vnHrqqZQvXx4zy92+bt06GjduTPv27RkxYgRr167lkUceYevWrfTp0yelxyGyN9H3rmhS97eIFBkvv/wyn3/+Oa1ataJZs2a73G/GjBnst99+lC1bljPPPJNVq1YBcMUVV/DAAw/Qtm1bsrKyyMrK4vrrr2fs2LF5LoIi8gt974oOtVSKSJFx9913A7tvLenVqxcNGjSgXLly3H///Tz33HPss88+PP744wwfPpzu3bvz/fff07RpU7p3706fPn1Yv349zZs3Z9WqVZxxxhncc889utiJRPS9KzoUVIpIkTBr1izefvttGjduzCmnnAKEbrnNmzdjZpQuXRogz5iuqlWr8s9//pO5c+fmbqtfvz4QWl9mz57NpEmTaNu2LU2aNGHo0KHUq1ePU089lfbt26fx6EQKpkx876ZPn06bNm12qMshhxzCkiVLdlnXAQMGMGbMGADmz5/PYYcdxsKFC+nWrRuffvopxx13HE8++SQVK1Zky5YtNG3alJEjR9KxY8fY71NhoaBSRIqEu+66C4Crr746tzVj6dKl1KlThypVqrBixQrmzp3LoEGD6NSpExUqVOCRRx4BoGXLlnlea/369fTv358JEyZQpkwZtm3bxpw5c5gwYQIA2dnZaTwykYIrE9+73zJJaOrUqTz00EOUKVOGTZs25W6/+eabWbFiBbfeeitDhgxh9OjRDB8+nBEjRtC0aVMFlNvRmEoRKfSWLVvG008/TdWqVfnjH/+4y/0qV65MmTJluOOOO7jssstYvnw5V111Ve6FMcfgwYNp06YNbdu2BeDOO+9kw4YNjBw5kp49e9KhQ4eUHo/I3iBT37ucSULnnXce5557LnPmzAF23f2+cuVKevXqxeDBg6lSpUqe59atW0e1atXo2LEj+++/P2vXrmX+/Pk89NBDjBw58re+NYWWuXum6wBAjRo1fPny5ekr8MYKaSjjx9SXsTfSe180pePvDvrbF0C1r5ua8jKW3H5qysuQvc9LL71Ely5daNWqFdOnT9/heXfnlFNOYe3atcyYMYN69eqxdOnS3O7vf/zjH5xxxhls3ryZ/fffn7feeovLL7+cnj170rt37/QfUAFgZt+4e42dPaeWShERESmUfm2S0GOPPca0adO48cYbWbx4cW4X+rJly9iwYQOdOnVi2bJlzJw5k8WLF/Puu+9SrFgxunTpwmmnnUbNmjU57bTTWL16ddqOqSBTUCkiIiKFzq4mCW3atInNmzcDsHjxYrZs2UKHDh1o0KAB33zzDQAdO3bk9ddfB0J3+vHHH8/GjRsZNmwYDz/8MPfeey+ff/45CxYsYP78+eoKj2iijogUCeqCFUm/TH7v8jNJ6JxzziErKyv3d/r168eqVasYNWoULVq0yPN6/fv357LLLqNRo0Zs27aNlStXMm7cOFatWqXJeREFlSIiIlKo5HeSUOPGjWncuHHu40GDBgHQoUMHDj744Nztzz77LJ999hlTpkwB4Morr2TmzJkMHjyYY445hiuvvDJFR7J3UVApIiIihUqtWrXYunXrDttr167N7iYo7yqP5ZlnnsmZZ56Z+/jggw/m3//+d+x6FjYaUykiIiIisSmoFBEREZHY1P0tIiIihU46JgmBJuglUlApIiIptaTMBWkoRUnvRTJN3d8iIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEluJTFdARCQdlpS5IA2l/JiGMkRECia1VIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKU+liIiIpITywxYtaqkUERERkdgUVIqIiIhIbAoqRURERCQ2jakUERGRQic94zlBYzp/oZZKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhs+QoqzWy0mS0xMzezprvYp7WZ/WRmcxJ+yia1tiIiIiJSIJXI535PA3cC//6V/T5396axaiQiIiIie518BZXuPgPAzFJbGxERERHZKyV7TGU9M/vIzP5jZv2S/NoiIiIiUkDlt/s7Pz4Carj7j2ZWA3jFzP7n7k/tbGczGwgMzHlcoUKFJFZFRERERNIpaS2V7r7W3X+M/r8ceAI4cTf73+PuNXJ+ypcvn6yqiIiIiEiaJS2oNLNqZlYs+v++QGdgdrJeX0REREQKrvymFHrYzJYDNYDXzGxRtH28mXWJdjsLmGdmHwPvAa8DE1JQZxEREREpYPI7+/uSXWzvnfD/McCYJNVLRERERPYiWlFHRERERGJTUCkiIlII1a5dGzPL8/P888/vsN/EiRN32M/MaN26NQAvv/wytWvXpkKFCvTr90u2wIULF1KtWjVWrFiRpiOSgi6ZKYVERESkAGnUqBFDhw7Nfdy8efMd9mnVqhVPPPFE7uNx48Yxbdo0jj32WAD69etHvXr16NatGyNGjKBr1660adOGvn37Mnz4cKpWrZr6A5G9goJKERGRQuqggw7i1FNPpXz58rtcFa9OnTrUqVMHgA0bNtCvXz9KlSrFlVdeCcC6deto3Lgx7du3Z8SIEaxdu5ZHHnmErVu30qdPn7QdixR86v4WEREppGbMmMF+++1H2bJlOfPMM1m1atVu93/00UdZs2YN559/PgcffDAAV1xxBQ888ABt27YlKyuLrKwsrr/+esaOHavlmyUPtVSKiIgUQr169aJBgwaUK1eO+++/n+eee4599tmHxx9/fKf7//zzz9x7770ADBo0KHf78OHD6d69O99//z1Nmzale/fu9OnTh/Xr19O8eXNWrVrFGWecwT333KMgs4hTUCkiIlIIJY6lrFq1Kv/85z+ZO3cuP//8M1u2bKFYsWKUKlUqd59nn32Wr776ipNPPpmsrKw8r1W/fn0gTNqZPXs2kyZNom3btjRp0oShQ4dSr149Tj31VNq3b5+eg5MCSd3fIiIihczcuXPp0KEDI0eO5NFHH+VPf/oTAC1btmTGjBmULVuWk046Kc/v3H333QBcc801O33N9evX079/fx566CHKlCnDtm3bmDNnDhMmhHVOsrOzU3hEsjdQUCkiIlLIVK5cmTJlynDHHXdw2WWXsXz5cq666iruuuuune7/zjvv8N5773H00UfTtm3bne4zePBg2rRpk/v8nXfeyYYNGxg5ciQ9e/akQ4cOKTse2Tuo+1tERKSQqVatGi+++OJOn2vdujXunmfb8ccfv8O27Y0ePTrP41atWrFw4cJ4FZVCRS2VIiIiIhKbgkoRERERiU3d3yIiIoVU7eumpryMJbefmvIyZO+glkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisZXIdAVEREQkNZaUuSANpfyYhjJkb6CWShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiKTBgwADMDDNjwYIFO92ndevWufvk/Nx7770AvP/++zRu3Jjy5cvTtWtXNm/eDMDq1aupXr06n3zySboOJV9KZLoCIiIiIoXN1KlTeeihhyhTpgybNm3a7b6VKlXivvvuy3189NFHA3DNNddQsmRJhg0bxrXXXsspp5zCRRddxNVXX02PHj3IyspK6THsKQWVIiIiIkm0cuVKevXqxeDBg5k0aRJLly7d7f7lypWjc+fOlC1bluLFi+duX7duHXXq1KFDhw4MHTqUtWvX8sYbbzBz5kzmzp2b6sPYY+r+FhEREUkSd6dnz57Ur1+foUOH5ut3li1bxr777kuZMmVo164dixYtAqB///689NJLNG3alIoVK9K5c2cuvfRSHnzwQcqWLZvKw/hNFFSKiIiIJMljjz3GtGnTuPHGG1m8eDHZ2dlACBw3bNiww/5nnHEGEydO5KWXXuKcc85h2rRp9OzZE4DevXuzZMkS3n33XT7//HPGjh3LcccdR+3atWndujW1atWie/fuuWMtM03d3yIiIiJJsnjxYrZs2UKHDh3ybO/YsSPPPfccJ598MgBlypQB4Morr8zdp0WLFkyePDlP13bNmjWpWbMmc+bMYdKkScybN48rr7ySYsWKMW/ePKpXr06rVq3o3bt3Go5u99RSmSH5mRGW4+67787d99VXXwVg1apVtGvXjnLlynHsscfy5Zdf5u7fvn17Hn744ZTWX0RERHZ0zjnn8Pe//z33p3LlygCMGjWKFi1aULZsWcqWLcumTZv48ccfOf7447nzzjuZOHEivXr1AqBly5Z5XnPbtm306dOH2267jcqVK7Nt2zYWLVrE+PHj2bhxY25raKYpqMyAxBlhv2bOnDkMHjyYcuXK5dl+33338eGHHzJixAi++eYbbrrpJgAmTpzIpk2b6Nu3b0rqLiIiIrvWuHFjzj777NyfffbZB4AOHTpw8MEH59m3dOnS1KxZk9GjR3PJJZfw0UcfcdFFFzFp0qQ8+40aNYry5ctz0UUXATBkyBAOOOAAhg4dyimnnEL37t3Tc3C/Qt3fabYnM8I2btzI+eefz3nnncfSpUt5++23c59bt24dFSpUoEOHDjz++OOsXbuW7777jr/85S+88cYbmFk6DkdERER2Y8mSJXkeu3uex08++eSvvsbAgQMZOHBg7uOsrCw+/vjjpNQvmdRSmUZ7OiNs4MCBbN26lTFjxuzwXI8ePVi7di2NGzfmk08+4dJLL+Wqq67i4osvpkmTJqmovoiIiMguqaUyjXJmhL388ss7zAirWbNmni7u6dOnM3bsWB5//HFWrlzJTz/9BMC3337Ljz/+SNOmTVmyZAmfffYZ9evXZ9asWXz44Yfcf//9dOvWjX/961/Uq1ePRx55hLp162bkeEVERIqq2tdNTXkZS24/NeVl7Am1VKZR4oywBg0a8M033wBhRtjrr7/Opk2bcrPuL1myBHenW7duNGjQgA8++ACAXr16MWHCBAD2339/jj/+eMqVK8dll13Ggw8+yN///ndeeOGF3KWbdtUimp+JQt27d6dy5cqUKlWKKlWq0L17d3744Qdg71s6SkRERFJLQWUa7cmMsDZt2uTZt3HjxgBcf/31dO7cOc/r3nDDDbRq1Yp27dqxbds2Nm7cyLhx4/jyyy93OiMsvxOF6tWrx0033cTYsWOpW7cujz/+OLfeeiuQd+moZ555hsmTJwMU2KWjREREJLXU/Z1GjRs3zg0OAQYNGgTsfEbYIYccwiGHHJL7OGdcZcuWLalfv37u9v/85z9MnjyZTz/9FAitiy+//DJDhw6lQYMGO7RU7slEoRtvvJEff/yRtWvX8vbbb/Pee+/lTgDa25aOEhERkdRSUJlBvzYjLNH06dN3ur158+asXLky93H58uWZOnXn4zi2nyi0fcqCnWnXrh2zZs3K/f/1118PhKWjLrnkEl544QWqV69O586d6dixIw899FCBXDpKREREUkvd30XIni4dBfDAAw/w3HPP0aFDB958883c8Zx729JRIiIiklpqqcyAdMwIgx1nhe3p0lEQlowCOPjgg/nnP//JI488wlVXXQXsXUtHiYiISGopqCxCzjnnnDwTaPr168eqVavyTBQC+Omnn1i0aBFDhgyhffv2lClThkcffRSAI488Ms9r7i1LR4mIiEhqKagsQvZkotC+++7Lt99+y+DBg9m0aRNVq1alX79+3HbbbXn229nSUd26dStwS0eJiIhIaimoLMJ2N1HokEMO4b333vvV19hblo4SERGR1NJEHRERERGJTS2VRVBRXDpKREREUkstlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxJavoNLMRpvZEjNzM2u6m/0uNrOFZvalmY0zs5JJq6mIiIiIFFj5bal8GmgJLN3VDmZWB7gZOBGoD1QB+satoIiIiIgUfPkKKt19hrsv/5XdzgZedPcV7u7AQ8D5cSsoIiIiIgVfMsdU1iJvS+aSaNtOmdlAM1ue87N+/fokVkVERERE0qlEpgp293uAe3Ie16hRwzNVFxEREZFkWlLmgjSU8mMaysi/ZLZULgMOSXhcO9omIiIiIoVcMoPKZ4AuZlbVzAy4FJiSxNcXERERkQIqvymFHjaz5UAN4DUzWxRtH29mXQDc/StgGDATWASsAh5OSa1FREREpEDJ15hKd79kF9t7b/d4HDAuCfUSERERkb2IVtQRERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKZImbdq04YADDqBUqVLUqFGDAQMGsHnz5t3+TpcuXTAzzIxNmzYB8P7779O4cWPKly9P165dc19j9erVVK9enU8++STlxyIiIrI9BZUiadK0aVPuvPNOHnjgAfbdd1/GjBnD+PHjd7n/Aw88wFtvvbXD9muuuYaSJUsybNgwnnnmGSZPngzA1VdfTY8ePcjKykrZMYiIiOyKgkqRNBk5ciRnnXUWbdu25ZBDDgHAzHa672effcagQYMYPXr0Ds+tW7eOOnXq0KFDB0qXLs3atWt54403mDlzJkOGDEnpMYiIiOyKgkqRNGrYsCH16tXjtddeo1u3bvTu3XuHfTZv3swFF1zAaaedxkUXXbTD8/379+ell16iadOmVKxYkc6dO3PppZfy4IMPUrZs2XQchoiIyA4UVIqk0bPPPsuTTz5J8+bNmTJlCi+99NIO+9x+++0sW7aMa665hkWLFuVu/+qrr9iyZQu9e/dmyZIlvPvuu3z++eeMHTuW4447jtq1a9O6dWtq1apF9+7df3W8poiISDKVyHQFRIqSk046Kff/5557LhMnTuSMM85gy5YtFCtWjFKlSrF48WLWrFlD8+bN8/xukyZNmD17Nk2bNqVmzZrUrFmTOXPmMGnSJObNm8eVV15JsWLFmDdvHtWrV6dVq1Y7bQkVERFJBQWVImnw6quvMnnyZE444QTcnfvuuw+AI488khkzZtCmTRuOPfZY3nvvPS6//HI6d+6c+7tdu3YFYPLkydSpUyd3+7Zt2+jTpw+33XYblStXZtu2bSxatIjx48ezceNGsrOz03uQIiJSpCmoFEmDSpUqMW/ePJ577jmys7OpXr061113HcOGDWPmzJl59m3WrBnNmjXb4TXOOOMMypQpk/t41KhRlC9fPnfc5ZAhQ+jWrRtDhw7llFNOoXv37qk9KBERkQQKKkXSoFmzZsyePXunz7Vu3Rp33+Xv7uq5gQMHMnDgwNzHWVlZfPzxx/EqKiIi8htpoo6IiIiIxKaWSpE0qn3d1JSXseT2U1NehoiIyPbUUikiIiIisSmoFBEREZHYFFSKiIiISGwKKkVERFKgTZs2HHDAAZQqVYoaNWowYMCAXa509ac//YnatWtjZpgZS5YsyX3u5Zdfpnbt2lSoUIF+/frlbl+4cCHVqlVjxYoVqT4UkXxRUCkiIpICTZs25c477+SBBx5g3333ZcyYMYwfP36n+27dupXzzz+f/fbbb4fn+vXrR506dbj88st58MEHeeuttwDo27cvw4cPp2rVqik9DpH8UlApIiKSAiNHjuSss86ibdu2HHLIIQCY2U73HTNmDLfddhtly5bd4bl169bRuHFj2rdvD8DatWt55JFH2Lp1K3369EndAYjsIaUUEhERSZGGDRuyevVqALp160bv3r33+DWuuOIKbrrpJh544AGysrLIysrihBNOYNq0absMUkUyQS2VIiIiKfLss8/y5JNP0rx5c6ZMmcJLL720x68xfPhwFi5cyPvvv8+sWbMYPHgwffr0Yf369TRv3pzatWvzpz/9abcrc4mkg1oqRUREUuSkk07K/f+5557LxIkTOeOMM9iyZQvFihWjVKlS+Xqd+vXrA2HSzuzZs5k0aRJt27alSZMmDB06lHr16nHqqafmdpGLZIKCShERkSR79dVXmTx5MieccALuzn333QfAkUceyYwZM2jTpg3HHnss7733HgBTp07l22+/5aeffgLgySefpHbt2px77rm5r7l+/Xr69+/PhAkTKFOmDNu2bWPOnDlMmDABgOzs7DQfpUheCipFRESSrFKlSsybN4/nnnuO7OxsqlevznXXXcewYcOYOXPmDvv/3//9H2+//Xbu4+uuu45DDjkkT1A5ePBg2rRpQ9u2bQG488476d27NyNHjqRnz5506NAh9QcmshsKKkVERJKsWbNmzJ49e6fPtW7deofxj9OnT//V1xw9enSex61atWLhwoW/uY4iyaagUkREJEVqXzc1LeUsuf3UtJQjsjua/S0iIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpRQJa9as4Q9/+AM1a9akTJky1KpVi+uvv56ff/55p/u7O3fddRcNGjSgVKlSVKlSheuuuw6AhQsX0qJFC8qVK0f79u1ZvXo1AFu2bKFx48a89tpraTsuERGRgqJEpisgkg4//vgj8+fPp2/fvlSuXJnbbruNESNGULVqVQYMGLDD/jfccAMjRoygRYsWXHPNNWzYsIE1a9YAcPPNN7NixQpuvfVWhgwZwujRoxk+fDgjRoygadOmdOzYMd2HJyIF1JIyF6SppB/TVI7IrimolCKhRo0azJ8/n+LFiwOwefNmrrrqKubMmbPDvhs3bmTkyJGUL1+e1157jVKlSrHPPvvkPr9u3TqqVatGx44dufvuu1m7di3z58/noYce4uOPP07XIYmIiBQo6v6WIqFEiRK5AeXPP//M1KlTAWjfvv0O+3766af89NNPlC5dmqysLMqVK0fNmjV59tlnAejbty8ff/wxjRs3Zv369fTo0YM+ffpwyy23UKVKlfQdlIiISAGioFKKlM2bN3PBBRfw+uuvc8UVV3D++efvsE9O8Ll69Wp69+7NpEmTWLVqFRdccAGrV6+mU6dOLFu2jJkzZ7J48WLeffddihUrRpcuXTjttNOoWbMmp512Wu5YSxERkaJAQaUUGT/88AMdO3bkySefZNiwYYwaNQoIk3I2bdrE5s2bAahbty7FioWvxnXXXceFF17IYYcdxubNm1m2bBkABx10EMcffzwbN25k2LBhPPzww9x77718/vnnLFiwgPnz5zNy5MjMHKiIiEgGaEylFAnr16+nZcuWfPrpp5x88skcdthhTJkyhYMOOoi6detSp04dqlSpwooVK9h///3p1q0bf/3rX/nzn/9M7dq1+fTTTzn44INp1KhRntft378/l112GY0aNWLbtm2sXLmScePGsWrVKrKzszN0tCIiIumnoFKKhP/97398+umnALz66qu8+uqrALRq1YqJEyfusP99992HmfHYY4/h7rRp04a77rqLMmXK5O7z7LPP8tlnnzFlyhQArrzySmbOnMngwYM55phjuPLKK1N/YCIiIgWEgkopEmrXro277/L57Z+rUKECkyZN2u1rnnnmmZx55pm5jw8++GD+/e9/x6uoiIjIXkpjKkVEREQkNrVUSpFy+KTD01LOvB7z0lKOiIhIQaGWShGRQmpPlyfNMWDAAMwMM2PBggWAlicVkV+noFJEpJBKXJ703nvvxcwYMWIE999//y5/Z+rUqTz00EN5JqVB3uVJ33//fUaPHg2g5UlFJJe6v0VECqk9WZ4UYOXKlfTq1YvBgwczadIkli5dmvuclicVkV+jlkoRkUJqT5YndXd69uxJ/fr1GTp06A7Pa3lSEfk1CipFRAq5/CxP+thjjzFt2jRuvPFGFi9enJu8f9myZWzYsEHLk4rIr1JQKSJSiOV3edLFixezZcsWOnToQIMGDfjmm28A6NixI6+//jqg5UlFZPcUVIqIFFI5y5O+/fbbeZYnnTZtGkuXLqVs2bIccsghAJxzzjn8/e9/z/2pXLkyAKNGjaJFixZ5XndvWZ50T2e/t2nThgMOOIBSpUpRo0YNBgwYkBt0v/zyy9SuXZsKFSrQr1+/3N9ZuHAh1apVY8WKFWk5JpGCTBN1REQKqT1ZnrRx48Y0btw49/GgQYMA6NChAwcffHDu9r1pedLE2e+VK1fmtttuY8SIEVStWpUBAwbssH/Tpk254IILMDPuvvtuxowZw2GHHUb//v3p168f9erVo1u3bowYMYKuXbvSpk0b+vbty/Dhw6latWoGjlCkYFFQKSJSSO3p8qSJlixZstPte9PypHs6+33kyJF8//33/PDDDzz99NMsWLAAMwPC7PfGjRvTvn17RowYwdq1a3nkkUfYunUrffr0SdchiRRoCipFRAq52tdNTUs5S24/NS3l5FeJEr9c4n5t9nuOhg0b5k426tatG7179wbgiiuu4KabbuKBBx4gKyuLrKwsTjjhBKZNm5YbeIoUdRpTKSIihVp+Zr/nePbZZ3nyySdp3rw5U6ZM4aWXXgJg+PDhLFy4kPfff59Zs2YxePBg+vTpw/r162nevDm1a9fmT3/6025bf0UKO7VUiohIofXDDz9w+umn8/bbbzNs2DBuvPFGIHT9b968GTOjdOnSufufdNJJuf8/99xzmThxImeddRYA9evXB8KkndmzZzNp0iTatm1LkyZNGDp0KPXq1ePUU0/dbUuoSGGmoFJERAqlnNnvn376aZ7Z7wcddBB169alTp06VKlShRUrVvDqq68yefJkTjjhBNyd++67D4Ajjzxyh9fs378/EyZMoEyZMmzbto05c+YwYcIEgAI1+10k3RRUiohIobQns98rVarEvHnzeO6558jOzqZ69epcd911DBs2LM9+gwcPpk2bNrRt2xaAO++8k969ezNy5Eh69uxJhw4dUn9gIgWUxlSKFAF7mq/vjjvuoGHDhhQrVgwzY/r06bnPvf/++zRu3Jjy5cvTtWvX3Dx+q1evpnr16nzyySfpOCSRX5Uz+337n+nTp+c+l5NfslmzZsyePZt169bx008/sWjRIm677TZKliyZ5zVHjx6dJyBt1aoVCxcuZP369UyYMIFixXRZlaJLLZUiRcCe5uvbtGkTnTt35tlnn2Xp0qV5nrvmmmsoWbIkw4YN49prr+WUU07hoosu4uqrr6ZHjx5kZWWl67BE8iUds98L2sx3kUwoskHl4XVqpbyMeSkvQSR/9jRfX06X3zvvvLNDULlu3Trq1KlDhw4dGDp0KGvXruWNN95g5syZzJ07N6XHISIiBVeRDSozad9G16WppIJ556yAPv1+S76+Xenfvz+XXHIJL7zwAtWrV6dz58507NiRhx56iLJlyyatziIisnfR4A+RImRP8vXtSu/evVmyZAnvvvsun3/+OWPHjuW4446jdu3atG7dmlq1atG9e/fcsZYiIlI0qKVSpIjY03x9u1OzZk1q1qzJnDlzmDRpEvPmzePKK6+kWLFizJs3j+rVq9OqVavc1UhERKTwU1ApkkbpGfqw47CHPcnXBzBjxgy++OILVq1aBcDUqVNZtGhRniBx27Zt9OnTh9tuu43KlSuzbds2Fi1axPjx49m4caPy9YmIFDEKKougTAU2kjl7kq8P4NFHH2XSpEm5j++66y6APEHlqFGjKF++PBdddBEAQ4YMoVu3bgwdOpRTTjmF7t27p+pwRESkAFJQKVIE5OTk25Xtn5s4ceJOg81EAwcOZODAgbmPs7Ky+Pjjj2PVU0RE9l4KKkWKkMMnHZ7yMub10Nx7EZGiSLO/RURERCS2fAeVZtbAzN4xsy/M7D9m1mQn+7Q2s5/MbE7CjxLXiYiIiBRye9L9/TAw1t0nmtnZwESg+U72+9zdmyahbiIiIiKyl8hXS6WZHQQ0Ax6PNj0D1DSz+qmqmIiIiIjsPfLb/V0T+NbdswE8TBVdBuxsvb16ZvZR1EXeL0n1FBEREZECLNmzvz8Carj7j2ZWA3jFzP7n7k9tv6OZDQRy85FUqFAhyVURERERkXTJb0vl10A1MysBYGZGaKVclriTu6919x+j/y8HngBO3NkLuvs97l4j56d8+fK/9RhEREREJMPyFVS6+3eEVsg/RpvOApa7+6LE/cysmpkVi/6/L9AZmJ286oqIiIhIQbQneSovAS4xsy+A64CLAMxsvJl1ifY5C5hnZh8D7wGvAxOSWF8RERERKYDyPabS3T8HjtvJ9t4J/x8DjElO1URERERkb6FlGkVEpFBbUuaCNJTyYxrKECnYtEyjiIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbCUyXQERKRoOr1MrLeXMS0spIiKyPbVUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISW4lMV0BERFJr30bXpamkU9NUjogURGqpFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEppRCIiKSUofXqZXyMualvAQR+TVqqRQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISmybqiIiISEpoklbRoqBSRERECp10BLSgoDaRur9FREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEppZCIFAnKlyciklpqqRQRERGR2BRUioiIiEhsCipFRFJo/vz5tGvXjrJly1KpUiWuuOIKtmzZstN9t2zZwl/+8hdq1apFqVKlqFGjBqNHjwbg/fffp3HjxpQvX56uXbuyefNmAFavXk316tX55JNP0nZMIiI7o6BSRCRFsrOz6dKlCzNnzuTmm2+mY8eO3Hfffdx000073f+iiy7i9ttvp3Hjxjz44IP0798fdwfgmmuuoWTJkgwbNoxnnnmGyZMnA3D11VfTo0cPsrKy0nZcIiI7o4k6IiIp8tprr7Fo0SLOPPNMBg0axIYNG3jqqae47777uOWWW/Ls+9VXXzF58mTq1KnDiy++yLZt2yhbtmzu8+vWraNOnTp06NCBoUOHsnbtWt544w1mzpzJ3Llz031oIiI7UEuliEiKLFy4EIBatcLM83LlylGpUiXWrl3LypUr8+w7a9YsALZu3Uq1atXYZ599OOyww5gxYwYA/fv356WXXqJp06ZUrFiRzp07c+mll/Lggw/mCT5FRDJFQaWISBrldGdvr3jx4gB888033Hzzzdx77718/vnndO3aFXend+/eLFmyhHfffZfPP/+csWPHctxxx1G7dm1at25NrVq16N69e+5YSxGRdFP3t4hIijRo0ACApUuXArBhwwZWr17NfvvtR+XKldm0aRPFihWjVKlSufsedNBB9OvXD4Bhw4bx3Xff8cMPP3DAAQdQs2ZNatasyZw5c5g0aRLz5s3jyiuvpFixYsybN4/q1avTqlUrevfunZkDFpEiTUGliEiKdOzYkXr16vHKK69w1113MWfOHLKzs7n88suZMWMGbdq04dhjj+W9997j8MMP58QTT+Rf//oXN910E9nZ2fz4448cffTRHHDAAbmvuW3bNvr06cNtt91G5cqV2bZtG4sWLWL8+PFs3LiR7OzsDB6xiBRlCipFRFKkRIkSvPDCCwwYMIAbbriBcuXK0b9/f4YOHcq77767w/5PPPEE/fv3584776R06dKcccYZjBw5Ms8+o0aNonz58lx0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",
|
1816 |
+
"text/plain": [
|
1817 |
+
"<Figure size 800x800 with 1 Axes>"
|
1818 |
+
]
|
1819 |
+
},
|
1820 |
+
"metadata": {
|
1821 |
+
"needs_background": "light"
|
1822 |
+
},
|
1823 |
+
"output_type": "display_data"
|
1824 |
+
}
|
1825 |
+
],
|
1826 |
+
"source": [
|
1827 |
+
"plt.figure(figsize=(10, 10), dpi=80)\n",
|
1828 |
+
"\n",
|
1829 |
+
"total_counts = final_labels.shape[0] * final_labels.shape[1]\n",
|
1830 |
+
"unique, final_counts = np.unique(final_labels, return_counts=True)\n",
|
1831 |
+
"chart = plt.bar(CLASS_LABELS[unique], final_counts)\n",
|
1832 |
+
"plt.xticks(rotation=70)\n",
|
1833 |
+
"\n",
|
1834 |
+
"unique, counts = np.unique(new_labels, return_counts=True)\n",
|
1835 |
+
"plt.bar(CLASS_LABELS[unique], counts)\n",
|
1836 |
+
"plt.xticks(rotation=70)\n",
|
1837 |
+
"\n",
|
1838 |
+
"unique, counts = np.unique(labels, return_counts=True)\n",
|
1839 |
+
"plt.bar(CLASS_LABELS[unique], counts)\n",
|
1840 |
+
"plt.xticks(rotation=70)\n",
|
1841 |
+
"\n",
|
1842 |
+
"for i, p in enumerate(chart):\n",
|
1843 |
+
" width = p.get_width()\n",
|
1844 |
+
" height = p.get_height()\n",
|
1845 |
+
" x, y = p.get_xy()\n",
|
1846 |
+
" plt.text(x+width/2,\n",
|
1847 |
+
" y+height*1.01,\n",
|
1848 |
+
" str(round((final_counts[i] * 100) / total_counts, 1))+'%',\n",
|
1849 |
+
" ha='center',\n",
|
1850 |
+
" weight='bold')\n",
|
1851 |
+
"\n",
|
1852 |
+
"plt.legend([\"Final\", \"New\", \"Original\"])\n",
|
1853 |
+
"plt.show()\n"
|
1854 |
+
]
|
1855 |
+
},
|
1856 |
+
{
|
1857 |
+
"cell_type": "markdown",
|
1858 |
+
"metadata": {},
|
1859 |
+
"source": [
|
1860 |
+
"## Save new dataset"
|
1861 |
+
]
|
1862 |
+
},
|
1863 |
+
{
|
1864 |
+
"cell_type": "code",
|
1865 |
+
"execution_count": 15,
|
1866 |
+
"metadata": {},
|
1867 |
+
"outputs": [],
|
1868 |
+
"source": [
|
1869 |
+
"np.savez_compressed(\"new_dataset\", signals=final_signals, labels=final_labels)\n"
|
1870 |
+
]
|
1871 |
+
}
|
1872 |
+
],
|
1873 |
+
"metadata": {
|
1874 |
+
"interpreter": {
|
1875 |
+
"hash": "9185113d2128201d66faecd4f34fb34e89a635073a034991399523e584519355"
|
1876 |
+
},
|
1877 |
+
"kernelspec": {
|
1878 |
+
"display_name": "Python 3.9.7 64-bit ('base': conda)",
|
1879 |
+
"language": "python",
|
1880 |
+
"name": "python3"
|
1881 |
+
},
|
1882 |
+
"language_info": {
|
1883 |
+
"codemirror_mode": {
|
1884 |
+
"name": "ipython",
|
1885 |
+
"version": 3
|
1886 |
+
},
|
1887 |
+
"file_extension": ".py",
|
1888 |
+
"mimetype": "text/x-python",
|
1889 |
+
"name": "python",
|
1890 |
+
"nbconvert_exporter": "python",
|
1891 |
+
"pygments_lexer": "ipython3",
|
1892 |
+
"version": "3.9.10"
|
1893 |
+
},
|
1894 |
+
"orig_nbformat": 4
|
1895 |
+
},
|
1896 |
+
"nbformat": 4,
|
1897 |
+
"nbformat_minor": 2
|
1898 |
+
}
|
LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
MIT License
|
2 |
+
|
3 |
+
Copyright (c) 2022 Bc. Martin Kubovčík
|
4 |
+
|
5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6 |
+
of this software and associated documentation files (the "Software"), to deal
|
7 |
+
in the Software without restriction, including without limitation the rights
|
8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9 |
+
copies of the Software, and to permit persons to whom the Software is
|
10 |
+
furnished to do so, subject to the following conditions:
|
11 |
+
|
12 |
+
The above copyright notice and this permission notice shall be included in all
|
13 |
+
copies or substantial portions of the Software.
|
14 |
+
|
15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21 |
+
SOFTWARE.
|
README.md
CHANGED
@@ -1,3 +1,45 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# HAR Transformer
|
2 |
+
Transformer for Human Activity Recognition
|
3 |
+
|
4 |
+
Please check our paper [Wearable Sensor-Based Human Activity Recognition with Transformer Model](https://www.mdpi.com/1424-8220/22/5/1911) for more details.
|
5 |
+
|
6 |
+
![Tag](https://img.shields.io/github/v/tag/markub3327/HAR-Transformer)
|
7 |
+
[![Issues](https://img.shields.io/github/issues/markub3327/HAR-Transformer)](https://github.com/markub3327/HAR-Transformer/issues)
|
8 |
+
![Commits](https://img.shields.io/github/commit-activity/w/markub3327/HAR-Transformer)
|
9 |
+
![Size](https://img.shields.io/github/repo-size/markub3327/HAR-Transformer)
|
10 |
+
|
11 |
+
## Papers
|
12 |
+
* Sikder, N.; Nahid, A.A.; KU-HAR: An open dataset for heterogeneous human activity recognition. Pattern Recognition Letters 2021, 146, 46-54, DOI: 10.1016/j.patrec.2021.02.024.
|
13 |
+
* Vaswani, A.; Shazeer, N.; Parmar, N.; Uszkoreit, J.; Jones, L.; Gomez, A.N.; Kaiser, Ł.; Polosukhin, I. Attention is all you need. Advances in neural information processing systems 2017, 30.
|
14 |
+
* Dosovitskiy, A.; Beyer, L.; Kolesnikov, A.; Weissenborn, D.; Zhai, X.; Unterthiner, T.; Dehghani, M.; Minderer, M.; Heigold, G.; Gelly, S.; Uszkoreit, J. An image is worth 16x16 words: Transformers for image recognition at scale. 2020, arXiv preprint arXiv:2010.11929.
|
15 |
+
* Bao, H.; Dong, L.; Wei, F. Beit: Bert pre-training of image transformers. 2021, arXiv preprint arXiv:2106.08254.
|
16 |
+
|
17 |
+
## Description
|
18 |
+
|
19 |
+
The Transformer for Human Activity Recognition operates in sequence-to-sequence mode and predicts the class for each time series feature. The advantage is that if there are several consecutive classes in one time series, these classes can be easily identified, and the transformer is not limited to the features in the whole time series belonging to one class.
|
20 |
+
|
21 |
+
## Dataset
|
22 |
+
|
23 |
+
[KU-HAR](https://www.kaggle.com/datasets/niloy333/kuhar?resource=download)
|
24 |
+
|
25 |
+
## Model
|
26 |
+
|
27 |
+
<p align="center">
|
28 |
+
<img src="img/model.png" style="background-color: white;">
|
29 |
+
</p>
|
30 |
+
|
31 |
+
## Results
|
32 |
+
|
33 |
+
<p align="center">
|
34 |
+
<b>Confusion matrix</b>
|
35 |
+
<img src="img/result.png" style="background-color: white;">
|
36 |
+
</p>
|
37 |
+
|
38 |
+
<p align="center">
|
39 |
+
<b>Hyperparameters</b>
|
40 |
+
<img src="img/hyperparams.png">
|
41 |
+
</p>
|
42 |
+
|
43 |
+
----------------------------------
|
44 |
+
|
45 |
+
**Frameworks:** TensorFlow, NumPy, Pandas, Scikit-learn, WanDB
|
Testing.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
Training.ipynb
ADDED
@@ -0,0 +1,1118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "markdown",
|
5 |
+
"metadata": {
|
6 |
+
"id": "VhQSb7PdZznG"
|
7 |
+
},
|
8 |
+
"source": [
|
9 |
+
"# Sequence-to-sequence activity recognition"
|
10 |
+
]
|
11 |
+
},
|
12 |
+
{
|
13 |
+
"cell_type": "code",
|
14 |
+
"execution_count": null,
|
15 |
+
"metadata": {
|
16 |
+
"colab": {
|
17 |
+
"base_uri": "https://localhost:8080/"
|
18 |
+
},
|
19 |
+
"id": "n2y0GYTdc-nY",
|
20 |
+
"outputId": "8a4c97ee-752b-4ef3-a83d-e6da46c5f019"
|
21 |
+
},
|
22 |
+
"outputs": [],
|
23 |
+
"source": [
|
24 |
+
"!pip3 install wandb"
|
25 |
+
]
|
26 |
+
},
|
27 |
+
{
|
28 |
+
"cell_type": "code",
|
29 |
+
"execution_count": null,
|
30 |
+
"metadata": {
|
31 |
+
"colab": {
|
32 |
+
"base_uri": "https://localhost:8080/"
|
33 |
+
},
|
34 |
+
"id": "gSxOaWIFSBM-",
|
35 |
+
"outputId": "475bc447-6414-46af-c5ec-49526e2808f8"
|
36 |
+
},
|
37 |
+
"outputs": [],
|
38 |
+
"source": [
|
39 |
+
"!pip3 install git+https://github.com/tensorflow/addons.git"
|
40 |
+
]
|
41 |
+
},
|
42 |
+
{
|
43 |
+
"cell_type": "code",
|
44 |
+
"execution_count": null,
|
45 |
+
"metadata": {
|
46 |
+
"id": "VSncNSHtZznI"
|
47 |
+
},
|
48 |
+
"outputs": [],
|
49 |
+
"source": [
|
50 |
+
"from tensorflow.keras.layers import Add, Dense, Dropout, MultiHeadAttention, LayerNormalization, Layer, Normalization\n",
|
51 |
+
"from tensorflow.keras.optimizers import Adam\n",
|
52 |
+
"from tensorflow.keras import Model\n",
|
53 |
+
"from tensorflow.keras.initializers import TruncatedNormal\n",
|
54 |
+
"from tensorflow.keras.callbacks import EarlyStopping, LearningRateScheduler, Callback\n",
|
55 |
+
"from tensorflow_addons.optimizers import AdamW\n",
|
56 |
+
"from wandb.keras import WandbCallback\n",
|
57 |
+
"from sklearn.model_selection import train_test_split \n",
|
58 |
+
"\n",
|
59 |
+
"import math\n",
|
60 |
+
"import wandb\n",
|
61 |
+
"import numpy as np\n",
|
62 |
+
"import pandas as pd\n",
|
63 |
+
"import tensorflow as tf\n",
|
64 |
+
"import seaborn as sns\n",
|
65 |
+
"import matplotlib.pyplot as plt\n"
|
66 |
+
]
|
67 |
+
},
|
68 |
+
{
|
69 |
+
"cell_type": "markdown",
|
70 |
+
"metadata": {
|
71 |
+
"id": "_kdFgpMxZznJ"
|
72 |
+
},
|
73 |
+
"source": [
|
74 |
+
"## Init logger"
|
75 |
+
]
|
76 |
+
},
|
77 |
+
{
|
78 |
+
"cell_type": "code",
|
79 |
+
"execution_count": null,
|
80 |
+
"metadata": {
|
81 |
+
"colab": {
|
82 |
+
"base_uri": "https://localhost:8080/"
|
83 |
+
},
|
84 |
+
"id": "Z6DnpqLPZznK",
|
85 |
+
"outputId": "078f5861-e753-4525-fe92-0516ac23f007"
|
86 |
+
},
|
87 |
+
"outputs": [],
|
88 |
+
"source": [
|
89 |
+
"wandb.login()\n",
|
90 |
+
"\n",
|
91 |
+
"sweep_config = {\n",
|
92 |
+
" 'method': 'grid',\n",
|
93 |
+
" 'metric': {\n",
|
94 |
+
" 'goal': 'maximize',\n",
|
95 |
+
" 'name': 'val_accuracy'\n",
|
96 |
+
" },\n",
|
97 |
+
" 'parameters': {\n",
|
98 |
+
" 'epochs': {\n",
|
99 |
+
" 'value': 50\n",
|
100 |
+
" },\n",
|
101 |
+
" 'num_layers': {\n",
|
102 |
+
" 'value': 3\n",
|
103 |
+
" },\n",
|
104 |
+
" 'embed_layer_size': {\n",
|
105 |
+
" 'value': 128\n",
|
106 |
+
" },\n",
|
107 |
+
" 'fc_layer_size': {\n",
|
108 |
+
" 'value': 256\n",
|
109 |
+
" },\n",
|
110 |
+
" 'num_heads': {\n",
|
111 |
+
" 'value': 6\n",
|
112 |
+
" },\n",
|
113 |
+
" 'dropout': {\n",
|
114 |
+
" 'value': 0.1\n",
|
115 |
+
" },\n",
|
116 |
+
" 'attention_dropout': {\n",
|
117 |
+
" 'value': 0.1\n",
|
118 |
+
" },\n",
|
119 |
+
" 'optimizer': {\n",
|
120 |
+
" 'value': 'adam'\n",
|
121 |
+
" },\n",
|
122 |
+
" 'amsgrad': {\n",
|
123 |
+
" 'value': False\n",
|
124 |
+
" },\n",
|
125 |
+
" 'label_smoothing': {\n",
|
126 |
+
" 'value': 0.1\n",
|
127 |
+
" },\n",
|
128 |
+
" 'learning_rate': {\n",
|
129 |
+
" 'value': 1e-3\n",
|
130 |
+
" },\n",
|
131 |
+
" #'weight_decay': {\n",
|
132 |
+
" # 'values': [2.5e-4, 1e-4, 5e-5, 1e-5]\n",
|
133 |
+
" #},\n",
|
134 |
+
" 'warmup_steps': {\n",
|
135 |
+
" 'value': 10\n",
|
136 |
+
" },\n",
|
137 |
+
" 'batch_size': {\n",
|
138 |
+
" 'value': 64\n",
|
139 |
+
" },\n",
|
140 |
+
" 'global_clipnorm': {\n",
|
141 |
+
" 'value': 3.0\n",
|
142 |
+
" },\n",
|
143 |
+
" }\n",
|
144 |
+
"}\n",
|
145 |
+
"\n",
|
146 |
+
"sweep_id = wandb.sweep(sweep_config, project=\"HAR-Transformer\")\n"
|
147 |
+
]
|
148 |
+
},
|
149 |
+
{
|
150 |
+
"cell_type": "markdown",
|
151 |
+
"metadata": {
|
152 |
+
"id": "-mGp0L3_ZznL"
|
153 |
+
},
|
154 |
+
"source": [
|
155 |
+
"## Layer"
|
156 |
+
]
|
157 |
+
},
|
158 |
+
{
|
159 |
+
"cell_type": "code",
|
160 |
+
"execution_count": null,
|
161 |
+
"metadata": {
|
162 |
+
"id": "0lFGhNtyZznL"
|
163 |
+
},
|
164 |
+
"outputs": [],
|
165 |
+
"source": [
|
166 |
+
"class PositionalEmbedding(Layer):\n",
|
167 |
+
" def __init__(self, units, dropout_rate, **kwargs):\n",
|
168 |
+
" super(PositionalEmbedding, self).__init__(**kwargs)\n",
|
169 |
+
"\n",
|
170 |
+
" self.units = units\n",
|
171 |
+
"\n",
|
172 |
+
" self.projection = Dense(units, kernel_initializer=TruncatedNormal(stddev=0.02))\n",
|
173 |
+
"\n",
|
174 |
+
" self.dropout = Dropout(rate=dropout_rate)\n",
|
175 |
+
"\n",
|
176 |
+
" def build(self, input_shape):\n",
|
177 |
+
" super(PositionalEmbedding, self).build(input_shape)\n",
|
178 |
+
"\n",
|
179 |
+
" self.position = self.add_weight(\n",
|
180 |
+
" name=\"position\",\n",
|
181 |
+
" shape=(1, input_shape[1], self.units),\n",
|
182 |
+
" initializer=TruncatedNormal(stddev=0.02),\n",
|
183 |
+
" trainable=True,\n",
|
184 |
+
" )\n",
|
185 |
+
"\n",
|
186 |
+
" def call(self, inputs, training):\n",
|
187 |
+
" x = self.projection(inputs)\n",
|
188 |
+
" x = x + self.position\n",
|
189 |
+
"\n",
|
190 |
+
" return self.dropout(x, training=training)\n"
|
191 |
+
]
|
192 |
+
},
|
193 |
+
{
|
194 |
+
"cell_type": "code",
|
195 |
+
"execution_count": null,
|
196 |
+
"metadata": {
|
197 |
+
"id": "PIwd6GlIZznM"
|
198 |
+
},
|
199 |
+
"outputs": [],
|
200 |
+
"source": [
|
201 |
+
"class Encoder(Layer):\n",
|
202 |
+
" def __init__(\n",
|
203 |
+
" self, embed_dim, mlp_dim, num_heads, dropout_rate, attention_dropout_rate, **kwargs\n",
|
204 |
+
" ):\n",
|
205 |
+
" super(Encoder, self).__init__(**kwargs)\n",
|
206 |
+
"\n",
|
207 |
+
" self.mha = MultiHeadAttention(\n",
|
208 |
+
" num_heads=num_heads,\n",
|
209 |
+
" key_dim=embed_dim,\n",
|
210 |
+
" dropout=attention_dropout_rate,\n",
|
211 |
+
" kernel_initializer=TruncatedNormal(stddev=0.02),\n",
|
212 |
+
" )\n",
|
213 |
+
"\n",
|
214 |
+
" self.dense_0 = Dense(\n",
|
215 |
+
" units=mlp_dim,\n",
|
216 |
+
" activation=\"gelu\",\n",
|
217 |
+
" kernel_initializer=TruncatedNormal(stddev=0.02),\n",
|
218 |
+
" )\n",
|
219 |
+
" self.dense_1 = Dense(\n",
|
220 |
+
" units=embed_dim, kernel_initializer=TruncatedNormal(stddev=0.02)\n",
|
221 |
+
" )\n",
|
222 |
+
"\n",
|
223 |
+
" self.dropout_0 = Dropout(rate=dropout_rate)\n",
|
224 |
+
" self.dropout_1 = Dropout(rate=dropout_rate)\n",
|
225 |
+
"\n",
|
226 |
+
" self.norm_0 = LayerNormalization(epsilon=1e-5)\n",
|
227 |
+
" self.norm_1 = LayerNormalization(epsilon=1e-5)\n",
|
228 |
+
"\n",
|
229 |
+
" self.add_0 = Add()\n",
|
230 |
+
" self.add_1 = Add()\n",
|
231 |
+
"\n",
|
232 |
+
" def call(self, inputs, training):\n",
|
233 |
+
" # Attention block\n",
|
234 |
+
" x = self.norm_0(inputs)\n",
|
235 |
+
" x = self.mha(\n",
|
236 |
+
" query=x,\n",
|
237 |
+
" value=x,\n",
|
238 |
+
" key=x,\n",
|
239 |
+
" training=training,\n",
|
240 |
+
" )\n",
|
241 |
+
" x = self.dropout_0(x, training=training)\n",
|
242 |
+
" x = self.add_0([x, inputs])\n",
|
243 |
+
"\n",
|
244 |
+
" # MLP block\n",
|
245 |
+
" y = self.norm_1(x)\n",
|
246 |
+
" y = self.dense_0(y)\n",
|
247 |
+
" y = self.dense_1(y)\n",
|
248 |
+
" y = self.dropout_1(y, training=training)\n",
|
249 |
+
"\n",
|
250 |
+
" return self.add_1([x, y])\n"
|
251 |
+
]
|
252 |
+
},
|
253 |
+
{
|
254 |
+
"cell_type": "markdown",
|
255 |
+
"metadata": {
|
256 |
+
"id": "YRQTRP60ZznN"
|
257 |
+
},
|
258 |
+
"source": [
|
259 |
+
"## Model"
|
260 |
+
]
|
261 |
+
},
|
262 |
+
{
|
263 |
+
"cell_type": "code",
|
264 |
+
"execution_count": null,
|
265 |
+
"metadata": {
|
266 |
+
"id": "UYEKK7pYZznN"
|
267 |
+
},
|
268 |
+
"outputs": [],
|
269 |
+
"source": [
|
270 |
+
"class Transformer(Model):\n",
|
271 |
+
" def __init__(\n",
|
272 |
+
" self,\n",
|
273 |
+
" num_layers,\n",
|
274 |
+
" embed_dim,\n",
|
275 |
+
" mlp_dim,\n",
|
276 |
+
" num_heads,\n",
|
277 |
+
" num_classes,\n",
|
278 |
+
" dropout_rate,\n",
|
279 |
+
" attention_dropout_rate,\n",
|
280 |
+
" **kwargs\n",
|
281 |
+
" ):\n",
|
282 |
+
" super(Transformer, self).__init__(**kwargs)\n",
|
283 |
+
"\n",
|
284 |
+
" # Input (normalization of RAW measurements)\n",
|
285 |
+
" self.input_norm = Normalization()\n",
|
286 |
+
"\n",
|
287 |
+
" # Input\n",
|
288 |
+
" self.pos_embs = PositionalEmbedding(embed_dim, dropout_rate)\n",
|
289 |
+
"\n",
|
290 |
+
" # Encoder\n",
|
291 |
+
" self.e_layers = [\n",
|
292 |
+
" Encoder(embed_dim, mlp_dim, num_heads, dropout_rate, attention_dropout_rate)\n",
|
293 |
+
" for _ in range(num_layers)\n",
|
294 |
+
" ]\n",
|
295 |
+
"\n",
|
296 |
+
" # Output\n",
|
297 |
+
" self.norm = LayerNormalization(epsilon=1e-5)\n",
|
298 |
+
" self.final_layer = Dense(num_classes, kernel_initializer=\"zeros\")\n",
|
299 |
+
"\n",
|
300 |
+
" def call(self, inputs, training):\n",
|
301 |
+
" x = self.input_norm(inputs)\n",
|
302 |
+
" x = self.pos_embs(x, training=training)\n",
|
303 |
+
"\n",
|
304 |
+
" for layer in self.e_layers:\n",
|
305 |
+
" x = layer(x, training=training)\n",
|
306 |
+
"\n",
|
307 |
+
" x = self.norm(x)\n",
|
308 |
+
" x = self.final_layer(x)\n",
|
309 |
+
"\n",
|
310 |
+
" return x\n"
|
311 |
+
]
|
312 |
+
},
|
313 |
+
{
|
314 |
+
"cell_type": "markdown",
|
315 |
+
"metadata": {
|
316 |
+
"id": "j42cze_qiAIb"
|
317 |
+
},
|
318 |
+
"source": [
|
319 |
+
"## Loss"
|
320 |
+
]
|
321 |
+
},
|
322 |
+
{
|
323 |
+
"cell_type": "code",
|
324 |
+
"execution_count": null,
|
325 |
+
"metadata": {
|
326 |
+
"id": "NK6QapYViAIb"
|
327 |
+
},
|
328 |
+
"outputs": [],
|
329 |
+
"source": [
|
330 |
+
"def smoothed_sparse_categorical_crossentropy(label_smoothing: float = 0.0):\n",
|
331 |
+
" def loss_fn(y_true, y_pred):\n",
|
332 |
+
" num_classes = tf.shape(y_pred)[-1]\n",
|
333 |
+
" y_true = tf.one_hot(y_true, num_classes)\n",
|
334 |
+
"\n",
|
335 |
+
" loss = tf.keras.losses.categorical_crossentropy(y_true, y_pred, from_logits=True, label_smoothing=label_smoothing)\n",
|
336 |
+
" return tf.reduce_mean(loss)\n",
|
337 |
+
"\n",
|
338 |
+
" return loss_fn"
|
339 |
+
]
|
340 |
+
},
|
341 |
+
{
|
342 |
+
"cell_type": "markdown",
|
343 |
+
"metadata": {
|
344 |
+
"id": "PxmZ1ZWBAgLX"
|
345 |
+
},
|
346 |
+
"source": [
|
347 |
+
"## LR scheduler"
|
348 |
+
]
|
349 |
+
},
|
350 |
+
{
|
351 |
+
"cell_type": "code",
|
352 |
+
"execution_count": null,
|
353 |
+
"metadata": {
|
354 |
+
"id": "GEtbF3TdAjDU"
|
355 |
+
},
|
356 |
+
"outputs": [],
|
357 |
+
"source": [
|
358 |
+
"def cosine_schedule(base_lr, total_steps, warmup_steps):\n",
|
359 |
+
" def step_fn(epoch):\n",
|
360 |
+
" lr = base_lr\n",
|
361 |
+
" epoch += 1\n",
|
362 |
+
"\n",
|
363 |
+
" progress = (epoch - warmup_steps) / float(total_steps - warmup_steps)\n",
|
364 |
+
" progress = tf.clip_by_value(progress, 0.0, 1.0)\n",
|
365 |
+
" \n",
|
366 |
+
" lr = lr * 0.5 * (1.0 + tf.cos(math.pi * progress))\n",
|
367 |
+
"\n",
|
368 |
+
" if warmup_steps:\n",
|
369 |
+
" lr = lr * tf.minimum(1.0, epoch / warmup_steps)\n",
|
370 |
+
"\n",
|
371 |
+
" return lr\n",
|
372 |
+
"\n",
|
373 |
+
" return step_fn\n",
|
374 |
+
"\n"
|
375 |
+
]
|
376 |
+
},
|
377 |
+
{
|
378 |
+
"cell_type": "code",
|
379 |
+
"execution_count": null,
|
380 |
+
"metadata": {
|
381 |
+
"id": "MBlu9AxBHG09"
|
382 |
+
},
|
383 |
+
"outputs": [],
|
384 |
+
"source": [
|
385 |
+
"class PrintLR(Callback):\n",
|
386 |
+
" def on_epoch_end(self, epoch, logs=None):\n",
|
387 |
+
" wandb.log({\"lr\": self.model.optimizer.lr.numpy()}, commit=False)"
|
388 |
+
]
|
389 |
+
},
|
390 |
+
{
|
391 |
+
"cell_type": "markdown",
|
392 |
+
"metadata": {
|
393 |
+
"id": "7dIynjZAZznP"
|
394 |
+
},
|
395 |
+
"source": [
|
396 |
+
"## Dataset"
|
397 |
+
]
|
398 |
+
},
|
399 |
+
{
|
400 |
+
"cell_type": "code",
|
401 |
+
"execution_count": null,
|
402 |
+
"metadata": {
|
403 |
+
"colab": {
|
404 |
+
"base_uri": "https://localhost:8080/"
|
405 |
+
},
|
406 |
+
"id": "4GkimkgOZznP",
|
407 |
+
"outputId": "c43e079b-f8b2-4d51-f9b0-a5339a3c9b77"
|
408 |
+
},
|
409 |
+
"outputs": [
|
410 |
+
{
|
411 |
+
"name": "stdout",
|
412 |
+
"output_type": "stream",
|
413 |
+
"text": [
|
414 |
+
"(60060, 300, 6) (60060, 300)\n",
|
415 |
+
"(12470, 300, 6) (12470, 300)\n",
|
416 |
+
"(10599, 300, 6) (10599, 300)\n"
|
417 |
+
]
|
418 |
+
}
|
419 |
+
],
|
420 |
+
"source": [
|
421 |
+
"CLASS_LABELS = np.array(\n",
|
422 |
+
" [\n",
|
423 |
+
" \"Stand\",\n",
|
424 |
+
" \"Sit\",\n",
|
425 |
+
" \"Talk-sit\",\n",
|
426 |
+
" \"Talk-stand\",\n",
|
427 |
+
" \"Stand-sit\",\n",
|
428 |
+
" \"Lay\",\n",
|
429 |
+
" \"Lay-stand\",\n",
|
430 |
+
" \"Pick\",\n",
|
431 |
+
" \"Jump\",\n",
|
432 |
+
" \"Push-up\",\n",
|
433 |
+
" \"Sit-up\",\n",
|
434 |
+
" \"Walk\",\n",
|
435 |
+
" \"Walk-backward\",\n",
|
436 |
+
" \"Walk-circle\",\n",
|
437 |
+
" \"Run\",\n",
|
438 |
+
" \"Stair-up\",\n",
|
439 |
+
" \"Stair-down\",\n",
|
440 |
+
" \"Table-tennis\"\n",
|
441 |
+
" ]\n",
|
442 |
+
")\n",
|
443 |
+
"\n",
|
444 |
+
"# load dataset\n",
|
445 |
+
"f = np.load('./new_dataset.npz')\n",
|
446 |
+
"signals = f['signals']\n",
|
447 |
+
"labels = f['labels']\n",
|
448 |
+
"\n",
|
449 |
+
"# split to train-test\n",
|
450 |
+
"X_train, X_test, y_train, y_test = train_test_split(\n",
|
451 |
+
" signals, labels, test_size=0.15, random_state=9, stratify=labels\n",
|
452 |
+
")\n",
|
453 |
+
"X_train, X_val, y_train, y_val = train_test_split(\n",
|
454 |
+
" X_train, y_train, test_size=0.15, random_state=9, stratify=y_train\n",
|
455 |
+
")\n",
|
456 |
+
"print(X_train.shape, y_train.shape)\n",
|
457 |
+
"print(X_test.shape, y_test.shape)\n",
|
458 |
+
"print(X_val.shape, y_val.shape)\n"
|
459 |
+
]
|
460 |
+
},
|
461 |
+
{
|
462 |
+
"cell_type": "code",
|
463 |
+
"execution_count": null,
|
464 |
+
"metadata": {
|
465 |
+
"colab": {
|
466 |
+
"base_uri": "https://localhost:8080/",
|
467 |
+
"height": 739
|
468 |
+
},
|
469 |
+
"id": "RSXjG7qHZznQ",
|
470 |
+
"outputId": "c83fae89-3e09-4f05-eb7f-6c4b6ab76db4"
|
471 |
+
},
|
472 |
+
"outputs": [
|
473 |
+
{
|
474 |
+
"data": {
|
475 |
+
"image/png": "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v/oz//fNb34zxx57bN773vfmqKOOypve9Kacfvrp8/AKxmPRhkrmj0APwL3Jr//6r6eqkiS33XZbDjnkkHzhC19Iay1XXXVVdtppp7WGypUrV+bxj398kuQJT3hC3v3ud0+13uMmVAIAdFi2bNntfx9++OG56qqrcvbZZ2fp0qU5+OCDc+ONN671/5YuXXr730uWLMktt9wy8bpOkjGVAABj8sMf/jBbbbVVli5dmiuvvDIf/ehH57tKU6OlEgBgTF7/+tfnJS95SXbcccc85CEPyTOf+cz5rtLUVGttvuuQJFm+fHlbs2bN1Mozrm/+WPcArMutt96aiy++ONttt12WLFky39VZVO5u3VfV5a215Wv7P93fAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG7mqQQANgg7f2DniTzvV1/11XUus2rVqiTJTTfdlIsuuig77zzUZfvtt8+JJ54457LOPPPM3HjjjXnuc597zyq7gAmVAADrcP755ydJVq9enVWrVt1+e32deeaZufbaa++VoVL3NwDAPXT66afnyU9+cnbbbbfsscceOeOMM5Ik3/rWt/KkJz0pu+yyS3beeee8+c1vzvnnn5+jjjoqH/rQh7Jq1aq8/e1vn+faj5eWSgCAe+Db3/523va2t+X000/PZpttlksuuSR77rlnVq9enSOPPDLPf/7z88Y3vjFJcs011+QBD3hAXvOa1+Taa6/NEUccMc+1Hz+hEgDgHvj0pz+dSy65JE95ylNuv2+jjTbKpZdemqc85Sn5oz/6o9xwww156lOfuiiuAS5UAgDcA621POtZz8oJJ5zwM4896lGPyhOf+MR85jOfyZFHHpkjjjgip5122jzUcnqMqQQAuAee85zn5LOf/WwuuOCC2+/70pe+lGQYU/ngBz84+++/f/7yL/8yZ511VpJks802y3XXXTcv9Z00oRIA4B5YuXJlTjjhhBx44IHZZZddssMOO9w+VvJjH/tYdt555+y666552ctelqOOOipJ8su//Ms5//zz75Un6lRrbb7rkCRZvnx5W7NmzdTKW3HoqRMvY/Vh+0y8jA2RdQ/Autx66625+OKLs91222XJkiXzXZ1F5e7WfVVd3lpbvrb/01IJAEA3oRIAgG5CJQAA3YRKAAC6CZUAAHQTKgEA6CZUAgDQzWUaAYANwoWP3mEiz7vDNy9c5zJ777139t577xx00EF3uH+XXXbJW9/61rzoRS/6mf85/vjjc/LJJ+fkk0/OOeeck3e961058cQTf2a5G264IZtuumnWNXf4tddem6OOOiqHHnro7fe9+tWvzite8Yrstdde63wNk6alEgBgHQ444IC8//3vv8N955xzTq644oq84AUvWOf/77777msNlOvj2muvzWGHHXaH+4455pgFESgToRIAYJ323XffXHbZZXe4zvdxxx2XfffdN89+9rOz2267Zccdd8xBBx2U22677Wf+/8wzz8yqVatuv3300UfnUY96VHbdddf89V//9R2WfcUrXpHdd989j33sY7PPPvvkyiuvTJK85jWvyfXXX59Vq1Zl9913T5I87WlPy8knn5wkueqqq/KiF70oO++8c3baaaccffTRtz/nihUr8pa3vCVPeMITsu222+Yd73jH+FbOiFAJALAOm2yySV75ylfmuOOOS5LceOON+fCHP5w3vOEN+eQnP5mvfOUrueCCC7J69eqcdNJJd/tcX/va1/LWt741n//853Peeeflxz/+8R0eP+KII3LOOefkggsuyJ577pm3ve1tSZKjjjoqm266ac4///ycc845P/O8r3vd67L99tvnq1/9aj73uc/lHe94R84666zbH7/22mvzxS9+MV/+8pfzrne9K5dffnnnWrkjoRIAYA4OOOCAfOhDH8pNN92UT3ziE9lhhx3y8Ic/PIccckh22WWX7LrrrjnnnHNy/vnn3+3zfO5zn8vznve8bL311kmS3/md37nD4yeccEJ233337LTTTjnmmGPW+XwzPvvZz+bAAw9MkjzoQQ/Ki170onz2s5+9/fH99tsvSbLlllvmEY94RL7zne/M+bXPhVAJADAHj3nMY7Jy5cp88pOfzHHHHZcDDjgghx9+eK666qqcffbZueCCC7LffvvlxhtvXK/nrarb//7CF76Q97znPTnttNPyta99LYcffvh6P9/anjdJli5devvfS5YsyS233HKPnveuCJUAAHN0wAEH5J3vfGe+9KUv5WUve1l++MMfZquttsrSpUtz5ZVX5qMf/eg6n+PpT396Pv3pT98+VvKoo466/bEf/vCH2XTTTbPFFlvkpptuusO4yM022yw//vGPc9NNN631eZ/5zGfmfe97X5Lk+9//fj7xiU/kWc96Vs/LXS9CJQDAHL3sZS/LRRddlJe+9KVZtmxZXv/61+fss8/OjjvumFe+8pV55jOfuc7n2GmnnfK2t70te+65Z3bdddfc9773vf2x5z73udl+++2z/fbbZ88997zDyT0PeMADsv/+++exj33s7SfqzPae97wnF154YXbeeefstddeedOb3pTHP/7x43nhc1DrmhNpWpYvX97WrFkztfJWHHrqxMtYfdg+Ey9jQ2TdA7Aut956ay6++OJst912WbJkyXxXZ1G5u3VfVZe31pav7f+0VAIA0E2oBACgm1AJAEA3oRIAWHBmpsNZKOd+LCYz6/zOUxKty8aTqAwAQI+NNtoom2yySa6++upsscUW6x1wuGdaa7n66quzySabZKON1q/tUagEABakbbbZJpdeemmuueaa+a7KorLJJptkm222We//EyoBgAXpPve5T1auXJnbbrtNN/iUVNV6t1DOECoBgAXtnoYcpsu7BABAN6ESAIBuQiUAAN2ESgAAugmVAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3YRKAAC6CZUAAHQTKgEA6CZUAgDQTagEAKCbUAkAQDehEgCAbkIlAADdNp7vCgCLw4pDT51KOasP22cq5QBwR1oqAQDoJlQCANBNqAQAoJtQCQBAN6ESAIBuQiUAAN2ESgAAugmVAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3eYUKqtqaVWdXFUXV9W/V9VnqmrlWpZbUVW3VtX5s34eOf5qAwCwkGy8Hsv+XZJPtdZaVR2U5JgkT1vLcte31laNo3IAAGwY5tRS2Vq7sbV2Wmutje46K8mKidUKAIANyj0dU/n6JP94F4/dv6q+XFXnVtVbqmrJPSwDAIANxHqHyqr6kyQrk7xxLQ9fkeShrbVfSPLMJHsmecNdPM/BVbVm5ueGG25Y36oAALBArFeorKo/TPKiJM9rrf3ozo+31n7SWrtq9Pc1SY7LECx/Rmvt8Nba8pmfZcuWrX/tAQBYEOYcKqvq4CQvT/Ks1tq1d7HMg6pqk9Hf980QQM8bR0UBAFi45jql0PIkf5Xk55KcMZoq6OzRY2+vqteMFn1ykvOq6t+TnJvkyiT/c/zVBgBgIZnTlEKttTVJ6i4ee8usvz+R5BPjqRoAABsKV9QBAKCbUAkAQDehEgCAbkIlAADdhEoAALoJlQAAdBMqAQDoJlQCANBNqAQAoJtQCQBAN6ESAIBuQiUAAN2ESgAAugmVAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3YRKAAC6CZUAAHQTKgEA6CZUAgDQTagEAKCbUAkAQDehEgCAbkIlAADdhEoAALoJlQAAdBMqAQDoJlQCANBNqAQAoJtQCQBAN6ESAIBuQiUAAN2ESgAAugmVAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3YRKAAC6CZUAAHQTKgEA6CZUAgDQTagEAKCbUAkAQDehEgCAbkIlAADdhEoAALoJlQAAdBMqAQDoJlQCANBNqAQAoJtQCQBAN6ESAIBuQiUAAN2ESgAAugmVAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3YRKAAC6CZUAAHQTKgEA6CZUAgDQbeP5rsB8Wb10vymUct0UytjwWPcAcO+jpRIAgG5CJQAA3RZt9zcA07Hi0FMnXsbqw/aZeBnA3dNSCQBAN6ESAIBuQiUAAN2ESgAAugmVAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3YRKAAC6CZUAAHQTKgEA6DanUFlVS6vq5Kq6uKr+vao+U1Ur72LZ51fVN6vqW1X1iarabLxVBgBgoVmflsq/S7J9a22XJP+Y5Jg7L1BVy5Icm+SFrbVHJflekj8dR0UBAFi45hQqW2s3ttZOa6210V1nJVmxlkWfl+S81to3R7ffm+Tl3bUEAGBBu6djKl+fobXyzrZJ8t1Zt1cn2bqqNr6H5QAAsAFY77BXVX+SZGWSZ/QUXFUHJzl45vbmm2/e83QAAMyj9WqprKo/TPKiJM9rrf1oLYtcmuThs26vSHJFa+2WOy/YWju8tbZ85mfZsmXrUxUAABaQOYfKUcviy5M8q7V27V0s9ukkj6uqR49uvzbJR/qqCADAQjen7u+qWp7kr5J8O8kZVZUkP2mtPb6q3p7ke621o1pr11fVq5OcPBpH+bUkr5pQ3QEAWCDmFCpba2uS1F089pY73T4lySn9VQMAYEPhijoAAHQTKgEA6CZUAgDQTagEAKCbUAkAQDehEgCAbkIlAADdhEoAALoJlQAAdBMqAQDoJlQCANBNqAQAoJtQCQBAN6ESAIBuQiUAAN2ESgAAugmVAAB0EyoBAOgmVAIA0G3j+a4AsDisXrrflEq6bkrlADCblkoAALoJlQAAdNP9DSwKKw49deJlrD5sn4mXARsS37vFRUslAADdhEoAALoJlQAAdBMqAQDo5kQdAOBeZxonCSVOFJpNSyUAAN2ESgAAugmVAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3YRKAAC6CZUAAHQTKgEA6CZUAgDQTagEAKCbUAkAQDehEgCAbkIlAADdhEoAALoJlQAAdBMqAQDoJlQCANBNqAQAoJtQCQBAN6ESAIBuQiUAAN2ESgAAugmVAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3YRKAAC6CZUAAHQTKgEA6CZUAgDQTagEAKCbUAkAQDehEgCAbkIlAADdhEoAALoJlQAAdBMqAQDoJlQCANBNqAQAoJtQCQBAN6ESAIBuQiUAAN2ESgAAugmVAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3YRKAAC6CZUAAHQTKgEA6CZUAgDQbU6hsqreU1Wrq6pV1aq7WOZpVfXjqjp/1s/9xltdAAAWoo3nuNzHkvxlki+sY7mLWmtrDZ0ALE6rl+43hVKum0IZwN2ZU6hsrX0+SapqsrUBAGCDNO4xlY+sqnOr6stV9doxPzcAAAvUXLu/5+LcJMtba9dV1fIkp1XVD1prJ61t4ao6OMnBM7c333zzMVYFAIBpGltLZWvtv1pr143+XpPkw0n2vJvlD2+tLZ/5WbZs2biqAgDAlI0tVFbV1lW10ejvTZM8P8l543p+AAAWrrlOKXR0Va1JsjzJ6VV1yej+Y6pq39FiL07y1ar69yRnJflMkvdPoM4AACwwcz37+8C7uP/Vs/4+MsmRY6oXAAAbEFfUAQCgm1AJAEA3oRIAgG5CJQAA3YRKAAC6CZUAAHQTKgEA6CZUAgDQTagEAKCbUAkAQDehEgCAbkIlAADdNp7vCgAAk7Hi0FMnXsbqw/aZeBlsGLRUAgDQTagEAKCbUAkAQDehEgCAbkIlAADdhEoAALoJlQAAdBMqAQDoJlQCANBNqAQAoJtQCQBAN6ESAIBuQiUAAN02nu8KAEzD6qX7TaGU66ZQBmw4fO8WFy2VAAB0EyoBAOgmVAIA0M2YSgDgXmc64zkTYzp/SkslAADdhEoAALoJlQAAdBMqAQDoJlQCANBNqAQAoJtQCQBAN6ESAIBuQiUAAN2ESgAAugmVAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3YRKAAC6CZUAAHQTKgEA6CZUAgDQTagEAKCbUAkAQDehEgCAbkIlAADdhEoAALoJlQAAdBMqAQDoJlQCANBNqAQAoJtQCQBAN6ESAIBuQiUAAN2ESgAAugmVAAB0EyoBAOi28XxXAADg3mbFoadOvIzVh+0z8TLWh5ZKAAC6CZUAAHQTKgEA6CZUAgDQTagEAKCbs7/nwTTOCEsW3llhAMC9l5ZKAAC6CZUAAHQTKgEA6CZUAgDQzYk6i9BivHQUADBZWioBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3YRKAAC6CZUAAHQTKgEA6CZUAgDQzWUaAeBeavXS/aZQynVTKIMNwZxaKqvqPVW1uqpaVa26m+UOqKpvVdV/VNX7qmqT8VUVAICFaq7d3x9L8uQk372rBapq2yR/lmTPJCuTPDjJb/dWEACAhW9OobK19vnW2pp1LPaSJKe01q5srbUkRyV5eW8FAQBY+MZ5os42uWNL5urRfWtVVQdX1ZqZnxtuuGGMVQEAYJrm7ezv1trhrbXlMz/Lli2br6oAANBpnKHy0iQPn3V7xeg+AADu5cYZKj+eZN+q2qqqKslrknxkjM8PAMACNdcphY6uqjVJlic5vaouGd1/TFXtmySttW8neWuSf01ySZLvJzl6IrUGAGBBmdPk5621A+/i/lff6fb7krxvDPUCAGAD4jKNAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3YRKAAC6CZUAAHQTKgEA6CZUAgDQTagEAKCbUAkAQDehEgCAbkIlAADdhEoAALoJlQAAdBMqAQDoJlQCANBNqAQAoJtQCQBAN6ESAIBuQiUAAN2ESgAAugmVAAB023i+KwCLyYpDT514GasP22fiZQDAnWmpBACgm1AJAEA3oRIAgG5CJQAA3ZyoAwAwZquX7jeFUq6bQhlzp6USAIBuQiUAAN2ESgAAugmVAAB0c6LOPJjO4N1koQ3gBQDuvbRUAgDQTagEAKCb7u9FaDHOnQUwH1YceupUyll92D5TKQfujpZKAAC6CZUAAHQTKgEA6CZUAgDQTagEAKCbUAkAQDehEgCAbkIlAADdhEoAALoJlQAAdBMqAQDoJlQCANBNqAQAoJtQCQBAN6ESAIBuQiUAAN2ESgAAugmVAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3Tae7wrANK049NSplLP6sH2mUg4ALBRaKgEA6CZUAgDQTagEAKCbUAkAQDehEgCAbkIlAADdhEoAALqZpxKmaPXS/aZQynVTKAMA7khLJQAA3bRUAtzLuZIUMA1aKgEA6CZUAgDQTagEAKCbUAkAQDehEgCAbs7+BuBebRpnvzvzHbRUAgAwBloqAWBCpnMVrcSVtFgItFQCANBNqAQAoJtQCQBAN6ESAIBuQiUAAN2c/Q2LiPn6AJgULZUAAHSbc6isqkdV1b9V1cVV9eWq2nEtyzytqn5cVefP+rnfeKsMAMBCsz7d30cn+bvW2vFV9ZIkxyf5hbUsd1FrbdU4KgcAwIZhTi2VVfWgJLsn+YfRXR9P8rCqWjmpigEAsOGYa/f3w5Jc0Vq7JUlaay3JpUm2Wcuyj6yqc0dd5K8dUz0BAFjAxn3297lJlrfWrquq5UlOq6oftNZOuvOCVXVwkoNnbm+++eZjrgoAANMy15bKy5JsXVUbJ0lVVYZWyktnL9Ra+6/W2nWjv9ck+XCSPdf2hK21w1try2d+li1bdk9fAwAA82xOobK1dlWGVshfG9314iRrWmuXzF6uqrauqo1Gf2+a5PlJzhtfdQEAWIjWZ57KA5McWFUXJzk0yW8kSVUdU1X7jpZ5cZKvVtW/JzkryWeSvH+M9QUAYAGa85jK1tpFSZ6wlvtfPevvI5McOZ6qAQCwoXCZRhaV1Uv3m1JJ102pHABYGFymEQCAbkIlAADdhEoAALoJlQAAdBMqAQDoJlQCANBt0U4ptPO220y8jK9OvIQNk3UP02UqLWAatFQCANBNqAQAoJtQCQBAN6ESAIBui/ZEHQAWh+mcqOQkJdBSCQBAN6ESAIBuQiUAAN2MqQSmYhqT3icmvgeYL1oqAQDopqUSFhFnwQIwKVoqAQDotmhbKk/681smX8irJl/Ehsi6B4B7Hy2VAAB0EyoBAOgmVAIA0E2oBACgm1AJAEA3oRIAgG5CJQAA3RbtPJXAdE1lftLEHKUA80RLJQAA3YRKAAC66f4GYKJ23nabiZfx1YmXAKyLlkoAALoJlQAAdBMqAQDoJlQCANBNqAQAoJtQCQBAN1MKAYuCaW1g+nzvFhehEgC415lGoE2E2tl0fwMA0E1LJQATddKf3zL5Ql41+SKAu6elEgCAbkIlAADdhEoAALoJlQAAdHOiDgAwEU7SWlyESmBRsHODxWUq3/nE934W3d8AAHQTKgEA6CZUAgDQzZhKALiXmsb1r137mhlaKgEA6CZUAgDQTagEAKCbUAkAQDehEgCAbkIlAADdTCkEAPdSLk/KNGmpBACgm5ZKAIAxW4wTzwuV82AaH7Tkrj9si/GDDgBMlu5vAAC6CZUAAHQTKgEA6GZMJcAUrDj01FhtiXQAACAASURBVImXsfqwfSZeBjA3i3E6J6FyHkzlg5bc5YdtMX7QAYDJ0v0NAEA3LZUwRaZzAuDeSkslAADdtFQCwITM98UuYJq0VAIA0E1LJUyRM+8BuLcSKgGmYPXS/aZQynVTKANg7YRKFhXjm4Bpmu95iWGahEqAezkHU8A0OFEHAIBuWipZVHRFweLjogMwHUIlLCJ2rouTgylgGoRKAO7VTOUF0yFUwiJi5wrApDhRBwCAbkIlAADdhEoAALoJlQAAdBMqAQDoJlQCANBNqAQAoJtQCQBAtzlPfl5Vj0rygSRbJrkuya+31r6+luUOSHJohsD6uSSvba3dPJ7qAmyYXCITuLdbnyvqHJ3k71prx1fVS5Icn+QXZi9QVdsm+bMkj0vyn0n+MclvJ/nfY6ktwAbK1YyAe7s5dX9X1YOS7J7kH0Z3fTzJw6pq5Z0WfUmSU1prV7bWWpKjkrx8XJUFAGBhmuuYyocluaK1dkuSjALjpUnu3J+zTZLvzrq9ei3LAABwL7M+3d9jVVUHJzl41l23VtWV81WfOViW5Ib1+o+qxVv+Yn7t813+Yn7t813+Yn7t813+Yn7t813+Yn7t813+eMueqwfe1QNzDZWXJdm6qjZurd1SVZWhBfLSOy13aZJHzrq9Yi3LJElaa4cnOXyO5c+7qlrTWluu/MVV9mIvfzG/9vkufzG/9vkufzG/9vkufzG/9oVQfq85dX+31q5Kcm6SXxvd9eIka1prl9xp0Y8n2beqthoFz9ck+ci4KgsAwMK0PvNUHpjkwKq6OMOUQb+RJFV1TFXtmySttW8neWuSf01ySZLvZzhrHACAe7E5j6lsrV2U5Alruf/Vd7r9viTv66/agjPfXfWLufzF/Nrnu/zF/Nrnu/zF/Nrnu/zF/Nrnu/zF/NoXQvldajiRGwAA7jmXaQQAoJtQCQBAN6ESYB1Gs1nAHVSVfSjM4gvBnMzsVKtqp9E13uezLo+tqudU1X3msx4sHs3gc8F6LVprtyXDurF+JmPWvmejxb6ON4SDmAVfwYWiqpbOY9k/P19lz7LF6Pd7kmya3OHLft8p1+WpSQ5K8t6qOrCqHjPl8lNVD5tyeQvuu7oQ6zQOsz7X96mqbatq36p6aVU9aPbj82k+drAzwXpa73tVbTKNcu6JqnpcVX2uqn67qrZqI6PHpvLeLITP4TTMrNfW2m0O7vKrVbV5klTVkvmuzNrcK3cK4zYKdR+oqj+uqj2mVOaS0e9tkrx2GmXeTV22TPKqqjomydZJrq6q/zHrC75/VW02xSr9nyRHJrkxyZuSHFZVf1tVL55kK+rMTm60Pg4d/T2R79Cs93/r5KctIvOtql5QVbsl02mlmWmNnvIOdOY9/b0kJ2S4iMNzk7y9qrZdCDu2Se9gZwXrpVX11Ko6qaoOGb3+iX0WZ5W7fZLjJlXOGPwoyelJ9kpyclX979H2536TeG9mf/6raoeqetg0P4fTDrCztn+7VNVBVXVqVR03s+2Zr0BdVZtPu4ds1rr41ST7t9auq6pHJnljVb1hmnWZC6FybjZP8pUMgeqtVXXU6Aj1URMsc7uq2jXDZPJbzH6gqn5uyi1lP0zyb0l2TnL/JIcl+b2q+sWq2i/J61pr/zWNilTVRq21NUnuk2G9HJrkQ0luTfLuJH8xwRaOx1TVb2SY0P+W5A7Bauuqety4Cmqt3Tr688TRxnSLUTnzfXT67CT/q6o+VlX7V9VDZrfSjNMosL81uUMr2cRf/6x1/5okv5LkVUnem2TLJAdPu9di1k7liVX11qq6sKo+VVVPm2CxM/uGNyR5Y5JvZXjvz62qt0yq0Fmfo5uSbFpVW84cuFXVQ+ajV2JtWmvfbK39RYbLEN+QYR+xf5JPVtWRVfXwMZc38/n/qySvT/L1qnpMVW1SVXOeb/ruzFrP9x+t6ydU1YrZ5U/LrO/gkUl2SfLRJNcnObKqnjSt+sxaJ4+uqqMyzCH5J1X1q1W13TTqkGTmtb4yyeFV9eAkhyR5UpIdq+rxU6rHnAiVc9BaW91a+8sMwWXjJA9NsluGN/i9VfWkCRS7bZJ3Jdkvw4HZk0ZHJ0nyxxk+UBM3+lI9oLX2xQw7l+cm+WyS3ZP8RYZLdh41jbrcyW8mOaG1dkJr7cQkf5rkC0lOb63dPKEyK8n2SV6Q5CFV9ftV9czRY7+VYZ2M2ysyBNj9kztsbKduFG7ekuRtSX6S5M8yhN7jq+p5VXX/MRf5mCS7VdUDZ+5ord1aVTuNuZzbzdqJ7JDknNbaZa2177fWvpLhPXhShgOaqZn1nv+vDNuf1yb5epJjq+qXJ1zmE5K8pbX2ptbaM5Lsk+SxVTX2axOPGrwfXlVLW2vfSfKfSZ7QWrutql6X5O+T/NK4y11fsz4je2ao3zOT/H6SdybZJMkjM/SiTKK8HZJ8IMlFrbVvJFme8R/o/FWSTyb5oyR/WFUHV9U+NaXeqFmt1Tsl+Ulr7bcyvOY/THJKkt+qqvtNoy6z/HGG7/2FSZYmeVaSN1fVr0+64NHnf2abszrJnyc5r7X2vCRbJVkIw+NuN5YjnHuzqqrWWquqByR5dmvtsVW1aZLtMrSi7JDk2nGX21o7raq+l+GL9IAMrYOXVtUFGVpOfubqRhPyggw7kaOTLEvy7dHG7ANVtTJD0L50SnWZ+YJtnOSaJI+vqjOS/Li19sNRqFkziXKrarPW2vlVdWOSJUm+k+EIeveqemWGjczY35PW2mVV9b4MBzBPT3JAa+2qmc/luMtbh9tG6/nZGTZun8jwPrw6ybFJ/inJr4+rsNba16rq6iTPS/L3VfXE0fPfkOTgcZVz52JHv1+S5Beq6p1JjsnwOp+W5Puttf+qqiXTCPiztj+PTnJFa+1PRw+dUVVnJ3llVX2mtXbDBMpcmeS2JFfMPNZa+7eq+ocM24Jxe26GIQenVdW/JTkzyVuq6tAk387wnl84gXLXy6zu/72S/Pvovh8k+UFVHZFkj9baf46zyNHvl2c4sHhIki+N7tspydNHjR59hQzb1i2TPDnD9uzRSR6X5BFJ9kzyH0mm0SNVGV7zbkmur2FIwY+T3FxVn0uyz+j2xI3WSSV5+OigKqNA+9gkz0hy0STLr6r7ttZ+0lq7qapOTXJehlbb91XVVkke3Fr79CTrsL6EynWYteN+RoYj57TWrk/ylap6bZL3tNa+Ps4yq+rNGbrbvpvkt1prPx61Uv5SkgclObC1NvEgN9q5/GNV/VOSvTOMcbpkFOQ+nuRL89Fy1lq7par+JkN39x8k+VpV/UKSbVtrp0+o2N+oqg9n2Ngd1Vr7j1E3xG5Jfi7J8a21746zwKr6+dbaD5NcnuRXM5wk9Y6qesPoMzhVs74LeyfZvbV24yjgr8lovYzqfY8D16hL6eQMgfUjSf4kySGj93fnJKdl2KhOxKzX+I0kn07ylAwHkMuTXJLhPUiGsDUNMzvYpyW5fw0nhVw5euzSJA8ZZ6BM7rAOds0QLs6sqsOSnJFhXfxza+2bVbVxa+2WMRZ9fpJ/TvL0DAezN49+PpHk6NbaDTOtWAvER5IcU8MQoH9N8r0MPTdfutv/ugdGr/vbSVZkaFQ4aPTQyzKG70MNw4puS7JHkjNaa1dkOJg4o4Zx3bu01r7ZW85czArtOyd5fJKPVNVpGbaDz0ly/KjOEz2wm7VOdk5yY1X9VpKPt9auSXL26GfSfrOq/i7Jlq2191bVsUk2Gu0D/yjJOVOow3pxmcY5qqqHJvmbDDu1kzIMHfj9DEcKvzPGcjZK8muttb8ftUR8ZVTev06wW3fOqmrfJL+WYYdzS5KXtta+Nk91+cUMXYFbJvlykn9prX12AuVsnOQlrbWPVNUHk/x3hhaKc5J8bRJHzVW1KsP7/oMM4eHJGca1bZHkm0l+o7X23+Mudw71emCS92dolfz71tq1o/svyNBi8oMxPP8vZehm3iVDS/huSd7bWjvo7v53Ekb12TvJMzN0a16YITQcN83vY1W9McnvJLkqw7q/JMmqJP82+lyOfQc7CjK75Kev/0kZgsZxrbW3j7ms+yS5deY1jA4injH6+UmGA5c/H/eB2/qaCRpV9dQk98vwmXhehvflkRl6rfabxHezhnH078rQO/ZnGbbBeyV51rjKq6r/meSFSf4uyaeSfGe+9jujg/bHZHiN22X4LHwhw4ma/6+1dvmU6vGqDMObfpLkcxm2wxcn+fok100Ns028OMkHMzTinJHkXzL0En0/Q2NGa619f1J1uCeEyvUwOiJ9Q4ausB9l2Kj8/qg7eFxlPDtDN9dXq+qXkuyb4Uv1nQwfqlNaaxeMq7x11GXJaAzb05Msb639/azH7pvhiPkDrbWfTKEuM11y98+woXlohi/Xv2f4HE+l5aiGkyOePKrDTCvdBRnWw9i+TKOW6Y0zjJf5boad1pZJrstwcHNJG04UmLqqen6SAzO05N03w5H8z7fWXjjr6L7n+WdOxtkpw5CCX0yyY4aegv/ZhvG9YzfrM7bPqNyLkpzfWvvq6PHtM3zm79da+4NJ1OFu6rYkQyvV0zKEuxdkaE09Lck/jqsVaVZo2iFDt+dpo3Vynwzr5KkZukK3TfK0Npw0N45yX5thqM/7M7yeC2bqk6F16vlJ/qC1dtM4yrunZn1GTs4Qrk+pqt0zbA8uSvLN1tp1YyzvtRm2c2e31q6u4WTA12UYgvODJB9qw3jfcZS1cZLfyBBWH5xhm/PNDN3ekxyrPrsOM+v3hRkO3s8eDTfZJkOr5Ux3/OrW2iFTqM8mGRqQlmYYT7xnhpOyliR5Y2vt21Oow/2T/G6Gg+utM4Tac5N8trU20e73e0KovBuzx62NNuq3ZRiI/dTR319srf1ozGWen2H85EmjjftDM+xUn57hRJDzWmuvGWeZd1OXmR3Mp5J8sLV2QlUdlOHL/fHW2smz19GE6zITcP80w3i3K5JcmSFkXZLkrNbalydU9saj7oZnZPSe1zBX2A4ZTqS6tLX27kmUfad6zLwfH0hyVWvtjyZd5t3U5XlJXpqhJfHiDAc7F/WEylmv76FJdm6tfXq0Ud8yw47kl5P8bWvtP8b0MmaXPbMz2yZDULtgVG4y7FjPa629f9zlzrFOB2boAv9UG8bYzgT5xyd5YoYxxa8ec9m/liG8/DBDy+xJMz0SNUzb9YjW2v8bY3lLMvSAvDTDwcTFSf4xw+fqsnGVMw6j9X9Eko+Ncx2spZwtkvxlhoPLG5N8LUOQuHCcLdOzvncPSnL1aDu7S4bGjCcl+V5r7fXjKGuO9VmSYZjJ5hkacC7M0KDy7Qz73yckuW5S2/s71WXvDCfpHNxaO3d03+4Zxs2+d8Jl/8y2tIax1ftm+J78zeyGnoVCqJyDqnp3hlaCKzJ8wP8lyWWttWvHGapGR6FHtNaeMvpivSDDPHlnZWjufnWb8li6Ufffma21HavqJRm6Ab6YoeXo90Zjb6ZZny9l6J65IUOL4a6jnw+01j45wXK3SPJ/k+zdhpNVXp7kltbaR+unA8l7y5gJzk/IcFT86xlaA09orX1u1nJbJfnvaX0WZtXroRm6oVZmGE/01TG3zs6U85cZWgNfN+ux7hbQOdbhtRkC0x+OWsmemqEL6sGttZdOqx6z6rNRhulDts/QM3JZhtB7bobvwHZJbmqtXTLmcrfIMI50pwzB4gkZDuB+c9KtMzWM4XtVkhdlCBbfSfKqNt6TX+6xUSva/8rwXrwjw0HtFRPq8n54hm71PTIcWC3L0IL41QwH0mMbz1/DCYHXZpg+7pzRAcz9Moznm0qwn3Ug9aAMrZK7ZmihW5Hkn1prfzKNesyqz/0y9Mo8OcMBzlRC3Kyg/+AMB1tbZOh6P3tmu19V95nvlvu1ESrvwqw3da8M41j+JsNZd4/IMLXAdUkOHWdLZVUdnuTa1trbR93gv5lhTOXho/Kvaa29eVzlzbFOOyX5/zLMBfnKDCdOfC/DYO6xzcu4jjrMbGi2zdCK+6rW2o2zHn9UkjXjCHZrKXsm6Lw+yYrW2h+M/v6VDBvgd7bW/nVMZc28zjMyTOvxuxlayx6doQvmgNbaR2YvO45y16Ne/5hksww7+fsl+XGG1oOPjDPUjFrrn99aW1Ojsx9rGOv1T621fx5XOXdR9soMXa3/0GaND53ZgE8zVM5a75tn2O5sn+HEoacl+Upr7ZWTKO9O9903w1CTQzOE2D+c5Ouvqs1ndx/XMLb4V6YdJu5ODdP3PD/DvJ2PznACyTeSfHjc4X5U3tattStG27nHZegh2SXDMIHjx1TGkgzbtF/MEOB+kqGb9V8ydH1Pc6L1TdqsrvYahmIcnqFl+Nga/wlidy5/5nt33ySbtda+X1UvyHAg8aUMJ4h+ZZLrZNZ+5/gk/2P0s0WGnoOvZNjmjvUE4XFx9vddm/nAPD3J4a21E5LbB0vvmWTZOAPlyLlJnjFqJXhThjMKPzL6cH0vP+2Om6ZvZehmfkeSN4+6Xt6YYcD0tD0nw1QOx1XV+5Nc3Fr7bmvtW5MqcFYX015JPjQKlA/N0GL74gw7l7GEytGG7GEZWun+b1W9tbX2C6MW4l/L8F5M/KzHu6jXVkm2aK09edR6sl2GHeoeGbqkxmLUGvq9DGOW0n46XnefJH87rnLuVObMAeQjM3zOn5PkAVV1boZ1flkbTe4/zVbK0XpfOgpZ5yU5r6o+n+EyqaeN6j6JE3T+OMN7cGobZh/4dg0nDW49Wk9jPaCZtRN/dZIXjj5fM2MWz89wVviCMTqg/ViSj40+ry/I0B05tlkJZq2T7ZIcUVUvHW3nvlXD+NZtM7RYjsXoM/ThJB8ebYNemWFmjZvbFKesGR1A/U4NJ/5dmOS7o33OtRlaZ5NhyM0kbTQq4/cyzPpxeYbP47EZTpDarLW29yQrMNrnV5IdWmuPT5IapjLcN8O+5ysZ5qpdcITKuzD6QleGM6yeW1XnZZhw9rIMXdKT8JkMX+ZzM5yc8Rezjtqfm59OIzE1o536787crqqfy7DTndrloWbtwM7JMNXS7kkOSPK90Rf+H6bQNfa+UZkPyTAM4RtV9b8znFwwTntkmFB8VX46/+nXkvxnGw3In2agnNUy9/iM5ghswxm4362qf84wzm9srTOttctH37V31zBH5MYZusB+0MZ0UshazExTc0iGYSavy9Dl+6oMrbGfzjDx9lSNvmuHjVpuz0pyQWvtezVMQr16tNjYQu5MiM3QIrJ7kl+pqm9m2IEdmOFAN8nt0xyNs9ydRmW8JsNZx8/OcBm6S5I8qbV29bjKuydmtRw9KsM2erMMw2H+ubV2VMZ/AYiZYHNAhq7o/57V3bldkvu3MZ6kUcPlD9dkmIf1siTvrGHOyrEcMK+H7TIMtdgpw3fxe6N67NRa+1Iy+av7zNq+tgzb4P/IcCW5b2S4GMVEZ92YdaC4c5Iv1nBlvQtG3d4fGv0sWLq/78boKPEvkjwwQ0vBRRk+WN9srX1vguU+MMN4vR+ONvIvTvL61tpUrjt+p7ps0lq7eTQM4MFtmL7k59poKpn5MFone2SY5mS7DNdDnejYklHrwNMzTP5+cVU9J8mbWmtPGXM5W2UYXrFRhiD79xlOxti4tfZb026lnFWvt2eY5PxTGeYN/HJrbSwtJaOQ9MjW2nmj21tmaBF4WIaN+XcyzFM40Xnhqur/ZJgO5sej29tl+O6d21o7fZpd36Pyt88QtO6f4TNxY4azUFe11nadYLlbJnl4hh37rhm6Wr84iS7oqnp4a+27NYxb/3aG6bP2aa39TlUdmSRtHqaSuitV9ZUMB7ZHZggXP0xyaoYGgLGPL6+q05O8rbX2xar6H204SfCvM7TgHTGmMp6WYVjRF0Y/38kwq8P7kjy+zRpqNA01jGN8YoYD2W0znKxzVmvt/0x7+zc62Hl6hs/laZPez9yp7PdkOMg6M0OX+/kZhsBNrOt/HITKdRiFiV0zBJjtMxzFn9imN2D350dl39gmeCLK3ZQ/c4R+UpKPttYmNvH0XZQ/0w20c4au5isytNydN6rXsjbmyZ/XUZ9HZtj5PSnJ0jaBeTFH5WyU4Qoir8twFuw72nAlnakGm1l1eUqGEwZ2zdB6/98ZWjbe3TrHstZwqcuWofXt+Rm6XS+pqkdkmLtwYnMTzvp87Zhh3NbXMlzb/ZJpr+e1GW1/dsww1OBRGVqvzm6tfXbSO9gapjK5td1x/PI4T0zcJEML3/syzIX5rgxn/X6mDTNNvDvJ51trp4yjvHtq1vCIPTNcuvBFGcaU71nDvLVPTfKLk2hoqKrfTbJ9a+33ZuqSoYFj397vxah18skZxoTOTHz+ixm61W/NcCb4VAP97M/0KFwumfL2fea9fn2GA/tzM/QSvjJDuD20tXbaFOvzuAzTPD07w7XPv5xhKqN5a9RZF93fd2MU6P47Q6vM2aMWlWdkimMZRmOaphbkZu1k79Nau2kU3DbPcAbey6dVjxmjumyZYUf/lSRvz3DEdmUNV1n44KTKHg1/qFE1Zupxamvt0RnjmNK1BcXR7XdX1ZczjGW9atb9UzUq88wMV1bZPEPL1VMybPDHcXLURhlOPjggw7jhnarqmgzr+OvJ5E5MmvWcD81wCbrHZhjucXH9/+2dZ7hV1bWG3wECNsQawGDB2FDE3oggUkSIvRsRe8GoIWrMjTW5KYZoLNg1YuyI1wZcRLEECyqWa8WCgopGBMUWjXKRcX98c3kWBL0qa6192Ge8z3Meztn7cObce68155ijfMPsNXTv1yT0mq6L2SiX8nVUqPBVAUMZBmXu/l8C5ZH1yz9f8GfQBnXMuQUd1G5C0jH7mtl01EXqwgLH+17k7rk+wHVI0uz19NgIpIJQmEGZM2x6oJzeQ0w5rY8g7/2jBRiUm6Diz1boM3jY3U8wFUP+Eun//m1hxviezE3zOwDomjzWlR2kc+M0R2lemV7tI6gpQ5E91v+N3P23WJrPU8iwxdR4ZI/GbFBCeCr/jZxnbkfUAqs3KuV/CG2sr3oj6GxTFrkF7WSkiTbRVBnYydWLucqq43zl9QooFHwWqka/EQng9vumv7EQYy8+f9gneQ02SmHoQuQc0kHlCrQ5PeQpNzT32m9Em9Yfaxj67ocMyVlIs/GJFIbLwnHf+5pI+UJ/BNqhQ+4KKOVkZdSStA1wkpdQVbuAuRjyxG6PxKzbprGfKXvsr5lPdg0cDmzvkjQq7RqYz0s0ANjV3feswCO6CTJk5gJ3oc27HaqmrrlRmWHKc56JohRdUV75SHTQLFSzMF2Lj3lKeTJpla6HCoSe8VQ4thB//zwkgzTEJN9zMTAb7XcTkKxWl4UZ43vMaRAqzvrCpIBxjruPqkV0JjcnA1q5WtIuj/Qxy7wXMqPy5yjd6Au07w33gtKNSsfd42sBX8jNvC4NOWRTUJhgp1rPreTX3Rxt7pcg6R5oOHxsAbSowZxGIU/W+cCg9Nhg4IiSxlsO9fU9Cdg89/iA7GfkpSvq/d4TuAdVN56PKs2XQh68N4CV8p9DRe95s/Rv//T+j0Th7qxN6dFFvAdIRPrX6ft2yPO8NZLQ2AYVRZX1GrPrugdwLqowb58eWxroVdX7/XVzS9/fk607RV13XzPmfmgDBTgT6Ju/Fop+fekaXzL9vBQ6XNyGqqlLe53fcZ7ZfbBm7tpYGRWtvZnuhaUKHK95+ndd4M8lvq4ngVVyP09AnsstgGVr8P72RXrIIHWDC2vwWWfrQc/0XgxL6/FWuXmWtgbnxl8vXVsboH3uCaTG8PcqP5vv+xXh7xzz5Vd9jkIPbd19E5NW1rk00jL+IkivP/NUDAeON7PrgTZmNhiFf3qgcElVc2qJbuw3UCVuqxSCPRQYWNKwbVDIoT3wGzObhm7sOzz1WfWCTqvp72TyJMuTOiWgvKbZSDZpZg1P6/ujrh5rIy/lA8BFqHjlywI8192QmD3uPj3l8a3masWYFQ6UQm7eWdeew4APzewVVG39aFljf4e5gfL3RqXHi5YPWi592w8VvN2Yxvl1er6snOXB6PD0rqnKfTSqNN4Q5RDfaWY71eia/4rc+LsAXc3sTHd/AuhkKuJ4y4sVPc+UCM4HupvZ2+5+/ldPFhApSrmUGyPpnjtRYU4L1DWm6ihc9no7I0cOrirnY9JcK4nO5Pb+LFJyJ8qvbo8UPo5Fnt0yo3SZqsKayKh+DjkazjOpDuzmjTz0DZFTOQ+5C6YDCkluhPqrgk5PH3oFvT5ryONmNhO42BV26IkMiFXQwnOMV1QJmFtMugAvuMKso1Bv4B7AZE/VwkXj7q8DfzYVCiyG8u2aA7uZ2ZtIwqhwqQ13n4VyRy9LuU1H0mBU2df+xxJwpUC0QsVpTyD9xoPdfYpJCHhibl7fN/S9oM1tVRQZWGCuaRm4+zhgXFq4+6FNZFeU/lKqfEieXLi7F3rfmyO1iaElDrspOjh0A8YkI7OFqyisO6q+vbqEcZshQfex6HPvBXyGjMslkLRNzQulclyK1oI/mJoAXOapbWWReENl76+AI4DfpVSk64Ar3X1SAWM8mfLD90QRqSWRsP1KZvapF9i7/FvM5cuUP9gZ2NHMlkYpEI+5+ztVGJSJbB3bD5jo7qcDmDraDEEOjCFlTiB3vR8BzDCz1snAxqVR+ucyxy+KyKlcAKY2YXPQRTYU9QHeFqnoV9rRpkpM7QH3Q6dyQ8b131Fy8AcVz2UZd//YzJ5DlY5T0+OroZNc4X3X09/PTqzLo3BMF5Po7NrAGSgseqw30m4GRZJe93rIO38JuhZeRAeuLkUs+Ol93hMJDS+JKhz7AR+X5CHLxs0+57boPp+ZHSrNrCtwuLsfXNb43zCvJVFo8nmkkdcKydbMRIbMzBLG3BmFuz9AHvKnUCeV81F1/3VF51KbCoH2QZv1o2msGSj8O6dW+cPzzTEz8jsgpYdX03v1F1S48RcvS/eA+QAAHK9JREFUMN/W1FRiJDowz849vjPKOV3P3Vcoarzc318FCWrvje6/w12i86ViEo6fiSJfG6SvLYDl0f47yd3PKnseaS7ZevBrpHLxcyT8PjvlN3Z098EVzKM10qHshg5ZVwKXe3kavYUTRmUit4B0BXq4CiMM9V/eB1Uo3uQLmSDdWDGzFX3etnT9kbzLjugUe427/6miuayK2sKtRYMQcz40/zPgr97QbaWMOeyFcjb75B7rAAx1993LGrcxka6Bie7+Xno/BqN+x2+7KkUL3fhrsbmZ2V+RMfUASneZjA4Pn6c1oKqe46u4ei3vDfR096OSN2kTYHOUx3dMwYbdlii89jnyFE1Ch8r+yMCfCvyizJCfSZf1cFQUNdor7N7ybTGzccjgeQvtAx2AQahFa2FOBlNP8bEo/N8OONdzbRiLNuwXMH4zdK29XEWY1czOQN63jVFoeWpKf+mCPNdvu/tVZb/u+ebUHrgcRYjuQc6E45Aj4Ykq5pCbS3bY3gZFx8pK9yqUMCoTZrYNOh0NRhvpObnTS5ZQXriXoLFgZg+inMWbkXTJB+nxNsiwdncvMww3/3zWQJ2LVkGL+Xh0guuKemBvVvL4P0S5jVlhSjN0bbR190Fljl1LTMLySyIj5lrPiWyb2VaoGvG55E0qZbEve3NLYd3uKJc10+pbD3gXGbPdkHf8pao2NFM17j9pCMOdnjdmzWx5d59V5HzM7FLgZNQ56B0k7vxxNh7wqasSt2gv5anoOhqPFAXaIaOtMyqIHIqaP9R0c8qt/yeiXM/n0KHjdZSD+La7v13CuOsg0f39UE7f34Gr3P2/qzSwysSUK78N8ojfhu69V1CqzdPu/r6lHt8VGNO7IeWBJ1wdvTI90hVRN51HvODq/m+Yy4/RQXKWu1+fHmuN8swLT7cogzAqE8movByFVoehPKLXUm7RCOSpG13LOZZFymnJhG97I4PieWRMjarVImZmPwHuRdV4ByGP5bNIdqJ0QWQz+ymSDZmFQhFLAIO9gLymxopJ4mcAqsCegUR/WySDphUy6CtZYMsiXVd/QKHlv6OQ43TkITGk2Te5QoOyJRI47ozyd9dH6gMTUXHUlKLnYSqO+VcyGi9BRjboEDUKpfoUnk9qZqsDpyG5qK2Q5uwMtJGuk35tg1qnl8z/2afUoD7IoBzp7h8WbOBnkbLOqNf8R+nxzVGO3bru3q2IsRobZrYF2n82RSoAH6N78KoKxm6OUi+WQaH4SagwbopJ7u0zL7mDTe6z3xPYDXlH33f3HdL98k6ZUbmiCaOSrzaZp1GoNesg0BudUh5F4biNvYQcvsZEMhraoM1tB7Torwjc4O6/r2gO2Q3WA1jO3W/LPdcCeQpLyS/JbxJpsZmLPBLbpu9LyeNsTKTX3QfljX2BjJpnkVbricA/3H1wVWHhMjF1RzoUSdj8Lwo9jnP3+2s8p17o3muN8iofcfdhBY9zFdpET3G1YTV0gDgMHayfdvf+RY6ZG3uxbKM2sy7IM/4+ymVbuejXujCY2a3Ig/Y0qlY/AKUFDHT3J0sY72ngAFflb/7xmueYFsmCDPLk3NgMFck94+43VnGwS/vevsBP0/jjkITPg8CbZXzO842faUPfijSYeyKZqt8nr34Ldz+jzDkUSRiVgJn9D5ILuj4ZNMuijbUXqv6+290fqOUcq8JSgUz6vi16H2Z5Ra2pcjfYWBR+vd7MjkF9YG9391sqmMPZwOooJPgiWlymFe2daMyY2Q6oGGEvdB+shLx5p6dT/CJrVKbwus/nifox8hb2RGkgu7oqLiuZT7rm90eRgY+Tcb8GKmSZVPQGm4yXPi65qh8ifdAPkadmGNrIXq43Y+a7YCom2o2GyvSpKEy/DdDdC+r1nfv8twVOc/feudBvKxSlubJsj1lV5F7vD5Axtx3KYZyAOliVHvLOzSV7n89DTqQH0aHqYOQ5/bO7n1PBPFqjiElP9D4McPfXTL3fL1iUoqRN3qg0dXM4z927p9P6LiiX71F0kj+hLM9YYyB3U62JxJ83QAvoY8BYr0GLOjNbCVVer59CAocjA2c94Dh3n17CmNlCtx3q2nMBSgNYA2gJfIT6vtatpzLnJT4YndDvzT3XBq0XjV4n7buwIOM4HSo+rMI7n7vuNkeV1tumQ+2xqHvH0KINeDPbB9jf3Xc2s5VRUVxHJNc1CLjXKyrKm29ejeLAlvtMBgB3JcPbgKXd/ZOyDG2TFvDynuRs0mM7I/3IHkWPVyty68zlKJ2gN7r+ZqMGIxfkI1RVzAele3XzeYtVb0fFUuNLHj+73k5EaSBLp3tzSyTvt2mZ4xdNs1pPoBEwAFV5gbxy+6Dqzz7IS3lEjeZVCbnT76ko1L0qOqkdAoxNC13VtAVeMrPdkYbeYORJXrMMgzKRbWY9UXuwq939TNRr/C7g+Xo2KGEeYe1fo97Xzc1siElDsnO9GZTQoA1nItPtnU51Av+Z/ugA1Psa9P5vBmxtZl1L8AgviTzwoHDuysAQd78VdbXp/nX/sUwag0GZkbzZB6CDLKijyidm1iEZRGXoxt4H7Gdmh5kUMEAh2etKGKtm5NaZTZH24wfImXMcqqwHdE9WNKVlkIzXT3JjN0f3xcSv+09FkDMomyPB9RWALU2FsyegCMIiRRiV0mTraFLSPwWFOIanC/8ddMHVJWa2opn1SBd0Z3c/DQn8DkG9td+nxI4m38BktLH/HoXAX0RtAUvtrpIWsWWBHcysU7rhp7n7De5+eVljNwayBdzU8/4ld5+GvFYbALcDB+aMrrrDRXbAuhIl71cxbrbBrgNMMbOLUKHCQFQNvjEUvsHeC+xhZi8jPb6rUSQAVHE8No3ZvMAxFxncfW4y5K9FhiWAm+SerjCzVmUYwO7+LPAbpHDxWzN7Ca3BdWVUwlcFSM8i3d813f1Zd78LddW5B6o7ZLiUTkYCZ5jZCDP7BSqUe8nd/1XWuMkzP9ckq3WdqzhtdyTjdw0qCj2vrPHLom43ie/AOLRwPIVaAQ7xho4CO9BQuFOPHI5Cu/8EJqfT8eLJ3T/ezAaiG79SXJVuP8t+TuHAvujkViZroZPySsiIfdnMJqHF5R8lj11Tcgv4YsBrJg25Diinclugf5W5TrXEKxb6T1yCru/ZqHjmI1PHof8oeiB3fzP97T4oxD4OvpLR6o5khgpvCbkoYGbXouK04S7R9w3MbBB6rwzl3ZdZiXsDUptogaSVXvSKuphVzFtIo3Ip4Bkz64s62P0geYQrXWfcfYSZPYUiY11pSIErk61NahubkiIHLsWFx01NPwoXuq+CJm9Uuvu7QN+UxzcnLeaLI52wll5BZ4Ea0he13ptqZqcBiwMfp5PaD5CUwexv/AslYGYtXBWp26Fq7+FmtmvZ4Vd3fyXlm22M8ny2QN1dbkInx6bAeOQl6wD8p7t/mnIsh6fnmwFNztgog2zjNLM13f0OU8Hge66WpIOAV116fYUXRaWD83/l5tIarQd3ucTuF9lCrO+LqShmIirE2cvMXkX3/4vAIcmTWCrpelgDFebUozGZqXhsC4xInrpX0aHqARpaEVa2zliDGsGnyGP4WhXjorB/J7TePmFmnwD/7e6vII/1uyjta5GiyRfqLAhT/9veqKvGqFrPpwxMBUoPA9u5+6O5xw9BFY9zgLPcfUIN5pYlco8Abnb3mysadzm0sMxJi90yqPLzhXSjNxnMrKWrRdmmwNlA76bouSqbtMFehwrBHkA9jyeb9OlauSqwSzfwUni9FWqT+GlT8EgviPR5tEJaod2R6sSaKD1glJekgmHzVoAPdfcN6+0zSGHe95FsVW933yP3XHtgbnLyVDkng6+M+cuQZ/i8qg5VZrYe0sy9GUkprY1UGNohdYZpZc+haMKobKKYJBR6ozDLUihv7mJ3n2Rmi1d5Ss55bFpmnlFTtfFTwNplGjM5A3ZHVKTVGyXMP4SEsV9196qKNmpOyhf7wtQK8xF3f8rM2rr7u03Re1U26eDSH8h62i+L8rrHZWHpoBpy69BWqLPLYqh4cR0kffOyu59dwrgtsjUmpZ286+6X5jxodUFaY3+DikEvQ0WQrdz9nylftbm731jBPLLPeX1UWX9oMi5fBzbzGnXOS0b3KuhA85FXWAFfJGFUNlHM7FGUJzfLJFsxAOmFvQ6MRuLXn1ZxUs6d0k8G7nH3ialIoJO7P1/Fid3MHke5tecincKNkMfiqHr1Vi+I3IL7DLCbu0+p9ZyaAin8vAa6D/sCF7n7ZfXmrWqs5K77dYFbUbOLL9Jz2fpUmJGXG28d4FR3PyA9vh7q5LbIdFD5NqT0svdRp64LUS7/XLTXjEHFcce4+91lX/O5z/OXqP3yb9PhbruUhlLZ4Tntc3PTtbAHSj/5ZxVjl0VUfzdBTC0pv0wGZTN3H+nue6P8jkuRG75jhZuZmSqLV0lzAN1oz5taeJWS+5uFPtKJ9XNUdd7W3XdH8hLPATVtF1c2aVHLwk9ZGKgn0mmckr1HQfGY2ZJm1s3MlnL3T9z9GXf/Jcrhq1lXnyZKthcehHL9vki59QCbmtkBRXoNc2vrbKC1ma2QjKlJwIrJuKwn/oTyJScBP3H39ZHjojtS+bjB3e+G8qu+cwbjj4C1TDJRH7v7HfM9XwWe1txOwJnJa7tIr7lNvlCnKeLuD5mKYKBBJw+X8OuV6asS0kL6Zfp+OHC8mV0PtDFpZPYBelCCbmBu8eoAXIG8k5n4bWuSYVX0uI2JXGrBTWY2GVUbP0SDPmsU5hSMqVPL4sgruSvwrEne5xGkl7p2lsMbXspqyN0H7YER6bEsBWgg8rIVQjIaVkVh7qlm9i7Q1d1HmdlxwM5I9mlSUWM2AjZFOYIfmFlLM7sP5RHfB1zh7m9CdQL4KdTcCkmm/dGk8vEY8IS7f1L2+Bk5A7Y/kvGDRXzNDaOyiZLlLpaZr/gtedzMZqJ8zlHJS3YR8lpORSGRsvM7n0WFSQ68Z2b/gaoTS+352sjYHzgNtQc7F3gZGsX1UY8MQTl6n6NUiwnoQLM7Ul24Duqv3/MiwhjgVDP7AHgTfT49kHZgUeyAhL7HmNkElLt9elp3pgDH0yBOv8hjUtR409WZqANwEiqIvBZp4X5uZme69EHLTnPqDkx09+lmdjSKjPVAXsutUJvGv5Q5h9xc2iL5ujdR/UAWFVukD5JhVAa15lgkuHyhSfi5A1pk9/AS9QJzBTpdgR7u/sfkQRiHCnZuoaHDSd3j7tPM7ArgHDPrhSRUZkROX7GkDXZt1JauB+re9TDS7WuDjIpZ6dejKKp6RiED/yQUHWkP3OTubxQ4xtNIuqsnsFMa539RLudl9RACnY98B6f9aejg9FAy3n9ZRcjZpO7R190fMLMTUHrTk+5+jpmtiKSkppY8h2zf2Q/oBhyFWkGeYFIeqDr8XjhRqBPUDDNb0efttdofeQR2RILs13hJPYhTXukc1AJyYlpYsuT5pVACd02qAKvGzJZLYamVUTrEUBTuO6HKUFBTIKV43Ozut6SfT0NR7tL7jAf/P9YgpbU5sDwyhv5RYIFOS5TPnqX8bI5ky3oBX6DDxZkFG7E1xdRU4z4U0m0NHAmM8Yb+38+7etyX7plPBUMtUO3AZ+gA9wLq5FNZK14zG4+klX4FPOzuV5nZmcB4dx9bxRzKIozKoGaY+pv+C2l0/VfmmTTJCR2ENtuhJY29DXA5knEZhlrVvZa8cyOQQTu6jLEbE2a2Ecohew+FYbZBBUsroM4iB7u6PAQLiakz1D+AA4EHXDJN9wCnu/uEKqtOA5GrBF4P5W93RKLTDwNPu/vHBY93NHAicBVwhydBdVOv8b7oQP0Lr0HTiTJJa/qCOjjdC2yTdy5UNJ9WwGYozakTCkMPd/e/VTD2WsDl7r6dqeFBt+Sdfhw4wt3/p+w5lEkYlUFNSNXeW6A8lt4oJPI8MnBGlRlyNbOfoBDUCjS04ewNvIZac+2NJEUqObXWEjP7EUqDWQ61KZ2BtPk+Ai5AOp1DajfD+iFV2vdH3vGVUPhtY2BDb0JaqI2JnFF5G8qh3heYhkK2nwBXe4HNF9I1MAC1P+0MvALcAYz0RVDo+vtiktDaC137P69YxqcmTS5y11oHtO/MAX7o7geb2ZbA2e7erazxqyKMyqCmpBNjG7TA7oCMzBWRxEQpIcF0OjwX9fH9MnmQ+qCF5T3gbnd/oIyxFwVyi9/VwAyXzE1QIGa2PKryPR5dcxOR96Ku1QYaI2a2AgrHbmnS7x2EPIa9gCPd/eWSxm2PvNa7ozVwKnCgV9xVphaknNHKOjhZI2pykV77McAJqEhvCoqYPenuZ1UxhzIJozKoOWa2TBZmShVxfYBZXkJLNFN7yvPcvXu6uXcBbkAeypkoj/CtosdtTOQW2K2RHudBwFhkyN+X+712SAA/8ipLxMw6IuNyjLvfGcVR1WJmA5HHeBhaG3qZ2dIo97VfSWO2cfVfz37eCNjb3U8uY7xAWI2aXJhZP1SY89fs4GhmuwCbo8rzK4AH6yFiEUZlUDmWOlOY2ZrIqNkAJU0/Box198I04RYw9jlIf/I/zWx74GAk53AOqUDF3U8va/zGQK4g6X4kn/Ez5B1eF2mkHeruw/O/W7vZBkG5pEhFG5SScAZwDarMnuPuxxY4TnbfHYb0SVdD7XGHuXupVcdNmdz7vj4q0OkBPO7um5hEx88Fji4zSmBmO6ECpXbAdFRHcHM9plhFR52gcnKVlKciY2ZV5P4/BBhrEj0vi6eAjinkdQoKOQ1PVYfvAMuUOHajIC2wqwBLpGKkFd19c2Rgj0OFOplHMwzKoK5x9w/d/Q13fwKlIQxEm/9lBY/jZtYZGRdnAG2B7YHJZvZSWpOCgsmtYbVscjEGXVeDUMj7p8AEMxtm6nteN4ROZVApSQ+sMxKZ7ezuB5m6K/wBWAvYE+W5lMU4FP54ChWmDMmFoXagoXCn3tkCddHZCPgwPfY86vLxJITweVC/5FJAVkcFI5sCtwHnIzmx6QWPt1qSCToIVX63B25x90FmdiFAmRGaAKhhk4u0ls5KX4+b2SUo5WJH4Bgzu8PrpN97GJVB1RwOtEQ6lJOThtni7j4eGJ/ym54ta/CUBN836ZXNcfePTD1+9wBauvvTZY3dyHgYabM1AzCzA4CuuZ+jm0tQz2SVxrehg+YM4HfAb9HBtjCj0iRqfbqpucBnqJPM0DQuqLNSky0MLBNrBE0ucoWPWwKHoq5Zt6BC0fvMrG29GJQQRmVQPX2R9uFUk/Dz4sDHZvYLdLO9U4VGm88rbL4EMBttKk2CzBOT9PHuAn6PpE3OyH6lRlMLglIxs6WTLuAawHR3Pyn33OnAHmb2QoGpH21Qx5xbUKXvTcD9wL5mNh3JGF1Y0FjBvGxtZnNQW8yJ2YMusfERyCtdqBbp/CSDsj3q7X0u2udOBk4xs971VhgaOZVBZaTK6y1RLhHu/mrSBRuBEuPXReGnSnH3D9z95jKr/xoDyYCcB1e/3bNRvk8nd5+RPV71/IKgIi40s7tQN5P5oyIvAT2LzCV29/fc/SjUkvEtZFCADM3fAX9y99eLGi/4N4Yh2aa1k+LFSunxq9B+VBpJzQSUbjTa3S9w99PcvRMwGkXI6orwVAZVMhAJjF9taoV4O3Cxuw8zsxvc/fPaTq9+SQK/V6TT+UOZFl4uzH0U8p5E6DuoW1Lo8wqUS7cJcKiZrYuE/l9DXVYuLXi8JVG9yFOp8vsUYDdk7IyJe60crKHJxb4oV74ZcD3wWtIj3RBpVZbJzWb2GUp7mDjfc3OQI6WuCEmhoDLSjdzf3WeZ2c6os8R2wOvo1PYXpIsYF2XBmDp57IaMx7ZoMb0dLXT/QlXwm7n7zJARCuqd1HRhJWB9oB+KlHRGecbdi8pxS2k926HWj8uide494Og07p3AThEZKB6rcZMLa+gatwVqf7sbMBLl1L6N1uKz3f2FsuZQC8KoDCrB1Gt7iLv/2HItuVI1+C7oJDnQ3Z+r5TybAqZuLnsBx6IChdmos0Ufi/7TQRMjefGXR95L3P3qAv/2CUiq62J0cOuFvFbvoHvwTXc/qKjxAtGYmlyY2RLA0kAXpMu8A/JQ3urue1YxhyoJozKoDDNr6e6zI7zaeEjdXI5EIfHR8dkETYG8N97MfgVc4O6fZY0ZChxnCVRlPBAZNOejg1zz1AAi7rcSaGxNLvIdlJIeaT/gbXe/v6o5VEUYlUEQBEGTIifz0h043903Lnm8dkhOrS0q2Bhb5nhNHTMbgLzCJwK3Igm1S9x9mpmdiho+lNZk4xu6xk0E7qxnTdIwKoMgCIImg5m18NRj2czOQIL/l5bgpTwV+AIYj0Sv2yHjojOSFhqKtHJjEy6YVHV9DQozv4HyVjNP4UPAMVVoEpvZ34BpqMp8DuozvgzK8zyv7PFrQVR/B0EQBHVNrv/zOqg97AHpqZtR1TcFG5SrAx2RJuFJqAp5Bqo4Xyf92th6K9JoLNSyyUUj6BpXU8KoDIIgCOqanDdwNtA65bXNcvdJZvbDlPM2qcDxXjezIzND1cy6IGmh94EfASuHQVk+NWpyUdOucbUmjMogCIKgbknVv6uiMPdUM3sX6Oruo8zsOGBn4F6gMKMS5vV8unveiJhc5DjBt8PdP0Ce6bJpFF3jakXkVAZBEAR1i5n1Q236xgATgLWB45HXagpwFvBilmdZwXxCB7ZOSVJGDwPbufujuccPQTqVc4Cz3H1CjaZYOmFUBkEQBHVL6rt8ICqWWAq1R1wO9eK+LPUBD0MvWGjM7DygN9ACXWtZ17hJZrZ4U+gaF0ZlEARBUJeYWUvgy0wL0sw2R1IzvVBl9lvAme7+Ru1mGdQL0TVOvTCDIAiCoB45DBVLnGZmXdz9cXf/E8p7uwj4EnW3CYKFInWN+zIZlM3cfaS77w10Qv3kdwU61rNBCeGpDIIgCOqU1PN+AGqJ2Bl4BbgDGOnu02o5t6D+iK5xYVQGQRAETYBcbuXuQBvUi/vApGkYBEEBhFEZBEEQ1DX53svp542Avd395BpOKwjqjjAqgyAIgroj10XnMJTPthqqxh3m7lNrO7sgqE+iUCcIgiCoO5JB2Rk4EjgDaAtsjwp3XkpddYIgKJAwKoMgCIK6wsxWS98eBFwFtAducfctUSXuPe7+fo2mFwR1SxiVQRAEQd1gZi2A081sK+Az4FpgD+DB9CufA3fXaHpBUNeEURkEQRDUE21Q15xbkPD0qsD9wL5m1hPYF3j26/97EATflyjUCYIgCOqO1If5l8Bc4C5gF6AdcKO7X1jLuQVBvRJGZRAEQVAXmJkBS6I6nc/MbCngFNTVZBgwpqmKUgdBFSxW6wkEQRAEQUEMRiHvd81sWdRv+WFgQ9RJ504z28nd59ZwjkFQt4RRGQRBENQLzYA1gLGoY04vVKwzGlgCmBkGZRCUR4S/gyAIgrrAzJYA9gEGAo8C5wMzgObuPqcp92QOgioIozIIgiCoK8ysHXA4Ejwf7e5jazylIGgShFEZBEEQLPKY2anAF8B4YBaq9N4A6AxMAYYCczw2vSAojcipDIIgCBZpzGx1oCPwA+Ak4GkU9t4EWCf92lh3f6EW8wuCpkJ4KoMgCIJFHjNbzN3npO+7IGmh94EfASu7+7Bazi8ImgJhVAZBEARBEAQLTbRpDIIgCOqWJIgeBEEFhKcyCIIgCIIgWGjCUxkEQRAEQRAsNGFUBkEQBEEQBAtNGJVBEARBEATBQhNGZRAEQRAEQbDQhFEZBEEQBEEQLDRhVAZBEARBEAQLTRiVQRAEQRAEwULzf6WV+hNgIEr/AAAAAElFTkSuQmCC",
|
476 |
+
"text/plain": [
|
477 |
+
"<Figure size 800x800 with 1 Axes>"
|
478 |
+
]
|
479 |
+
},
|
480 |
+
"metadata": {
|
481 |
+
"needs_background": "light"
|
482 |
+
},
|
483 |
+
"output_type": "display_data"
|
484 |
+
}
|
485 |
+
],
|
486 |
+
"source": [
|
487 |
+
"plt.figure(figsize=(10, 10), dpi=80)\n",
|
488 |
+
"\n",
|
489 |
+
"unique, counts = np.unique(labels, return_counts=True)\n",
|
490 |
+
"plt.bar(CLASS_LABELS[unique], counts)\n",
|
491 |
+
"plt.xticks(rotation=70)\n",
|
492 |
+
"\n",
|
493 |
+
"unique, counts = np.unique(y_train, return_counts=True)\n",
|
494 |
+
"plt.bar(CLASS_LABELS[unique], counts)\n",
|
495 |
+
"plt.xticks(rotation=70)\n",
|
496 |
+
"\n",
|
497 |
+
"unique, counts = np.unique(y_test, return_counts=True)\n",
|
498 |
+
"plt.bar(CLASS_LABELS[unique], counts)\n",
|
499 |
+
"plt.xticks(rotation=70)\n",
|
500 |
+
"\n",
|
501 |
+
"unique, counts = np.unique(y_val, return_counts=True)\n",
|
502 |
+
"plt.bar(CLASS_LABELS[unique], counts)\n",
|
503 |
+
"plt.xticks(rotation=70)\n",
|
504 |
+
"\n",
|
505 |
+
"plt.legend([\"All\", \"Train\", \"Test\", \"Validation\"])\n",
|
506 |
+
"\n",
|
507 |
+
"plt.show()"
|
508 |
+
]
|
509 |
+
},
|
510 |
+
{
|
511 |
+
"cell_type": "code",
|
512 |
+
"execution_count": null,
|
513 |
+
"metadata": {
|
514 |
+
"id": "QaZxGMgKZznS"
|
515 |
+
},
|
516 |
+
"outputs": [],
|
517 |
+
"source": [
|
518 |
+
"def train(config=None):\n",
|
519 |
+
" with wandb.init(config=config):\n",
|
520 |
+
" config = wandb.config\n",
|
521 |
+
" \n",
|
522 |
+
" # Generate new model\n",
|
523 |
+
" model = Transformer(\n",
|
524 |
+
" num_layers=config.num_layers,\n",
|
525 |
+
" embed_dim=config.embed_layer_size,\n",
|
526 |
+
" mlp_dim=config.fc_layer_size,\n",
|
527 |
+
" num_heads=config.num_heads,\n",
|
528 |
+
" num_classes=18,\n",
|
529 |
+
" dropout_rate=config.dropout,\n",
|
530 |
+
" attention_dropout_rate=config.attention_dropout,\n",
|
531 |
+
" )\n",
|
532 |
+
"\n",
|
533 |
+
" # adapt on training dataset - must be before model.compile !!!\n",
|
534 |
+
" model.input_norm.adapt(X_train, batch_size=config.batch_size)\n",
|
535 |
+
" print(model.input_norm.variables)\n",
|
536 |
+
"\n",
|
537 |
+
" # Select optimizer\n",
|
538 |
+
" if config.optimizer == \"adam\":\n",
|
539 |
+
" optim = Adam(\n",
|
540 |
+
" global_clipnorm=config.global_clipnorm,\n",
|
541 |
+
" amsgrad=config.amsgrad,\n",
|
542 |
+
" )\n",
|
543 |
+
" elif config.optimizer == \"adamw\":\n",
|
544 |
+
" optim = AdamW(\n",
|
545 |
+
" weight_decay=config.weight_decay,\n",
|
546 |
+
" amsgrad=config.amsgrad,\n",
|
547 |
+
" global_clipnorm=config.global_clipnorm,\n",
|
548 |
+
" exclude_from_weight_decay=[\"position\"]\n",
|
549 |
+
" )\n",
|
550 |
+
" else:\n",
|
551 |
+
" raise ValueError(\"The used optimizer is not in list of available\")\n",
|
552 |
+
"\n",
|
553 |
+
" model.compile(\n",
|
554 |
+
" loss=smoothed_sparse_categorical_crossentropy(label_smoothing=config.label_smoothing),\n",
|
555 |
+
" optimizer=optim,\n",
|
556 |
+
" metrics=[\"accuracy\"],\n",
|
557 |
+
" )\n",
|
558 |
+
"\n",
|
559 |
+
" # Train model\n",
|
560 |
+
" model.fit(\n",
|
561 |
+
" X_train,\n",
|
562 |
+
" y_train,\n",
|
563 |
+
" batch_size=config.batch_size,\n",
|
564 |
+
" epochs=config.epochs,\n",
|
565 |
+
" validation_data=(X_val, y_val),\n",
|
566 |
+
" callbacks=[\n",
|
567 |
+
" LearningRateScheduler(cosine_schedule(base_lr=config.learning_rate, total_steps=config.epochs, warmup_steps=config.warmup_steps)),\n",
|
568 |
+
" PrintLR(),\n",
|
569 |
+
" WandbCallback(monitor=\"val_accuracy\", mode='max', save_weights_only=True),\n",
|
570 |
+
" EarlyStopping(monitor=\"val_accuracy\", mode='max', min_delta=0.001, patience=5),\n",
|
571 |
+
" ],\n",
|
572 |
+
" verbose=1\n",
|
573 |
+
" )\n",
|
574 |
+
"\n",
|
575 |
+
" model.summary()"
|
576 |
+
]
|
577 |
+
},
|
578 |
+
{
|
579 |
+
"cell_type": "code",
|
580 |
+
"execution_count": null,
|
581 |
+
"metadata": {
|
582 |
+
"colab": {
|
583 |
+
"base_uri": "https://localhost:8080/",
|
584 |
+
"height": 1000,
|
585 |
+
"referenced_widgets": [
|
586 |
+
"c2f96abecad54565be62d18c1b5c1e68",
|
587 |
+
"fa0aba1429524429af176534638122db",
|
588 |
+
"0054c6582b4c45faa323add90dd34770",
|
589 |
+
"634c65b48e0b40359f6158364fb54ad7",
|
590 |
+
"ebdfa2b37e5540e39bd6624f22eeb19a",
|
591 |
+
"7198820fcadc4aaf875ee617dd605fbc",
|
592 |
+
"18adf181e391491a9426d17e69a8c574",
|
593 |
+
"dc1f7e46eaf643999d482c3b17e3bee6"
|
594 |
+
]
|
595 |
+
},
|
596 |
+
"id": "J743-OTSSsZy",
|
597 |
+
"outputId": "1ea18bc2-7308-4e10-cabf-7c94643fab4a"
|
598 |
+
},
|
599 |
+
"outputs": [
|
600 |
+
{
|
601 |
+
"name": "stderr",
|
602 |
+
"output_type": "stream",
|
603 |
+
"text": [
|
604 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: Agent Starting Run: lwikvs2y with config:\n",
|
605 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \tamsgrad: False\n",
|
606 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \tattention_dropout: 0.1\n",
|
607 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \tbatch_size: 64\n",
|
608 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \tdropout: 0.1\n",
|
609 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \tembed_layer_size: 128\n",
|
610 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \tepochs: 50\n",
|
611 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \tfc_layer_size: 256\n",
|
612 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \tglobal_clipnorm: 3\n",
|
613 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \tlabel_smoothing: 0.1\n",
|
614 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \tlearning_rate: 0.001\n",
|
615 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \tnum_heads: 6\n",
|
616 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \tnum_layers: 3\n",
|
617 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \toptimizer: adam\n",
|
618 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: \twarmup_steps: 10\n"
|
619 |
+
]
|
620 |
+
},
|
621 |
+
{
|
622 |
+
"data": {
|
623 |
+
"text/html": [
|
624 |
+
"\n",
|
625 |
+
" Syncing run <strong><a href=\"https://wandb.ai/markub/imu-transformer/runs/lwikvs2y\" target=\"_blank\">earnest-sweep-1</a></strong> to <a href=\"https://wandb.ai/markub/imu-transformer\" target=\"_blank\">Weights & Biases</a> (<a href=\"https://docs.wandb.com/integrations/jupyter.html\" target=\"_blank\">docs</a>).<br/>\n",
|
626 |
+
"Sweep page: <a href=\"https://wandb.ai/markub/imu-transformer/sweeps/cfdl7wcr\" target=\"_blank\">https://wandb.ai/markub/imu-transformer/sweeps/cfdl7wcr</a><br/>\n",
|
627 |
+
"\n",
|
628 |
+
" "
|
629 |
+
],
|
630 |
+
"text/plain": [
|
631 |
+
"<IPython.core.display.HTML object>"
|
632 |
+
]
|
633 |
+
},
|
634 |
+
"metadata": {},
|
635 |
+
"output_type": "display_data"
|
636 |
+
},
|
637 |
+
{
|
638 |
+
"name": "stdout",
|
639 |
+
"output_type": "stream",
|
640 |
+
"text": [
|
641 |
+
"[<tf.Variable 'mean:0' shape=(6,) dtype=float32, numpy=\n",
|
642 |
+
"array([ 0.10979815, -0.07648689, -0.08781412, 0.03063406, 0.00979011,\n",
|
643 |
+
" 0.00650088], dtype=float32)>, <tf.Variable 'variance:0' shape=(6,) dtype=float32, numpy=\n",
|
644 |
+
"array([28.058855 , 9.622038 , 16.08444 , 3.0307784, 1.9513103,\n",
|
645 |
+
" 2.0505407], dtype=float32)>, <tf.Variable 'count:0' shape=() dtype=int64, numpy=18018000>]\n",
|
646 |
+
"Epoch 1/50\n",
|
647 |
+
" 6/939 [..............................] - ETA: 3:08 - loss: 2.8825 - accuracy: 0.1228WARNING:tensorflow:Callback method `on_train_batch_end` is slow compared to the batch time (batch time: 0.0914s vs `on_train_batch_end` time: 0.0915s). Check your callbacks.\n",
|
648 |
+
"939/939 [==============================] - 226s 234ms/step - loss: 1.8975 - accuracy: 0.4512 - val_loss: 1.4693 - val_accuracy: 0.6309 - lr: 1.0000e-04\n",
|
649 |
+
"Epoch 2/50\n",
|
650 |
+
"939/939 [==============================] - 224s 239ms/step - loss: 1.2502 - accuracy: 0.7161 - val_loss: 1.0970 - val_accuracy: 0.7766 - lr: 2.0000e-04\n",
|
651 |
+
"Epoch 3/50\n",
|
652 |
+
"939/939 [==============================] - 224s 238ms/step - loss: 1.0634 - accuracy: 0.7823 - val_loss: 1.0177 - val_accuracy: 0.8070 - lr: 3.0000e-04\n",
|
653 |
+
"Epoch 4/50\n",
|
654 |
+
"939/939 [==============================] - 225s 240ms/step - loss: 0.9973 - accuracy: 0.8063 - val_loss: 0.9463 - val_accuracy: 0.8246 - lr: 4.0000e-04\n",
|
655 |
+
"Epoch 5/50\n",
|
656 |
+
"939/939 [==============================] - 224s 239ms/step - loss: 0.9527 - accuracy: 0.8252 - val_loss: 0.9526 - val_accuracy: 0.8252 - lr: 5.0000e-04\n",
|
657 |
+
"Epoch 6/50\n",
|
658 |
+
"939/939 [==============================] - 233s 248ms/step - loss: 0.9277 - accuracy: 0.8355 - val_loss: 0.9304 - val_accuracy: 0.8317 - lr: 6.0000e-04\n",
|
659 |
+
"Epoch 7/50\n",
|
660 |
+
"939/939 [==============================] - 226s 240ms/step - loss: 0.9065 - accuracy: 0.8444 - val_loss: 0.8776 - val_accuracy: 0.8602 - lr: 7.0000e-04\n",
|
661 |
+
"Epoch 8/50\n",
|
662 |
+
"939/939 [==============================] - 224s 239ms/step - loss: 0.8888 - accuracy: 0.8529 - val_loss: 0.8554 - val_accuracy: 0.8703 - lr: 8.0000e-04\n",
|
663 |
+
"Epoch 9/50\n",
|
664 |
+
"939/939 [==============================] - 224s 239ms/step - loss: 0.8734 - accuracy: 0.8596 - val_loss: 0.9027 - val_accuracy: 0.8493 - lr: 9.0000e-04\n",
|
665 |
+
"Epoch 10/50\n",
|
666 |
+
"939/939 [==============================] - 232s 247ms/step - loss: 0.8616 - accuracy: 0.8657 - val_loss: 0.8845 - val_accuracy: 0.8542 - lr: 0.0010\n",
|
667 |
+
"Epoch 11/50\n",
|
668 |
+
"939/939 [==============================] - 227s 242ms/step - loss: 0.8363 - accuracy: 0.8779 - val_loss: 0.8222 - val_accuracy: 0.8856 - lr: 9.9846e-04\n",
|
669 |
+
"Epoch 12/50\n",
|
670 |
+
"939/939 [==============================] - 232s 248ms/step - loss: 0.8288 - accuracy: 0.8815 - val_loss: 0.8512 - val_accuracy: 0.8751 - lr: 9.9384e-04\n",
|
671 |
+
"Epoch 13/50\n",
|
672 |
+
"939/939 [==============================] - 234s 249ms/step - loss: 0.8128 - accuracy: 0.8888 - val_loss: 0.8171 - val_accuracy: 0.8859 - lr: 9.8619e-04\n",
|
673 |
+
"Epoch 14/50\n",
|
674 |
+
"939/939 [==============================] - 226s 241ms/step - loss: 0.8014 - accuracy: 0.8944 - val_loss: 0.7949 - val_accuracy: 0.8972 - lr: 9.7553e-04\n",
|
675 |
+
"Epoch 15/50\n",
|
676 |
+
"939/939 [==============================] - 232s 247ms/step - loss: 0.7910 - accuracy: 0.8990 - val_loss: 0.8334 - val_accuracy: 0.8826 - lr: 9.6194e-04\n",
|
677 |
+
"Epoch 16/50\n",
|
678 |
+
"939/939 [==============================] - 226s 241ms/step - loss: 0.7824 - accuracy: 0.9037 - val_loss: 0.8004 - val_accuracy: 0.8956 - lr: 9.4550e-04\n",
|
679 |
+
"Epoch 17/50\n",
|
680 |
+
"939/939 [==============================] - 225s 239ms/step - loss: 0.7732 - accuracy: 0.9078 - val_loss: 0.7767 - val_accuracy: 0.9084 - lr: 9.2632e-04\n",
|
681 |
+
"Epoch 18/50\n",
|
682 |
+
"939/939 [==============================] - 232s 247ms/step - loss: 0.7614 - accuracy: 0.9136 - val_loss: 0.7578 - val_accuracy: 0.9181 - lr: 9.0451e-04\n",
|
683 |
+
"Epoch 19/50\n",
|
684 |
+
"939/939 [==============================] - 226s 241ms/step - loss: 0.7565 - accuracy: 0.9163 - val_loss: 0.7581 - val_accuracy: 0.9151 - lr: 8.8020e-04\n",
|
685 |
+
"Epoch 20/50\n",
|
686 |
+
"939/939 [==============================] - 225s 240ms/step - loss: 0.7475 - accuracy: 0.9202 - val_loss: 0.7378 - val_accuracy: 0.9265 - lr: 8.5355e-04\n",
|
687 |
+
"Epoch 21/50\n",
|
688 |
+
"939/939 [==============================] - 225s 239ms/step - loss: 0.7413 - accuracy: 0.9231 - val_loss: 0.7479 - val_accuracy: 0.9215 - lr: 8.2472e-04\n",
|
689 |
+
"Epoch 22/50\n",
|
690 |
+
"939/939 [==============================] - 225s 240ms/step - loss: 0.7364 - accuracy: 0.9255 - val_loss: 0.7346 - val_accuracy: 0.9281 - lr: 7.9389e-04\n",
|
691 |
+
"Epoch 23/50\n",
|
692 |
+
"939/939 [==============================] - 225s 240ms/step - loss: 0.7311 - accuracy: 0.9279 - val_loss: 0.7497 - val_accuracy: 0.9220 - lr: 7.6125e-04\n",
|
693 |
+
"Epoch 24/50\n",
|
694 |
+
"939/939 [==============================] - 225s 240ms/step - loss: 0.7251 - accuracy: 0.9307 - val_loss: 0.7317 - val_accuracy: 0.9298 - lr: 7.2700e-04\n",
|
695 |
+
"Epoch 25/50\n",
|
696 |
+
"939/939 [==============================] - 224s 238ms/step - loss: 0.7216 - accuracy: 0.9324 - val_loss: 0.7182 - val_accuracy: 0.9356 - lr: 6.9134e-04\n",
|
697 |
+
"Epoch 26/50\n",
|
698 |
+
"939/939 [==============================] - 226s 241ms/step - loss: 0.7163 - accuracy: 0.9348 - val_loss: 0.7221 - val_accuracy: 0.9340 - lr: 6.5451e-04\n",
|
699 |
+
"Epoch 27/50\n",
|
700 |
+
"939/939 [==============================] - 233s 249ms/step - loss: 0.7107 - accuracy: 0.9373 - val_loss: 0.7117 - val_accuracy: 0.9390 - lr: 6.1672e-04\n",
|
701 |
+
"Epoch 28/50\n",
|
702 |
+
"939/939 [==============================] - 227s 242ms/step - loss: 0.7077 - accuracy: 0.9391 - val_loss: 0.7110 - val_accuracy: 0.9397 - lr: 5.7822e-04\n",
|
703 |
+
"Epoch 29/50\n",
|
704 |
+
"939/939 [==============================] - 225s 240ms/step - loss: 0.7030 - accuracy: 0.9409 - val_loss: 0.7051 - val_accuracy: 0.9416 - lr: 5.3923e-04\n",
|
705 |
+
"Epoch 30/50\n",
|
706 |
+
"939/939 [==============================] - 225s 240ms/step - loss: 0.6987 - accuracy: 0.9429 - val_loss: 0.6998 - val_accuracy: 0.9432 - lr: 5.0000e-04\n",
|
707 |
+
"Epoch 31/50\n",
|
708 |
+
"939/939 [==============================] - 233s 248ms/step - loss: 0.6951 - accuracy: 0.9448 - val_loss: 0.6992 - val_accuracy: 0.9447 - lr: 4.6077e-04\n",
|
709 |
+
"Epoch 32/50\n",
|
710 |
+
"939/939 [==============================] - 227s 241ms/step - loss: 0.6931 - accuracy: 0.9459 - val_loss: 0.6999 - val_accuracy: 0.9443 - lr: 4.2178e-04\n",
|
711 |
+
"Epoch 33/50\n",
|
712 |
+
"939/939 [==============================] - 225s 239ms/step - loss: 0.6892 - accuracy: 0.9474 - val_loss: 0.6952 - val_accuracy: 0.9458 - lr: 3.8328e-04\n",
|
713 |
+
"Epoch 34/50\n",
|
714 |
+
"939/939 [==============================] - 224s 239ms/step - loss: 0.6837 - accuracy: 0.9505 - val_loss: 0.6854 - val_accuracy: 0.9508 - lr: 3.4549e-04\n",
|
715 |
+
"Epoch 35/50\n",
|
716 |
+
"939/939 [==============================] - 232s 247ms/step - loss: 0.6752 - accuracy: 0.9549 - val_loss: 0.6496 - val_accuracy: 0.9714 - lr: 3.0866e-04\n",
|
717 |
+
"Epoch 36/50\n",
|
718 |
+
"939/939 [==============================] - 234s 249ms/step - loss: 0.6197 - accuracy: 0.9840 - val_loss: 0.6156 - val_accuracy: 0.9858 - lr: 2.7300e-04\n",
|
719 |
+
"Epoch 37/50\n",
|
720 |
+
"939/939 [==============================] - 234s 249ms/step - loss: 0.6016 - accuracy: 0.9919 - val_loss: 0.6100 - val_accuracy: 0.9891 - lr: 2.3875e-04\n",
|
721 |
+
"Epoch 38/50\n",
|
722 |
+
"939/939 [==============================] - 226s 241ms/step - loss: 0.5956 - accuracy: 0.9943 - val_loss: 0.6126 - val_accuracy: 0.9877 - lr: 2.0611e-04\n",
|
723 |
+
"Epoch 39/50\n",
|
724 |
+
"939/939 [==============================] - 233s 248ms/step - loss: 0.5924 - accuracy: 0.9957 - val_loss: 0.6096 - val_accuracy: 0.9894 - lr: 1.7528e-04\n",
|
725 |
+
"Epoch 40/50\n",
|
726 |
+
"939/939 [==============================] - 227s 241ms/step - loss: 0.5902 - accuracy: 0.9965 - val_loss: 0.6141 - val_accuracy: 0.9880 - lr: 1.4645e-04\n",
|
727 |
+
"Epoch 41/50\n",
|
728 |
+
"939/939 [==============================] - 225s 240ms/step - loss: 0.5881 - accuracy: 0.9973 - val_loss: 0.6074 - val_accuracy: 0.9908 - lr: 1.1980e-04\n",
|
729 |
+
"Epoch 42/50\n",
|
730 |
+
"939/939 [==============================] - 226s 240ms/step - loss: 0.5868 - accuracy: 0.9979 - val_loss: 0.6050 - val_accuracy: 0.9915 - lr: 9.5491e-05\n",
|
731 |
+
"Epoch 43/50\n",
|
732 |
+
"939/939 [==============================] - 233s 248ms/step - loss: 0.5866 - accuracy: 0.9979 - val_loss: 0.6042 - val_accuracy: 0.9914 - lr: 7.3680e-05\n",
|
733 |
+
"Epoch 44/50\n",
|
734 |
+
"939/939 [==============================] - 227s 241ms/step - loss: 0.5851 - accuracy: 0.9986 - val_loss: 0.6060 - val_accuracy: 0.9910 - lr: 5.4497e-05\n",
|
735 |
+
"Epoch 45/50\n",
|
736 |
+
"939/939 [==============================] - 226s 240ms/step - loss: 0.5845 - accuracy: 0.9988 - val_loss: 0.6055 - val_accuracy: 0.9914 - lr: 3.8060e-05\n",
|
737 |
+
"Epoch 46/50\n",
|
738 |
+
"939/939 [==============================] - 225s 239ms/step - loss: 0.5837 - accuracy: 0.9991 - val_loss: 0.6056 - val_accuracy: 0.9918 - lr: 2.4472e-05\n",
|
739 |
+
"Model: \"transformer\"\n",
|
740 |
+
"_________________________________________________________________\n",
|
741 |
+
" Layer (type) Output Shape Param # \n",
|
742 |
+
"=================================================================\n",
|
743 |
+
" normalization (Normalizatio multiple 13 \n",
|
744 |
+
" n) \n",
|
745 |
+
" \n",
|
746 |
+
" positional_embedding (Posit multiple 39296 \n",
|
747 |
+
" ionalEmbedding) \n",
|
748 |
+
" \n",
|
749 |
+
" encoder (Encoder) multiple 462080 \n",
|
750 |
+
" \n",
|
751 |
+
" encoder_1 (Encoder) multiple 462080 \n",
|
752 |
+
" \n",
|
753 |
+
" encoder_2 (Encoder) multiple 462080 \n",
|
754 |
+
" \n",
|
755 |
+
" layer_normalization_6 (Laye multiple 256 \n",
|
756 |
+
" rNormalization) \n",
|
757 |
+
" \n",
|
758 |
+
" dense_7 (Dense) multiple 2322 \n",
|
759 |
+
" \n",
|
760 |
+
"=================================================================\n",
|
761 |
+
"Total params: 1,428,127\n",
|
762 |
+
"Trainable params: 1,428,114\n",
|
763 |
+
"Non-trainable params: 13\n",
|
764 |
+
"_________________________________________________________________\n"
|
765 |
+
]
|
766 |
+
},
|
767 |
+
{
|
768 |
+
"data": {
|
769 |
+
"text/html": [
|
770 |
+
"<br/>Waiting for W&B process to finish, PID 498... <strong style=\"color:green\">(success).</strong>"
|
771 |
+
],
|
772 |
+
"text/plain": [
|
773 |
+
"<IPython.core.display.HTML object>"
|
774 |
+
]
|
775 |
+
},
|
776 |
+
"metadata": {},
|
777 |
+
"output_type": "display_data"
|
778 |
+
},
|
779 |
+
{
|
780 |
+
"data": {
|
781 |
+
"application/vnd.jupyter.widget-view+json": {
|
782 |
+
"model_id": "c2f96abecad54565be62d18c1b5c1e68",
|
783 |
+
"version_major": 2,
|
784 |
+
"version_minor": 0
|
785 |
+
},
|
786 |
+
"text/plain": [
|
787 |
+
"VBox(children=(Label(value=' 5.52MB of 5.52MB uploaded (0.00MB deduped)\\r'), FloatProgress(value=1.0, max=1.0)…"
|
788 |
+
]
|
789 |
+
},
|
790 |
+
"metadata": {},
|
791 |
+
"output_type": "display_data"
|
792 |
+
},
|
793 |
+
{
|
794 |
+
"data": {
|
795 |
+
"text/html": [
|
796 |
+
"<style>\n",
|
797 |
+
" table.wandb td:nth-child(1) { padding: 0 10px; text-align: right }\n",
|
798 |
+
" .wandb-row { display: flex; flex-direction: row; flex-wrap: wrap; width: 100% }\n",
|
799 |
+
" .wandb-col { display: flex; flex-direction: column; flex-basis: 100%; flex: 1; padding: 10px; }\n",
|
800 |
+
" </style>\n",
|
801 |
+
"<div class=\"wandb-row\"><div class=\"wandb-col\">\n",
|
802 |
+
"<h3>Run history:</h3><br/><table class=\"wandb\"><tr><td>accuracy</td><td>▁▄▅▆▆▆▆▆▆▆▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇█████████</td></tr><tr><td>epoch</td><td>▁▁▁▁▂▂▂▂▂▃▃▃▃▃▄▄▄▄▄▄▅▅▅▅▅▅▆▆▆▆▆▇▇▇▇▇████</td></tr><tr><td>loss</td><td>█▅▄▃▃▃▃▃▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▁▁▁▁▁▁▁▁▁▁</td></tr><tr><td>lr</td><td>▁▂▃▄▄▅▆▇██████▇▇▇▇▇▇▆▆▅▅▅▅▄▄▄▃▃▃▂▂▂▂▁▁▁▁</td></tr><tr><td>val_accuracy</td><td>▁▄▄▅▅▅▅▅▅▆▆▆▆▆▆▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇██████████</td></tr><tr><td>val_loss</td><td>█▅▄▄▄▄▃▃▃▃▃▃▃▃▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▁▁▁▁▁▁▁▁▁▁</td></tr></table><br/></div><div class=\"wandb-col\">\n",
|
803 |
+
"<h3>Run summary:</h3><br/><table class=\"wandb\"><tr><td>accuracy</td><td>0.99912</td></tr><tr><td>best_epoch</td><td>45</td></tr><tr><td>best_val_accuracy</td><td>0.99177</td></tr><tr><td>epoch</td><td>45</td></tr><tr><td>loss</td><td>0.58374</td></tr><tr><td>lr</td><td>2e-05</td></tr><tr><td>val_accuracy</td><td>0.99177</td></tr><tr><td>val_loss</td><td>0.60557</td></tr></table>\n",
|
804 |
+
"</div></div>\n",
|
805 |
+
"Synced 5 W&B file(s), 1 media file(s), 0 artifact file(s) and 1 other file(s)\n",
|
806 |
+
"<br/>Synced <strong style=\"color:#cdcd00\">earnest-sweep-1</strong>: <a href=\"https://wandb.ai/markub/imu-transformer/runs/lwikvs2y\" target=\"_blank\">https://wandb.ai/markub/imu-transformer/runs/lwikvs2y</a><br/>\n",
|
807 |
+
"Find logs at: <code>./wandb/run-20220201_003202-lwikvs2y/logs</code><br/>\n"
|
808 |
+
],
|
809 |
+
"text/plain": [
|
810 |
+
"<IPython.core.display.HTML object>"
|
811 |
+
]
|
812 |
+
},
|
813 |
+
"metadata": {},
|
814 |
+
"output_type": "display_data"
|
815 |
+
},
|
816 |
+
{
|
817 |
+
"name": "stderr",
|
818 |
+
"output_type": "stream",
|
819 |
+
"text": [
|
820 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: Sweep Agent: Waiting for job.\n",
|
821 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: Sweep Agent: Exiting.\n"
|
822 |
+
]
|
823 |
+
}
|
824 |
+
],
|
825 |
+
"source": [
|
826 |
+
"wandb.agent(sweep_id, train, count=32)"
|
827 |
+
]
|
828 |
+
}
|
829 |
+
],
|
830 |
+
"metadata": {
|
831 |
+
"accelerator": "GPU",
|
832 |
+
"colab": {
|
833 |
+
"collapsed_sections": [],
|
834 |
+
"name": "Training_posledna_verzia_3-3.ipynb",
|
835 |
+
"provenance": []
|
836 |
+
},
|
837 |
+
"interpreter": {
|
838 |
+
"hash": "9185113d2128201d66faecd4f34fb34e89a635073a034991399523e584519355"
|
839 |
+
},
|
840 |
+
"kernelspec": {
|
841 |
+
"display_name": "Python 3.9.6 64-bit ('base': conda)",
|
842 |
+
"language": "python",
|
843 |
+
"name": "python3"
|
844 |
+
},
|
845 |
+
"language_info": {
|
846 |
+
"codemirror_mode": {
|
847 |
+
"name": "ipython",
|
848 |
+
"version": 3
|
849 |
+
},
|
850 |
+
"file_extension": ".py",
|
851 |
+
"mimetype": "text/x-python",
|
852 |
+
"name": "python",
|
853 |
+
"nbconvert_exporter": "python",
|
854 |
+
"pygments_lexer": "ipython3",
|
855 |
+
"version": "3.9.7"
|
856 |
+
},
|
857 |
+
"orig_nbformat": 4,
|
858 |
+
"widgets": {
|
859 |
+
"application/vnd.jupyter.widget-state+json": {
|
860 |
+
"0054c6582b4c45faa323add90dd34770": {
|
861 |
+
"model_module": "@jupyter-widgets/controls",
|
862 |
+
"model_module_version": "1.5.0",
|
863 |
+
"model_name": "LabelModel",
|
864 |
+
"state": {
|
865 |
+
"_dom_classes": [],
|
866 |
+
"_model_module": "@jupyter-widgets/controls",
|
867 |
+
"_model_module_version": "1.5.0",
|
868 |
+
"_model_name": "LabelModel",
|
869 |
+
"_view_count": null,
|
870 |
+
"_view_module": "@jupyter-widgets/controls",
|
871 |
+
"_view_module_version": "1.5.0",
|
872 |
+
"_view_name": "LabelView",
|
873 |
+
"description": "",
|
874 |
+
"description_tooltip": null,
|
875 |
+
"layout": "IPY_MODEL_7198820fcadc4aaf875ee617dd605fbc",
|
876 |
+
"placeholder": "",
|
877 |
+
"style": "IPY_MODEL_ebdfa2b37e5540e39bd6624f22eeb19a",
|
878 |
+
"value": " 5.55MB of 5.55MB uploaded (0.00MB deduped)\r"
|
879 |
+
}
|
880 |
+
},
|
881 |
+
"18adf181e391491a9426d17e69a8c574": {
|
882 |
+
"model_module": "@jupyter-widgets/controls",
|
883 |
+
"model_module_version": "1.5.0",
|
884 |
+
"model_name": "ProgressStyleModel",
|
885 |
+
"state": {
|
886 |
+
"_model_module": "@jupyter-widgets/controls",
|
887 |
+
"_model_module_version": "1.5.0",
|
888 |
+
"_model_name": "ProgressStyleModel",
|
889 |
+
"_view_count": null,
|
890 |
+
"_view_module": "@jupyter-widgets/base",
|
891 |
+
"_view_module_version": "1.2.0",
|
892 |
+
"_view_name": "StyleView",
|
893 |
+
"bar_color": null,
|
894 |
+
"description_width": ""
|
895 |
+
}
|
896 |
+
},
|
897 |
+
"634c65b48e0b40359f6158364fb54ad7": {
|
898 |
+
"model_module": "@jupyter-widgets/controls",
|
899 |
+
"model_module_version": "1.5.0",
|
900 |
+
"model_name": "FloatProgressModel",
|
901 |
+
"state": {
|
902 |
+
"_dom_classes": [],
|
903 |
+
"_model_module": "@jupyter-widgets/controls",
|
904 |
+
"_model_module_version": "1.5.0",
|
905 |
+
"_model_name": "FloatProgressModel",
|
906 |
+
"_view_count": null,
|
907 |
+
"_view_module": "@jupyter-widgets/controls",
|
908 |
+
"_view_module_version": "1.5.0",
|
909 |
+
"_view_name": "ProgressView",
|
910 |
+
"bar_style": "",
|
911 |
+
"description": "",
|
912 |
+
"description_tooltip": null,
|
913 |
+
"layout": "IPY_MODEL_dc1f7e46eaf643999d482c3b17e3bee6",
|
914 |
+
"max": 1,
|
915 |
+
"min": 0,
|
916 |
+
"orientation": "horizontal",
|
917 |
+
"style": "IPY_MODEL_18adf181e391491a9426d17e69a8c574",
|
918 |
+
"value": 1
|
919 |
+
}
|
920 |
+
},
|
921 |
+
"7198820fcadc4aaf875ee617dd605fbc": {
|
922 |
+
"model_module": "@jupyter-widgets/base",
|
923 |
+
"model_module_version": "1.2.0",
|
924 |
+
"model_name": "LayoutModel",
|
925 |
+
"state": {
|
926 |
+
"_model_module": "@jupyter-widgets/base",
|
927 |
+
"_model_module_version": "1.2.0",
|
928 |
+
"_model_name": "LayoutModel",
|
929 |
+
"_view_count": null,
|
930 |
+
"_view_module": "@jupyter-widgets/base",
|
931 |
+
"_view_module_version": "1.2.0",
|
932 |
+
"_view_name": "LayoutView",
|
933 |
+
"align_content": null,
|
934 |
+
"align_items": null,
|
935 |
+
"align_self": null,
|
936 |
+
"border": null,
|
937 |
+
"bottom": null,
|
938 |
+
"display": null,
|
939 |
+
"flex": null,
|
940 |
+
"flex_flow": null,
|
941 |
+
"grid_area": null,
|
942 |
+
"grid_auto_columns": null,
|
943 |
+
"grid_auto_flow": null,
|
944 |
+
"grid_auto_rows": null,
|
945 |
+
"grid_column": null,
|
946 |
+
"grid_gap": null,
|
947 |
+
"grid_row": null,
|
948 |
+
"grid_template_areas": null,
|
949 |
+
"grid_template_columns": null,
|
950 |
+
"grid_template_rows": null,
|
951 |
+
"height": null,
|
952 |
+
"justify_content": null,
|
953 |
+
"justify_items": null,
|
954 |
+
"left": null,
|
955 |
+
"margin": null,
|
956 |
+
"max_height": null,
|
957 |
+
"max_width": null,
|
958 |
+
"min_height": null,
|
959 |
+
"min_width": null,
|
960 |
+
"object_fit": null,
|
961 |
+
"object_position": null,
|
962 |
+
"order": null,
|
963 |
+
"overflow": null,
|
964 |
+
"overflow_x": null,
|
965 |
+
"overflow_y": null,
|
966 |
+
"padding": null,
|
967 |
+
"right": null,
|
968 |
+
"top": null,
|
969 |
+
"visibility": null,
|
970 |
+
"width": null
|
971 |
+
}
|
972 |
+
},
|
973 |
+
"c2f96abecad54565be62d18c1b5c1e68": {
|
974 |
+
"model_module": "@jupyter-widgets/controls",
|
975 |
+
"model_module_version": "1.5.0",
|
976 |
+
"model_name": "VBoxModel",
|
977 |
+
"state": {
|
978 |
+
"_dom_classes": [],
|
979 |
+
"_model_module": "@jupyter-widgets/controls",
|
980 |
+
"_model_module_version": "1.5.0",
|
981 |
+
"_model_name": "VBoxModel",
|
982 |
+
"_view_count": null,
|
983 |
+
"_view_module": "@jupyter-widgets/controls",
|
984 |
+
"_view_module_version": "1.5.0",
|
985 |
+
"_view_name": "VBoxView",
|
986 |
+
"box_style": "",
|
987 |
+
"children": [
|
988 |
+
"IPY_MODEL_0054c6582b4c45faa323add90dd34770",
|
989 |
+
"IPY_MODEL_634c65b48e0b40359f6158364fb54ad7"
|
990 |
+
],
|
991 |
+
"layout": "IPY_MODEL_fa0aba1429524429af176534638122db"
|
992 |
+
}
|
993 |
+
},
|
994 |
+
"dc1f7e46eaf643999d482c3b17e3bee6": {
|
995 |
+
"model_module": "@jupyter-widgets/base",
|
996 |
+
"model_module_version": "1.2.0",
|
997 |
+
"model_name": "LayoutModel",
|
998 |
+
"state": {
|
999 |
+
"_model_module": "@jupyter-widgets/base",
|
1000 |
+
"_model_module_version": "1.2.0",
|
1001 |
+
"_model_name": "LayoutModel",
|
1002 |
+
"_view_count": null,
|
1003 |
+
"_view_module": "@jupyter-widgets/base",
|
1004 |
+
"_view_module_version": "1.2.0",
|
1005 |
+
"_view_name": "LayoutView",
|
1006 |
+
"align_content": null,
|
1007 |
+
"align_items": null,
|
1008 |
+
"align_self": null,
|
1009 |
+
"border": null,
|
1010 |
+
"bottom": null,
|
1011 |
+
"display": null,
|
1012 |
+
"flex": null,
|
1013 |
+
"flex_flow": null,
|
1014 |
+
"grid_area": null,
|
1015 |
+
"grid_auto_columns": null,
|
1016 |
+
"grid_auto_flow": null,
|
1017 |
+
"grid_auto_rows": null,
|
1018 |
+
"grid_column": null,
|
1019 |
+
"grid_gap": null,
|
1020 |
+
"grid_row": null,
|
1021 |
+
"grid_template_areas": null,
|
1022 |
+
"grid_template_columns": null,
|
1023 |
+
"grid_template_rows": null,
|
1024 |
+
"height": null,
|
1025 |
+
"justify_content": null,
|
1026 |
+
"justify_items": null,
|
1027 |
+
"left": null,
|
1028 |
+
"margin": null,
|
1029 |
+
"max_height": null,
|
1030 |
+
"max_width": null,
|
1031 |
+
"min_height": null,
|
1032 |
+
"min_width": null,
|
1033 |
+
"object_fit": null,
|
1034 |
+
"object_position": null,
|
1035 |
+
"order": null,
|
1036 |
+
"overflow": null,
|
1037 |
+
"overflow_x": null,
|
1038 |
+
"overflow_y": null,
|
1039 |
+
"padding": null,
|
1040 |
+
"right": null,
|
1041 |
+
"top": null,
|
1042 |
+
"visibility": null,
|
1043 |
+
"width": null
|
1044 |
+
}
|
1045 |
+
},
|
1046 |
+
"ebdfa2b37e5540e39bd6624f22eeb19a": {
|
1047 |
+
"model_module": "@jupyter-widgets/controls",
|
1048 |
+
"model_module_version": "1.5.0",
|
1049 |
+
"model_name": "DescriptionStyleModel",
|
1050 |
+
"state": {
|
1051 |
+
"_model_module": "@jupyter-widgets/controls",
|
1052 |
+
"_model_module_version": "1.5.0",
|
1053 |
+
"_model_name": "DescriptionStyleModel",
|
1054 |
+
"_view_count": null,
|
1055 |
+
"_view_module": "@jupyter-widgets/base",
|
1056 |
+
"_view_module_version": "1.2.0",
|
1057 |
+
"_view_name": "StyleView",
|
1058 |
+
"description_width": ""
|
1059 |
+
}
|
1060 |
+
},
|
1061 |
+
"fa0aba1429524429af176534638122db": {
|
1062 |
+
"model_module": "@jupyter-widgets/base",
|
1063 |
+
"model_module_version": "1.2.0",
|
1064 |
+
"model_name": "LayoutModel",
|
1065 |
+
"state": {
|
1066 |
+
"_model_module": "@jupyter-widgets/base",
|
1067 |
+
"_model_module_version": "1.2.0",
|
1068 |
+
"_model_name": "LayoutModel",
|
1069 |
+
"_view_count": null,
|
1070 |
+
"_view_module": "@jupyter-widgets/base",
|
1071 |
+
"_view_module_version": "1.2.0",
|
1072 |
+
"_view_name": "LayoutView",
|
1073 |
+
"align_content": null,
|
1074 |
+
"align_items": null,
|
1075 |
+
"align_self": null,
|
1076 |
+
"border": null,
|
1077 |
+
"bottom": null,
|
1078 |
+
"display": null,
|
1079 |
+
"flex": null,
|
1080 |
+
"flex_flow": null,
|
1081 |
+
"grid_area": null,
|
1082 |
+
"grid_auto_columns": null,
|
1083 |
+
"grid_auto_flow": null,
|
1084 |
+
"grid_auto_rows": null,
|
1085 |
+
"grid_column": null,
|
1086 |
+
"grid_gap": null,
|
1087 |
+
"grid_row": null,
|
1088 |
+
"grid_template_areas": null,
|
1089 |
+
"grid_template_columns": null,
|
1090 |
+
"grid_template_rows": null,
|
1091 |
+
"height": null,
|
1092 |
+
"justify_content": null,
|
1093 |
+
"justify_items": null,
|
1094 |
+
"left": null,
|
1095 |
+
"margin": null,
|
1096 |
+
"max_height": null,
|
1097 |
+
"max_width": null,
|
1098 |
+
"min_height": null,
|
1099 |
+
"min_width": null,
|
1100 |
+
"object_fit": null,
|
1101 |
+
"object_position": null,
|
1102 |
+
"order": null,
|
1103 |
+
"overflow": null,
|
1104 |
+
"overflow_x": null,
|
1105 |
+
"overflow_y": null,
|
1106 |
+
"padding": null,
|
1107 |
+
"right": null,
|
1108 |
+
"top": null,
|
1109 |
+
"visibility": null,
|
1110 |
+
"width": null
|
1111 |
+
}
|
1112 |
+
}
|
1113 |
+
}
|
1114 |
+
}
|
1115 |
+
},
|
1116 |
+
"nbformat": 4,
|
1117 |
+
"nbformat_minor": 0
|
1118 |
+
}
|
dataset/data_augmentation_KU-HAR.txt
ADDED
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Stand Talk-stand
|
2 |
+
Stand Pick
|
3 |
+
Stand Jump
|
4 |
+
Stand Walk
|
5 |
+
Stand Walk-backward
|
6 |
+
Stand Walk-circle
|
7 |
+
Stand Run
|
8 |
+
Stand Stair-up
|
9 |
+
Stand Stair-down
|
10 |
+
Stand Table-tennis
|
11 |
+
Sit Talk-sit
|
12 |
+
Talk-sit Sit
|
13 |
+
Talk-stand Stand
|
14 |
+
Talk-stand Pick
|
15 |
+
Talk-stand Jump
|
16 |
+
Talk-stand Walk
|
17 |
+
Talk-stand Walk-backward
|
18 |
+
Talk-stand Walk-circle
|
19 |
+
Talk-stand Run
|
20 |
+
Talk-stand Stair-up
|
21 |
+
Talk-stand Stair-down
|
22 |
+
Talk-stand Table-tennis
|
23 |
+
Lay Sit-up
|
24 |
+
Pick Stand
|
25 |
+
Pick Talk-stand
|
26 |
+
Pick Jump
|
27 |
+
Pick Walk
|
28 |
+
Pick Walk-backward
|
29 |
+
Pick Walk-circle
|
30 |
+
Pick Run
|
31 |
+
Pick Stair-up
|
32 |
+
Pick Stair-down
|
33 |
+
Pick Table-tennis
|
34 |
+
Jump Stand
|
35 |
+
Jump Talk-stand
|
36 |
+
Jump Pick
|
37 |
+
Jump Walk
|
38 |
+
Jump Walk-backward
|
39 |
+
Jump Walk-circle
|
40 |
+
Jump Run
|
41 |
+
Jump Stair-up
|
42 |
+
Jump Stair-down
|
43 |
+
Jump Table-tennis
|
44 |
+
Sit-up Lay
|
45 |
+
Walk Stand
|
46 |
+
Walk Talk-stand
|
47 |
+
Walk Pick
|
48 |
+
Walk Jump
|
49 |
+
Walk Walk-circle
|
50 |
+
Walk Run
|
51 |
+
Walk Stair-up
|
52 |
+
Walk Stair-down
|
53 |
+
Walk Table-tennis
|
54 |
+
Walk-backward Stand
|
55 |
+
Walk-backward Talk-stand
|
56 |
+
Walk-backward Pick
|
57 |
+
Walk-backward Jump
|
58 |
+
Walk-backward Table-tennis
|
59 |
+
Walk-circle Stand
|
60 |
+
Walk-circle Talk-stand
|
61 |
+
Walk-circle Pick
|
62 |
+
Walk-circle Jump
|
63 |
+
Walk-circle Walk
|
64 |
+
Walk-circle Run
|
65 |
+
Walk-circle Stair-up
|
66 |
+
Walk-circle Stair-down
|
67 |
+
Walk-circle Table-tennis
|
68 |
+
Run Stand
|
69 |
+
Run Talk-stand
|
70 |
+
Run Pick
|
71 |
+
Run Jump
|
72 |
+
Run Walk
|
73 |
+
Run Walk-circle
|
74 |
+
Run Stair-up
|
75 |
+
Run Stair-down
|
76 |
+
Run Table-tennis
|
77 |
+
Stair-up Stand
|
78 |
+
Stair-up Talk-stand
|
79 |
+
Stair-up Pick
|
80 |
+
Stair-up Jump
|
81 |
+
Stair-up Walk
|
82 |
+
Stair-up Walk-circle
|
83 |
+
Stair-up Run
|
84 |
+
Stair-up Stair-down
|
85 |
+
Stair-down Stand
|
86 |
+
Stair-down Talk-stand
|
87 |
+
Stair-down Pick
|
88 |
+
Stair-down Jump
|
89 |
+
Stair-down Walk
|
90 |
+
Stair-down Walk-circle
|
91 |
+
Stair-down Run
|
92 |
+
Stair-down Stair-up
|
93 |
+
Table-tennis Stand
|
94 |
+
Table-tennis Talk-stand
|
95 |
+
Table-tennis Pick
|
96 |
+
Table-tennis Jump
|
97 |
+
Table-tennis Walk
|
98 |
+
Table-tennis Walk-backward
|
99 |
+
Table-tennis Walk-circle
|
100 |
+
Table-tennis Run
|
img/hyperparams.png
ADDED
img/model.png
ADDED
img/result.png
ADDED
save/model-best.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:2e6ccb7b073a0fbebb411c5c055a4b4edf3fa8bfa1b996aa435c2db0f82d49c7
|
3 |
+
size 5790288
|
save/model-best/keras_metadata.pb
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:80364f440b93b0aec8ecff351ef7655e6c1d7bd4aa52fb7e308a3f0c608cf44b
|
3 |
+
size 38612
|
save/model-best/saved_model.pb
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:20cf326cd90331097d2dacc98c0967c4d35b807c8b4ac05ac4eb9144c56b7660
|
3 |
+
size 855165
|
save/model-best/variables/variables.data-00000-of-00001
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:a615afb81806229cb65eb64b83d3baf7e75fa2ba1b6b5e4b7005bc6fbf740dd8
|
3 |
+
size 5740219
|
save/model-best/variables/variables.index
ADDED
Binary file (3.52 kB). View file
|
|