diff --git a/LICENSE b/LICENSE deleted file mode 100644 index e04b480..0000000 --- a/LICENSE +++ /dev/null @@ -1,427 +0,0 @@ -Attribution-ShareAlike 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution-ShareAlike 4.0 International Public -License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution-ShareAlike 4.0 International Public License ("Public -License"). To the extent this Public License may be interpreted as a -contract, You are granted the Licensed Rights in consideration of Your -acceptance of these terms and conditions, and the Licensor grants You -such rights in consideration of benefits the Licensor receives from -making the Licensed Material available under these terms and -conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. BY-SA Compatible License means a license listed at - creativecommons.org/compatiblelicenses, approved by Creative - Commons as essentially the equivalent of this Public License. - - d. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - e. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - f. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - g. License Elements means the license attributes listed in the name - of a Creative Commons Public License. The License Elements of this - Public License are Attribution and ShareAlike. - - h. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - i. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - j. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - k. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - l. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - m. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce, reproduce, and Share Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. Additional offer from the Licensor -- Adapted Material. - Every recipient of Adapted Material from You - automatically receives an offer from the Licensor to - exercise the Licensed Rights in the Adapted Material - under the conditions of the Adapter's License You apply. - - c. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - b. ShareAlike. - - In addition to the conditions in Section 3(a), if You Share - Adapted Material You produce, the following conditions also apply. - - 1. The Adapter's License You apply must be a Creative Commons - license with the same License Elements, this version or - later, or a BY-SA Compatible License. - - 2. You must include the text of, or the URI or hyperlink to, the - Adapter's License You apply. You may satisfy this condition - in any reasonable manner based on the medium, means, and - context in which You Share Adapted Material. - - 3. You may not offer or impose any additional or different terms - or conditions on, or apply any Effective Technological - Measures to, Adapted Material that restrict exercise of the - rights granted under the Adapter's License You apply. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material, - - including for purposes of Section 3(b); and - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - - -======================================================================= - -Creative Commons is not a party to its public -licenses. Notwithstanding, Creative Commons may elect to apply one of -its public licenses to material it publishes and in those instances -will be considered the β€œLicensor.” The text of the Creative Commons -public licenses is dedicated to the public domain under the CC0 Public -Domain Dedication. Except for the limited purpose of indicating that -material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the -public licenses. - -Creative Commons may be contacted at creativecommons.org. diff --git a/README.md b/README.md index f000432..8c16f70 100644 --- a/README.md +++ b/README.md @@ -1,133 +1,98 @@ -# Kuzushiji-MNIST +# Kuzushiji-MNIST Classification -[![License: CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-blue.svg)](https://creativecommons.org/licenses/by-sa/4.0/) -πŸ“š [Read the paper](https://arxiv.org/abs/1812.01718) to learn more about Kuzushiji, the datasets and our motivations for making them! +This repository impletments the classification for [Kuzushiji-MNIST](https://github.com/rois-codh/kmnist) in Pytorch with model ResNet & ResMLP. -## News and Updates -**IMPORTANT:** If you downloaded the KMNIST or K49 dataset before **5 February 2019**, please re-download the dataset and run your code again. We fixed minor image processing bugs and released an updated version, we find that the updated version gives slightly better performance. Thanks to [#1](https://github.com/rois-codh/kmnist/issues/1) and [#5](https://github.com/rois-codh/kmnist/issues/5) for bringing this to our attention. -## The Dataset -**Kuzushiji-MNIST** is a drop-in replacement for the MNIST dataset (28x28 grayscale, 70,000 images), provided in the original MNIST format as well as a NumPy format. Since MNIST restricts us to 10 classes, we chose one character to represent each of the 10 rows of Hiragana when creating Kuzushiji-MNIST. +## Download the dataset -**Kuzushiji-49**, as the name suggests, has 49 classes (28x28 grayscale, 270,912 images), is a much larger, but imbalanced dataset containing 48 Hiragana characters and one Hiragana iteration mark. +(1) Get in the project folder in the terminal. -**Kuzushiji-Kanji** is an imbalanced dataset of total 3832 Kanji characters (64x64 grayscale, 140,426 images), ranging from 1,766 examples to only a single example per class. +(2) Run -

- - The 10 classes of Kuzushiji-MNIST, with the first column showing each character's modern hiragana counterpart. -

+```shell +wget http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-train-imgs.npz +wget http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-train-labels.npz +wget http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-test-imgs.npz +wget http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-test-labels.npz +``` -## Get the data πŸ’Ύ -🌟 You can run [`python download_data.py`](download_data.py) to interactively select and download any of these datasets! -### Kuzushiji-MNIST +## Visualization and Unsupervised Models -Kuzushiji-MNIST contains 70,000 28x28 grayscale images spanning 10 classes (one from each column of [hiragana](https://upload.wikimedia.org/wikipedia/commons/thumb/2/28/Table_hiragana.svg/768px-Table_hiragana.svg.png)), and is perfectly balanced like the original MNIST dataset (6k/1k train/test for each class). -| File | Examples | Download (MNIST format) | Download (NumPy format) | -|-----------------|--------------------|----------------------------|------------------------------| -| Training images | 60,000 | [train-images-idx3-ubyte.gz](http://codh.rois.ac.jp/kmnist/dataset/kmnist/train-images-idx3-ubyte.gz) (18MB) | [kmnist-train-imgs.npz](http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-train-imgs.npz) (18MB) | -| Training labels | 60,000 | [train-labels-idx1-ubyte.gz](http://codh.rois.ac.jp/kmnist/dataset/kmnist/train-labels-idx1-ubyte.gz) (30KB) | [kmnist-train-labels.npz](http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-train-labels.npz) (30KB) | -| Testing images | 10,000 | [t10k-images-idx3-ubyte.gz](http://codh.rois.ac.jp/kmnist/dataset/kmnist/t10k-images-idx3-ubyte.gz) (3MB) | [kmnist-test-imgs.npz](http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-test-imgs.npz) (3MB) | -| Testing labels | 10,000 | [t10k-labels-idx1-ubyte.gz](http://codh.rois.ac.jp/kmnist/dataset/kmnist/t10k-labels-idx1-ubyte.gz) (5KB) | [kmnist-test-labels.npz](http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-test-labels.npz) (5KB) | +**You will need install these packages to run the specific functions.** -Mapping from class indices to characters: [kmnist_classmap.csv](http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist_classmap.csv) (1KB) +For basic functions, such as loading data and displaying images: -We recommend using standard top-1 accuracy on the test set for evaluating on Kuzushiji-MNIST. +``` +pip install numpy +pip install matplotlib +pip install seaborn +pip install pandas +``` -##### Which format do I download? -If you're looking for a drop-in replacement for the MNIST or Fashion-MNIST dataset (for tools that currently work with these datasets), download the data in MNIST format. +For Unsupervised Model, PCA and Evaluation: -Otherwise, it's recommended to download in NumPy format, which can be loaded into an array as easy as: -`arr = np.load(filename)['arr_0']`. +``` +pip install -U scikit-learn +``` -### Kuzushiji-49 +**Run ./unsupervised.ipynb** -Kuzushiji-49 contains 270,912 images spanning 49 classes, and is an extension of the Kuzushiji-MNIST dataset. -| File | Examples | Download (NumPy format) | -|-----------------|--------------------|----------------------------| -| Training images | 232,365 | [k49-train-imgs.npz](http://codh.rois.ac.jp/kmnist/dataset/k49/k49-train-imgs.npz) (63MB) | -| Training labels | 232,365 | [k49-train-labels.npz](http://codh.rois.ac.jp/kmnist/dataset/k49/k49-train-labels.npz) (200KB) | -| Testing images | 38,547 | [k49-test-imgs.npz](http://codh.rois.ac.jp/kmnist/dataset/k49/k49-test-imgs.npz) (11MB) | -| Testing labels | 38,547 | [k49-test-labels.npz](http://codh.rois.ac.jp/kmnist/dataset/k49/k49-test-labels.npz) (50KB) | +## MLP/CNN Model -Mapping from class indices to characters: [k49_classmap.csv](http://codh.rois.ac.jp/kmnist/dataset/k49/k49_classmap.csv) (1KB) +**You will need GPU and PyTorch packages to run the following code.** -We recommend using **balanced accuracy** on the test set for evaluating on Kuzushiji-49. -We use the following implementation of balanced accuracy: -```python -p_test = # Model predictions of class index -y_test = # Ground truth class indices +**Results will be stored in `./log`** + +**Model parameters will be stored in `./models`** -accs = [] -for cls in range(49): - mask = (y_test == cls) - cls_acc = (p_test == cls)[mask].mean() # Accuracy for rows of class cls - accs.append(cls_acc) - -accs = np.mean(accs) # Final balanced accuracy -``` -### Kuzushiji-Kanji -Kuzushiji-Kanji is a large and highly imbalanced 64x64 dataset of 3832 Kanji characters, containing 140,426 images of both common and rare characters. +Available model names: -The full dataset is available for download [here](http://codh.rois.ac.jp/kmnist/dataset/kkanji/kkanji.tar) (310MB). -We plan to release a train/test split version as a low-shot learning dataset very soon. +``` +ResMLP-12, ResMLP-24, ResNet-18, ResNet-34 +``` -![Examples of Kuzushiji-Kanji classes](images/kkanji_examples.png) +To train and test the model: -## Benchmarks & Results πŸ“ˆ +```shell +python classification.py --model [model name] --gpu [GPU No.] --train 1 --test 1 --train_batch [train batch size] --test_batch [test batch size] --epoch [number of train epoch] +``` -Have more results to add to the table? Feel free to submit an [issue](https://github.com/rois-codh/kmnist/issues/new) or [pull request](https://github.com/rois-codh/kmnist/compare)! +Only to test the model -|Model | MNIST | Kuzushiji-MNIST | Kuzushiji-49 | Credit -|---------------------------------|-------|--------|-----|---| -|[4-Nearest Neighbour Baseline](benchmarks/kuzushiji_mnist_knn.py) |97.14% | 92.10% | 83.65% | -|[PCA + 4-kNN](https://github.com/rois-codh/kmnist/issues/10) | 97.76% | 93.98% | 86.80% | [dzisandy](https://github.com/dzisandy) -|[Tuned SVM (RBF kernel)](https://github.com/rois-codh/kmnist/issues/3) | 98.57% | 92.82%\* | 85.61%\* | [TomZephire](https://github.com/TomZephire) -|[Keras Simple CNN Benchmark](benchmarks/kuzushiji_mnist_cnn.py) |99.06% | 94.63% | 89.36% | -|PreActResNet-18 |99.56% | 97.82%\* |96.64%\*| -|PreActResNet-18 + Input Mixup |99.54% | 98.41%\* |97.04%\*| -|PreActResNet-18 + Manifold Mixup |99.54% | 98.83%\* | 97.33%\* | -|[ResNet18 + VGG Ensemble](https://github.com/ranihorev/Kuzushiji_MNIST) | 99.60% | 98.90%\* | | [Rani Horev](https://twitter.com/HorevRani) -|[DenseNet-100 (k=12)](https://github.com/kurapan/pytorch_image_classification) | | | 97.32% | [Jan Zdenek](https://github.com/kurapan) -|[Shake-Shake-26 2x96d (cutout 14)](https://github.com/kurapan/pytorch_image_classification) | | | **98.29%** | [Jan Zdenek](https://github.com/kurapan) -|[shake-shake-26 2x96d (S-S-I), Cutout 14](https://github.com/hysts/pytorch_image_classification#results-on-kuzushiji-mnist) | **99.76%** | **99.34%\*** | | [hysts](https://github.com/hysts) +```shell +python classification.py --model [model name] --gpu [GPU No.] --test_batch [test batch size] +``` -_\* These results were obtained using an old version of the dataset, which gave slightly lower performance numbers_ -For MNIST and Kuzushiji-MNIST we use a standard accuracy metric, while Kuzushiji-49 is evaluated using balanced accuracy (so that all classes have equal weight). -## Citing Kuzushiji-MNIST +For ResMLP-12 -If you use any of the Kuzushiji datasets in your work, we would appreciate a reference to our paper: +```shell +python classification.py --model ResMLP-12 --gpu 0 --train 1 --test 1 --train_batch 64 --test_batch 500 --epoch 30 +``` -**Deep Learning for Classical Japanese Literature. Tarin Clanuwat et al. [arXiv:1812.01718](https://arxiv.org/abs/1812.01718)** +For ResMLP-24 -```latex -@online{clanuwat2018deep, - author = {Tarin Clanuwat and Mikel Bober-Irizar and Asanobu Kitamoto and Alex Lamb and Kazuaki Yamamoto and David Ha}, - title = {Deep Learning for Classical Japanese Literature}, - date = {2018-12-03}, - year = {2018}, - eprintclass = {cs.CV}, - eprinttype = {arXiv}, - eprint = {cs.CV/1812.01718}, -} +```shell +python classification.py --model ResMLP-24 --gpu 0 --train 1 --test 1 --train_batch 64 --test_batch 500 --epoch 30 ``` -## License +For ResNet-18 -Both the dataset itself and the contents of this repo are licensed under a permissive [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) license, except where specified within some benchmark scripts. CC BY-SA 4.0 license requires attribution, and we would suggest to use the following attribution to the KMNIST dataset. +```shell +python classification.py --model ResNet-18 --gpu 0 --train 1 --test 1 --train_batch 64 --test_batch 500 --epoch 30 +``` -"KMNIST Dataset" (created by CODH), adapted from "Kuzushiji Dataset" -(created by NIJL and others), doi:10.20676/00000341 +For ResNet-34 -## Related datasets +```shell +python classification.py --model ResNet-34 --gpu 0 --train 1 --test 1 --train_batch 64 --test_batch 500 --epoch 30 +``` -Kuzushiji Dataset http://codh.rois.ac.jp/char-shape/ offers 4,328 character types and 1,086,326 character images (November 2019) with CSV files containing the bounding box of characters on the original page images. At this moment, the description of the dataset is available only in Japanese, but the English version will be available soon. diff --git a/benchmarks/kuzushiji_mnist_cnn.py b/benchmarks/kuzushiji_mnist_cnn.py deleted file mode 100644 index 485d8bb..0000000 --- a/benchmarks/kuzushiji_mnist_cnn.py +++ /dev/null @@ -1,73 +0,0 @@ -# Based on MNIST CNN from Keras' examples: https://github.com/keras-team/keras/blob/master/examples/mnist_cnn.py (MIT License) - -from __future__ import print_function -import keras -from keras.models import Sequential -from keras.layers import Dense, Dropout, Flatten -from keras.layers import Conv2D, MaxPooling2D -from keras import backend as K -import numpy as np - -batch_size = 128 -num_classes = 10 -epochs = 12 - -# input image dimensions -img_rows, img_cols = 28, 28 - -def load(f): - return np.load(f)['arr_0'] - -# Load the data -x_train = load('kmnist-train-imgs.npz') -x_test = load('kmnist-test-imgs.npz') -y_train = load('kmnist-train-labels.npz') -y_test = load('kmnist-test-labels.npz') - -if K.image_data_format() == 'channels_first': - x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols) - x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols) - input_shape = (1, img_rows, img_cols) -else: - x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1) - x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1) - input_shape = (img_rows, img_cols, 1) - -x_train = x_train.astype('float32') -x_test = x_test.astype('float32') -x_train /= 255 -x_test /= 255 -print('{} train samples, {} test samples'.format(len(x_train), len(x_test))) - -# Convert class vectors to binary class matrices -y_train = keras.utils.to_categorical(y_train, num_classes) -y_test = keras.utils.to_categorical(y_test, num_classes) - -model = Sequential() -model.add(Conv2D(32, kernel_size=(3, 3), - activation='relu', - input_shape=input_shape)) -model.add(Conv2D(64, (3, 3), activation='relu')) -model.add(MaxPooling2D(pool_size=(2, 2))) -model.add(Dropout(0.25)) -model.add(Flatten()) -model.add(Dense(128, activation='relu')) -model.add(Dropout(0.5)) -model.add(Dense(num_classes, activation='softmax')) - -model.compile(loss=keras.losses.categorical_crossentropy, - optimizer=keras.optimizers.Adadelta(), - metrics=['accuracy']) - -model.fit(x_train, y_train, - batch_size=batch_size, - epochs=epochs, - verbose=1, - validation_data=(x_test, y_test)) - -train_score = model.evaluate(x_train, y_train, verbose=0) -test_score = model.evaluate(x_test, y_test, verbose=0) -print('Train loss:', train_score[0]) -print('Train accuracy:', train_score[1]) -print('Test loss:', test_score[0]) -print('Test accuracy:', test_score[1]) diff --git a/benchmarks/kuzushiji_mnist_knn.py b/benchmarks/kuzushiji_mnist_knn.py deleted file mode 100644 index 2b04a58..0000000 --- a/benchmarks/kuzushiji_mnist_knn.py +++ /dev/null @@ -1,26 +0,0 @@ -# kNN with neighbors=4 benchmark for Kuzushiji-MNIST -# Acheives 92.10% test accuracy - -from sklearn.neighbors import KNeighborsClassifier -import numpy as np - -def load(f): - return np.load(f)['arr_0'] - -# Load the data -x_train = load('kmnist-train-imgs.npz') -x_test = load('kmnist-test-imgs.npz') -y_train = load('kmnist-train-labels.npz') -y_test = load('kmnist-test-labels.npz') - -# Flatten images -x_train = x_train.reshape(-1, 784) -x_test = x_test.reshape(-1, 784) - -clf = KNeighborsClassifier(n_neighbors=4, weights='distance', n_jobs=-1) -print('Fitting', clf) -clf.fit(x_train, y_train) -print('Evaluating', clf) - -test_score = clf.score(x_test, y_test) -print('Test accuracy:', test_score) diff --git a/classification.py b/classification.py new file mode 100644 index 0000000..f7740f1 --- /dev/null +++ b/classification.py @@ -0,0 +1,198 @@ +# encoding: utf-8 +import argparse +import numpy as np +import torch +import torch.nn as nn +from torch.optim import lr_scheduler +import torch.optim as optim +import torch.backends.cudnn as cudnn +from dataset.KMNIST import get_train_dataloader, get_validation_dataloader, get_test_dataloader +import os +# self-defined +from utils.init import * +from utils.logger import get_logger +from utils.evaluation import avg_accuracy, class_metric, visualize_val_accuracy, visualize_train_loss, \ + visualize_confusion_matrix +from config import * + + +class Classification: + def __init__(self, model='ResNet-18', train_batch=64, test_batch=1000, epoch=30, ckpt_path='./models/', + class_num=10, log_img_path=''): + # get dataloader + self.dataloader_train = get_train_dataloader(batch_size=train_batch, shuffle=True, num_workers=4) + self.dataloader_val = get_validation_dataloader(batch_size=train_batch, shuffle=False, num_workers=4) + self.dataloader_test = get_test_dataloader(batch_size=test_batch, shuffle=False, num_workers=4) + self.model = nn.DataParallel(get_model(model)).cuda() + torch.backends.cudnn.benchmark = True + # set loss criterion + self.criterion = nn.CrossEntropyLoss().cuda() + # set optimizer + self.optimizer = optim.Adam(self.model.parameters(), lr=1e-4, betas=(0.9, 0.999), eps=1e-08, weight_decay=1e-5) + # set scheduler + self.lr_scheduler_model = lr_scheduler.StepLR(self.optimizer, step_size=10, gamma=1) + # set No. of epoch + self.max_epoch = epoch + self.loss_log = [] + self.accuracy_log = [] + # get model parameter path + self.ckpt_path = ckpt_path + model + '.pkl' + self.class_num = class_num + # get path to log result + self.log_img_path = log_img_path + + def train_epoch(self): + # set model to training mode + self.model.train() + train_loss = [] + with torch.autograd.enable_grad(): + for batch_idx, (img, lbl) in enumerate(self.dataloader_train): + # put them to gpu + image = torch.autograd.Variable(img).cuda() + label = torch.autograd.Variable(lbl).cuda() + # set gradient to 0 + self.optimizer.zero_grad() + # get prediction + output = self.model(image) + if type(output) is tuple: + output = output[0] + # compute loss + loss_tensor = self.criterion.forward(output, label) + # backward + loss_tensor.backward() + # update parameters + self.optimizer.step() + train_loss.append(loss_tensor.item()) + + return train_loss + + def test_epoch(self, dataloader=None): + # set model to evaluation mode + self.model.eval() + # set dataloader + if dataloader is None: + dataloader = self.dataloader_test + # initialize + gt = torch.FloatTensor().cuda() + pred = torch.FloatTensor().cuda() + loss_test = [] + + with torch.autograd.no_grad(): + for batch_idx, (img, lbl) in enumerate(dataloader): + # put them to gpu + image = torch.autograd.Variable(img).cuda() + label = torch.autograd.Variable(lbl).cuda() + # get prediction + output = self.model(image) + if type(output) is tuple: + output = output[0] + # compute loss + loss_tensor = self.criterion.forward(output, label) + loss_test.append(loss_tensor.item()) + _, pred_label = torch.max(output.data, 1) + + gt = torch.cat((gt, label.data), 0) + pred = torch.cat((pred, pred_label.data), 0) + + return np.mean(loss_test), gt.cpu().numpy(), pred.cpu().numpy() + + def val_epoch(self): + loss, gt, pred = self.test_epoch(self.dataloader_val) + acc = avg_accuracy(gt, pred) + return loss, acc + + def train_model(self): + logger.info('********************begin training!********************') + accuracy_max = 0.0 + for epoch in range(self.max_epoch): + # train + # get train loss for one epoch + train_loss = self.train_epoch() + train_loss = np.mean(train_loss) + self.loss_log.append(train_loss) + + # log train loss + logger.info("Eopch: %5d train loss = %.6f" % (epoch + 1, train_loss)) + self.lr_scheduler_model.step() + + # validation + # get validation loss and accuracy + val_loss, val_accuracy = self.val_epoch() + + # log validation loss and accuracy + logger.info("Eopch: %5d valuation loss = %.6f, ACC = %.6f" % (epoch + 1, val_loss, val_accuracy)) + self.accuracy_log.append(val_accuracy) + + # save best checkpoint + if accuracy_max < val_accuracy: + accuracy_max = val_accuracy + torch.save(self.model.state_dict(), self.ckpt_path) # Saving torch.nn.DataParallel Models + logger.info(' Epoch: {} model has been already save!'.format(epoch + 1)) + + logger.info( + 'Training epoch: {} completed.'.format(epoch + 1)) + + # visualize train loss and validation accuracy + visualize_train_loss(self.loss_log, logger, self.log_img_path) + visualize_val_accuracy(self.accuracy_log, logger, self.log_img_path) + logger.info('Train Loss:') + logger.info(','.join([str(x) for x in self.loss_log])) + logger.info('Validation Accuracy:') + logger.info(','.join([str(x) for x in self.accuracy_log])) + + def test_model(self): + # test + # load model parameters + if os.path.isfile(self.ckpt_path): + checkpoint = torch.load(self.ckpt_path) + self.model.load_state_dict(checkpoint) + logger.info("=> loaded model checkpoint: " + self.ckpt_path) + + logger.info('******* begin testing!*********') + + # get test loss, groud truth, prediction + loss, gt, pred = self.test_epoch() + # log test loss + logger.info("Test Averaged Loss = %.6f" % (loss)) + # compute average accuracy + test_acc = avg_accuracy(gt, pred) + # log test accuracy + logger.info("Test Averaged Accuracy = %.6f" % (test_acc)) + # plot confusion matrix + cm = visualize_confusion_matrix(gt, pred, logger, self.log_img_path) + + # compute accuracy, precision, recall, f1 score for each class + for i in range(self.class_num): + acc, precision, recall, f_score = class_metric(cm, i) + logger.info("Class: %5d Accuracy = %.6f Precision = %.6f Recall = %.6f f-score = %.6f" % ( + i, acc, precision, recall, f_score)) + + +if __name__ == '__main__': + # command parameters + parser = argparse.ArgumentParser() + parser.add_argument('--model', type=str, default='ResMLP-12') + parser.add_argument('--gpu', type=str, default=config['CUDA_VISIBLE_DEVICES']) + parser.add_argument('--train_batch', type=int, default=64) + parser.add_argument('--test_batch', type=int, default=500) + parser.add_argument('--epoch', type=int, default=50) + parser.add_argument('--train', type=int, default=0) + parser.add_argument('--test', type=int, default=1) + parser.add_argument('--class_num', type=int, default=None) + parser.add_argument('--ckpt_path', type=str, default='./models/') + args = parser.parse_args() + # set log + logger = get_logger(config['LOG_PATH'] + args.model) + os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu + + if args.class_num is None: + class_num = config['N_CLASSES'] + else: + class_num = args.class_num + classification = Classification(model=args.model, train_batch=args.train_batch, test_batch=args.test_batch, + epoch=args.epoch, ckpt_path=args.ckpt_path, class_num=class_num, + log_img_path=config['LOG_PATH'] + args.model + '/') + if args.train == 1: + classification.train_model() + if args.test == 1: + classification.test_model() diff --git a/config.py b/config.py new file mode 100644 index 0000000..83cd86b --- /dev/null +++ b/config.py @@ -0,0 +1,15 @@ +PROJECT_PATH = './' + +config = { + 'LOG_PATH': PROJECT_PATH + 'log/', + 'TRAIN_FILE': PROJECT_PATH + 'kmnist-train-imgs.npz', + 'TEST_FILE': PROJECT_PATH + 'kmnist-test-imgs.npz', + 'TRAIN_LABEL': PROJECT_PATH + 'kmnist-train-labels.npz', + 'TEST_LABEL': PROJECT_PATH + 'kmnist-test-labels.npz', + 'TRAIN_NUM': 54000, + 'CUDA_VISIBLE_DEVICES': "0", + 'TRAN_SIZE': 224, + 'TRAN_CROP': 224, + 'N_CLASSES': 10, + 'MODEL': 'ResMLP-12' +} diff --git a/dataset/KMNIST.py b/dataset/KMNIST.py new file mode 100644 index 0000000..058cc0b --- /dev/null +++ b/dataset/KMNIST.py @@ -0,0 +1,71 @@ +import torch +from torch.utils.data import Dataset +from torch.utils.data import DataLoader +import torchvision.transforms as transforms +import numpy as np + +from config import * + +# set dataset path +PATH_TO_TRAIN_FILE = config['TRAIN_FILE'] +PATH_TO_TEST_FILE = config['TEST_FILE'] +PATH_TO_TRAIN_LABEL_FILE = config['TRAIN_LABEL'] +PATH_TO_TEST_LABEL_FILE = config['TEST_LABEL'] +TRAIN_IMAGE_NUM = config['TRAIN_NUM'] + + +# load data +class MyDataset(Dataset): + def __init__(self, data, target, transform=None): + self.data = torch.from_numpy(data).float() + self.data = self.data.unsqueeze(1) + self.data = torch.cat((self.data, self.data, self.data), 1) + self.target = torch.from_numpy(target).long() + self.transform = transform + + def __getitem__(self, index): + x = self.data[index] + y = self.target[index] + + if self.transform: + x = self.transform(x) + + return x, y + + def __len__(self): + return len(self.data) + + +# preprocess images +transform = transforms.Compose([transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), + transforms.Resize((config['TRAN_SIZE'], config['TRAN_SIZE']))]) + + +# configure dataloader for train data +def get_train_dataloader(batch_size, shuffle, num_workers): + train_images = np.load(PATH_TO_TRAIN_FILE)['arr_0'][:TRAIN_IMAGE_NUM] + train_labels = np.load(PATH_TO_TRAIN_LABEL_FILE)['arr_0'][:TRAIN_IMAGE_NUM] + train_dataset = MyDataset(train_images, train_labels, transform) + train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=shuffle, num_workers=num_workers) + + return train_loader + + +# configure dataloader for validation data +def get_validation_dataloader(batch_size, shuffle, num_workers): + val_images = np.load(PATH_TO_TRAIN_FILE)['arr_0'][TRAIN_IMAGE_NUM:] + val_labels = np.load(PATH_TO_TRAIN_LABEL_FILE)['arr_0'][TRAIN_IMAGE_NUM:] + val_dataset = MyDataset(val_images, val_labels, transform) + val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=shuffle, num_workers=num_workers) + + return val_loader + + +# configure dataloader for test data +def get_test_dataloader(batch_size, shuffle, num_workers): + test_images = np.load(PATH_TO_TEST_FILE)['arr_0'] + test_labels = np.load(PATH_TO_TEST_LABEL_FILE)['arr_0'] + test_dataset = MyDataset(test_images, test_labels, transform) + test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=shuffle, num_workers=num_workers) + + return test_loader diff --git a/dataset/__pycache__/KMNIST.cpython-38.pyc b/dataset/__pycache__/KMNIST.cpython-38.pyc new file mode 100644 index 0000000..6647318 Binary files /dev/null and b/dataset/__pycache__/KMNIST.cpython-38.pyc differ diff --git a/download_data.py b/download_data.py deleted file mode 100644 index 1b831de..0000000 --- a/download_data.py +++ /dev/null @@ -1,80 +0,0 @@ -import requests - -try: - from tqdm import tqdm -except ImportError: - tqdm = lambda x, total, unit: x # If tqdm doesn't exist, replace it with a function that does nothing - print('**** Could not import tqdm. Please install tqdm for download progressbars! (pip install tqdm) ****') - -# Python2 compatibility -try: - input = raw_input -except NameError: - pass - -download_dict = { - '1) Kuzushiji-MNIST (10 classes, 28x28, 70k examples)': { - '1) MNIST data format (ubyte.gz)': - ['http://codh.rois.ac.jp/kmnist/dataset/kmnist/train-images-idx3-ubyte.gz', - 'http://codh.rois.ac.jp/kmnist/dataset/kmnist/train-labels-idx1-ubyte.gz', - 'http://codh.rois.ac.jp/kmnist/dataset/kmnist/t10k-images-idx3-ubyte.gz', - 'http://codh.rois.ac.jp/kmnist/dataset/kmnist/t10k-labels-idx1-ubyte.gz'], - '2) NumPy data format (.npz)': - ['http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-train-imgs.npz', - 'http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-train-labels.npz', - 'http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-test-imgs.npz', - 'http://codh.rois.ac.jp/kmnist/dataset/kmnist/kmnist-test-labels.npz'], - }, - '2) Kuzushiji-49 (49 classes, 28x28, 270k examples)': { - '1) NumPy data format (.npz)': - ['http://codh.rois.ac.jp/kmnist/dataset/k49/k49-train-imgs.npz', - 'http://codh.rois.ac.jp/kmnist/dataset/k49/k49-train-labels.npz', - 'http://codh.rois.ac.jp/kmnist/dataset/k49/k49-test-imgs.npz', - 'http://codh.rois.ac.jp/kmnist/dataset/k49/k49-test-labels.npz'], - }, - '3) Kuzushiji-Kanji (3832 classes, 64x64, 140k examples)': { - '1) Folders of images (.tar)': - ['http://codh.rois.ac.jp/kmnist/dataset/kkanji/kkanji.tar'], - } - -} - -# Download a list of files -def download_list(url_list): - for url in url_list: - path = url.split('/')[-1] - r = requests.get(url, stream=True) - with open(path, 'wb') as f: - total_length = int(r.headers.get('content-length')) - print('Downloading {} - {:.1f} MB'.format(path, (total_length / 1024000))) - - for chunk in tqdm(r.iter_content(chunk_size=1024), total=int(total_length / 1024) + 1, unit="KB"): - if chunk: - f.write(chunk) - print('All dataset files downloaded!') - -# Ask the user about which path to take down the dict -def traverse_dict(d): - print('Please select a download option:') - keys = sorted(d.keys()) # Print download options - for key in keys: - print(key) - - userinput = input('> ').strip() - - try: - selection = int(userinput) - 1 - except ValueError: - print('Your selection was not valid') - traverse_dict(d) # Try again if input was not valid - return - - selected = keys[selection] - - next_level = d[selected] - if isinstance(next_level, list): # If we've hit a list of downloads, download that list - download_list(next_level) - else: - traverse_dict(next_level) # Otherwise, repeat with the next level - -traverse_dict(download_dict) diff --git a/images/kkanji_examples.png b/images/kkanji_examples.png deleted file mode 100644 index b093571..0000000 Binary files a/images/kkanji_examples.png and /dev/null differ diff --git a/images/kmnist_examples.png b/images/kmnist_examples.png deleted file mode 100644 index 7df90cb..0000000 Binary files a/images/kmnist_examples.png and /dev/null differ diff --git a/kmnist_classmap.csv b/kmnist_classmap.csv new file mode 100644 index 0000000..ba15c5e --- /dev/null +++ b/kmnist_classmap.csv @@ -0,0 +1,11 @@ +index,codepoint,char +0,U+304A,お +1,U+304D,き +2,U+3059,す +3,U+3064,぀ +4,U+306A,γͺ +5,U+306F,は +6,U+307E,ま +7,U+3084,γ‚„ +8,U+308C,γ‚Œ +9,U+3092,γ‚’ diff --git a/log/ResMLP-12/confusion_matrix.png b/log/ResMLP-12/confusion_matrix.png new file mode 100644 index 0000000..c35cfeb Binary files /dev/null and b/log/ResMLP-12/confusion_matrix.png differ diff --git a/log/ResMLP-12/log.txt b/log/ResMLP-12/log.txt new file mode 100644 index 0000000..cc434d6 --- /dev/null +++ b/log/ResMLP-12/log.txt @@ -0,0 +1,118 @@ +********************begin training!******************** +Eopch: 1 train loss = 1.474743 +Eopch: 1 valuation loss = 0.159035, ACC = 0.950333 + Epoch: 1 model has been already save! +Training epoch: 1 completed. +Eopch: 2 train loss = 0.108675 +Eopch: 2 valuation loss = 0.088274, ACC = 0.973833 + Epoch: 2 model has been already save! +Training epoch: 2 completed. +Eopch: 3 train loss = 0.066299 +Eopch: 3 valuation loss = 0.085802, ACC = 0.978167 + Epoch: 3 model has been already save! +Training epoch: 3 completed. +Eopch: 4 train loss = 0.053803 +Eopch: 4 valuation loss = 0.069033, ACC = 0.982500 + Epoch: 4 model has been already save! +Training epoch: 4 completed. +Eopch: 5 train loss = 0.053161 +Eopch: 5 valuation loss = 0.064765, ACC = 0.983000 + Epoch: 5 model has been already save! +Training epoch: 5 completed. +Eopch: 6 train loss = 0.039282 +Eopch: 6 valuation loss = 0.076107, ACC = 0.984500 + Epoch: 6 model has been already save! +Training epoch: 6 completed. +Eopch: 7 train loss = 0.048531 +Eopch: 7 valuation loss = 0.070968, ACC = 0.980333 +Training epoch: 7 completed. +Eopch: 8 train loss = 0.046734 +Eopch: 8 valuation loss = 0.101906, ACC = 0.974667 +Training epoch: 8 completed. +Eopch: 9 train loss = 0.057909 +Eopch: 9 valuation loss = 0.091453, ACC = 0.982500 +Training epoch: 9 completed. +Eopch: 10 train loss = 0.068523 +Eopch: 10 valuation loss = 0.100253, ACC = 0.980667 +Training epoch: 10 completed. +Eopch: 11 train loss = 0.093497 +Eopch: 11 valuation loss = 0.107574, ACC = 0.977167 +Training epoch: 11 completed. +Eopch: 12 train loss = 0.044268 +Eopch: 12 valuation loss = 0.078949, ACC = 0.983667 +Training epoch: 12 completed. +Eopch: 13 train loss = 0.623085 +Eopch: 13 valuation loss = 0.157252, ACC = 0.978500 +Training epoch: 13 completed. +Eopch: 14 train loss = 0.037385 +Eopch: 14 valuation loss = 0.110624, ACC = 0.982500 +Training epoch: 14 completed. +Eopch: 15 train loss = 0.020321 +Eopch: 15 valuation loss = 0.297462, ACC = 0.973000 +Training epoch: 15 completed. +Eopch: 16 train loss = 0.052521 +Eopch: 16 valuation loss = 0.225200, ACC = 0.980667 +Training epoch: 16 completed. +Eopch: 17 train loss = 0.126149 +Eopch: 17 valuation loss = 0.223529, ACC = 0.979167 +Training epoch: 17 completed. +Eopch: 18 train loss = 0.064713 +Eopch: 18 valuation loss = 0.177399, ACC = 0.983833 +Training epoch: 18 completed. +Eopch: 19 train loss = 0.114511 +Eopch: 19 valuation loss = 0.253915, ACC = 0.980500 +Training epoch: 19 completed. +Eopch: 20 train loss = 0.074080 +Eopch: 20 valuation loss = 0.226443, ACC = 0.979333 +Training epoch: 20 completed. +Eopch: 21 train loss = 0.080519 +Eopch: 21 valuation loss = 0.377549, ACC = 0.975333 +Training epoch: 21 completed. +Eopch: 22 train loss = 0.105814 +Eopch: 22 valuation loss = 0.296062, ACC = 0.980833 +Training epoch: 22 completed. +Eopch: 23 train loss = 0.117329 +Eopch: 23 valuation loss = 0.336344, ACC = 0.980333 +Training epoch: 23 completed. +Eopch: 24 train loss = 0.048457 +Eopch: 24 valuation loss = 0.182534, ACC = 0.983333 +Training epoch: 24 completed. +Eopch: 25 train loss = 0.110891 +Eopch: 25 valuation loss = 0.194350, ACC = 0.984167 +Training epoch: 25 completed. +Eopch: 26 train loss = 0.093364 +Eopch: 26 valuation loss = 0.332007, ACC = 0.977000 +Training epoch: 26 completed. +Eopch: 27 train loss = 0.079099 +Eopch: 27 valuation loss = 0.309876, ACC = 0.980833 +Training epoch: 27 completed. +Eopch: 28 train loss = 0.097644 +Eopch: 28 valuation loss = 0.295460, ACC = 0.981500 +Training epoch: 28 completed. +Eopch: 29 train loss = 0.102000 +Eopch: 29 valuation loss = 0.293703, ACC = 0.982833 +Training epoch: 29 completed. +Eopch: 30 train loss = 0.080658 +Eopch: 30 valuation loss = 0.261712, ACC = 0.983833 +Training epoch: 30 completed. +Train Loss Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResMLP-12/train_loss.png +Validation Accuracy Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResMLP-12/val_acc.png +Train Loss: +1.474743462770171,0.1086748668005893,0.06629924054679094,0.05380273102917496,0.05316117941462244,0.0392818591715359,0.04853067634755173,0.04673448809202136,0.057909078096927434,0.06852341221147061,0.09349699254253382,0.044267768561718206,0.6230845790207216,0.03738521428460376,0.020321206379019432,0.052520529435868546,0.12614923562628944,0.0647127392301931,0.11451104171100272,0.074079771555273,0.0805192425736352,0.1058142589081407,0.11732911902895017,0.04845723011321656,0.11089138890054262,0.09336423637522687,0.0790989557700349,0.0976435722336647,0.10200038970579342,0.08065755875858951 +Validation Accuracy: +0.9503333333333334,0.9738333333333333,0.9781666666666666,0.9825,0.983,0.9845,0.9803333333333333,0.9746666666666667,0.9825,0.9806666666666667,0.9771666666666666,0.9836666666666667,0.9785,0.9825,0.973,0.9806666666666667,0.9791666666666666,0.9838333333333333,0.9805,0.9793333333333333,0.9753333333333334,0.9808333333333333,0.9803333333333333,0.9833333333333333,0.9841666666666666,0.977,0.9808333333333333,0.9815,0.9828333333333333,0.9838333333333333 +=> loaded model checkpoint: /userhome/cs2/mingzeng/codes/kmnist/models/ResMLP-12.pkl +******* begin testing!********* +Test Averaged Loss = 0.263454 +Test Averaged Accuracy = 0.948300 +Confusion Matrix Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResMLP-12/confusion_matrix.png +Class: 0 Accuracy = 0.991500 Precision = 0.951629 Recall = 0.964000 f-score = 0.957774 +Class: 1 Accuracy = 0.990000 Precision = 0.961066 Recall = 0.938000 f-score = 0.949393 +Class: 2 Accuracy = 0.978500 Precision = 0.874166 Recall = 0.917000 f-score = 0.895071 +Class: 3 Accuracy = 0.991500 Precision = 0.941176 Recall = 0.976000 f-score = 0.958272 +Class: 4 Accuracy = 0.988800 Precision = 0.957732 Recall = 0.929000 f-score = 0.943147 +Class: 5 Accuracy = 0.987100 Precision = 0.963791 Recall = 0.905000 f-score = 0.933471 +Class: 6 Accuracy = 0.989700 Precision = 0.925926 Recall = 0.975000 f-score = 0.949830 +Class: 7 Accuracy = 0.994500 Precision = 0.983623 Recall = 0.961000 f-score = 0.972180 +Class: 8 Accuracy = 0.991100 Precision = 0.945259 Recall = 0.967000 f-score = 0.956006 +Class: 9 Accuracy = 0.993900 Precision = 0.987539 Recall = 0.951000 f-score = 0.968925 \ No newline at end of file diff --git a/log/ResMLP-12/train_loss.png b/log/ResMLP-12/train_loss.png new file mode 100644 index 0000000..425945a Binary files /dev/null and b/log/ResMLP-12/train_loss.png differ diff --git a/log/ResMLP-12/val_acc.png b/log/ResMLP-12/val_acc.png new file mode 100644 index 0000000..dc48edd Binary files /dev/null and b/log/ResMLP-12/val_acc.png differ diff --git a/log/ResMLP-24/confusion_matrix.png b/log/ResMLP-24/confusion_matrix.png new file mode 100644 index 0000000..8ead357 Binary files /dev/null and b/log/ResMLP-24/confusion_matrix.png differ diff --git a/log/ResMLP-24/log.txt b/log/ResMLP-24/log.txt new file mode 100644 index 0000000..fd80bc8 --- /dev/null +++ b/log/ResMLP-24/log.txt @@ -0,0 +1,117 @@ +********************begin training!******************** +Eopch: 1 train loss = 0.258324 +Eopch: 1 valuation loss = 0.103075, ACC = 0.970500 + Epoch: 1 model has been already save! +Training epoch: 1 completed. +Eopch: 2 train loss = 0.060491 +Eopch: 2 valuation loss = 0.055647, ACC = 0.983667 + Epoch: 2 model has been already save! +Training epoch: 2 completed. +Eopch: 3 train loss = 0.039388 +Eopch: 3 valuation loss = 0.061271, ACC = 0.982000 +Training epoch: 3 completed. +Eopch: 4 train loss = 0.034410 +Eopch: 4 valuation loss = 0.066298, ACC = 0.983500 +Training epoch: 4 completed. +Eopch: 5 train loss = 0.024529 +Eopch: 5 valuation loss = 0.102639, ACC = 0.977667 +Training epoch: 5 completed. +Eopch: 6 train loss = 0.024616 +Eopch: 6 valuation loss = 0.090551, ACC = 0.980000 +Training epoch: 6 completed. +Eopch: 7 train loss = 0.063829 +Eopch: 7 valuation loss = 0.049286, ACC = 0.988833 + Epoch: 7 model has been already save! +Training epoch: 7 completed. +Eopch: 8 train loss = 0.010175 +Eopch: 8 valuation loss = 0.084901, ACC = 0.983167 +Training epoch: 8 completed. +Eopch: 9 train loss = 0.008173 +Eopch: 9 valuation loss = 0.066344, ACC = 0.988500 +Training epoch: 9 completed. +Eopch: 10 train loss = 0.010041 +Eopch: 10 valuation loss = 0.081577, ACC = 0.986000 +Training epoch: 10 completed. +Eopch: 11 train loss = 0.017877 +Eopch: 11 valuation loss = 0.096666, ACC = 0.984000 +Training epoch: 11 completed. +Eopch: 12 train loss = 0.016719 +Eopch: 12 valuation loss = 0.072074, ACC = 0.985833 +Training epoch: 12 completed. +Eopch: 13 train loss = 0.016574 +Eopch: 13 valuation loss = 0.046974, ACC = 0.988167 +Training epoch: 13 completed. +Eopch: 14 train loss = 0.012572 +Eopch: 14 valuation loss = 0.078121, ACC = 0.982167 +Training epoch: 14 completed. +Eopch: 15 train loss = 0.013178 +Eopch: 15 valuation loss = 0.101448, ACC = 0.981667 +Training epoch: 15 completed. +Eopch: 16 train loss = 0.010542 +Eopch: 16 valuation loss = 0.068331, ACC = 0.991000 + Epoch: 16 model has been already save! +Training epoch: 16 completed. +Eopch: 17 train loss = 0.008493 +Eopch: 17 valuation loss = 0.096219, ACC = 0.983833 +Training epoch: 17 completed. +Eopch: 18 train loss = 0.013357 +Eopch: 18 valuation loss = 0.061578, ACC = 0.987333 +Training epoch: 18 completed. +Eopch: 19 train loss = 0.009315 +Eopch: 19 valuation loss = 0.078054, ACC = 0.986833 +Training epoch: 19 completed. +Eopch: 20 train loss = 0.006614 +Eopch: 20 valuation loss = 0.065001, ACC = 0.989833 +Training epoch: 20 completed. +Eopch: 21 train loss = 0.009743 +Eopch: 21 valuation loss = 0.058913, ACC = 0.986833 +Training epoch: 21 completed. +Eopch: 22 train loss = 0.004101 +Eopch: 22 valuation loss = 0.071325, ACC = 0.989000 +Training epoch: 22 completed. +Eopch: 23 train loss = 0.011880 +Eopch: 23 valuation loss = 0.061699, ACC = 0.988000 +Training epoch: 23 completed. +Eopch: 24 train loss = 0.005898 +Eopch: 24 valuation loss = 0.052160, ACC = 0.989667 +Training epoch: 24 completed. +Eopch: 25 train loss = 0.007055 +Eopch: 25 valuation loss = 0.060927, ACC = 0.986500 +Training epoch: 25 completed. +Eopch: 26 train loss = 0.006872 +Eopch: 26 valuation loss = 0.047085, ACC = 0.991167 + Epoch: 26 model has been already save! +Training epoch: 26 completed. +Eopch: 27 train loss = 0.006201 +Eopch: 27 valuation loss = 0.062409, ACC = 0.989333 +Training epoch: 27 completed. +Eopch: 28 train loss = 0.004974 +Eopch: 28 valuation loss = 0.079944, ACC = 0.989667 +Training epoch: 28 completed. +Eopch: 29 train loss = 0.009411 +Eopch: 29 valuation loss = 0.058826, ACC = 0.988333 +Training epoch: 29 completed. +Eopch: 30 train loss = 0.002585 +Eopch: 30 valuation loss = 0.071575, ACC = 0.986667 +Training epoch: 30 completed. +Train Loss Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResMLP-24/train_loss.png +Validation Accuracy Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResMLP-24/val_acc.png +Train Loss: +0.25832390663422583,0.06049111991284456,0.03938772366459338,0.03440955887405244,0.0245294870920013,0.024616345635608633,0.06382881039148937,0.010174585332210257,0.00817297156926667,0.010040507038089059,0.01787675555819019,0.01671852239838346,0.016574336527537304,0.012571598617393875,0.01317848334338329,0.010541742407758438,0.008492613288001888,0.013356601136628456,0.009315182970803984,0.006614003157931455,0.009743359711699696,0.004101245476077177,0.011880251484419804,0.005898466958283593,0.007055483976123433,0.0068718988866095405,0.006201463303413665,0.004973818432163777,0.009411264056348005,0.0025846648623085136 +Validation Accuracy: +0.9705,0.9836666666666667,0.982,0.9835,0.9776666666666667,0.98,0.9888333333333333,0.9831666666666666,0.9885,0.986,0.984,0.9858333333333333,0.9881666666666666,0.9821666666666666,0.9816666666666667,0.991,0.9838333333333333,0.9873333333333333,0.9868333333333333,0.9898333333333333,0.9868333333333333,0.989,0.988,0.9896666666666667,0.9865,0.9911666666666666,0.9893333333333333,0.9896666666666667,0.9883333333333333,0.9866666666666667 +=> loaded model checkpoint: /userhome/cs2/mingzeng/codes/kmnist/models/ResMLP-24.pkl +******* begin testing!********* +Test Averaged Loss = 0.205754 +Test Averaged Accuracy = 0.971000 +Confusion Matrix Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResMLP-24/confusion_matrix.png +Class: 0 Accuracy = 0.995300 Precision = 0.965787 Recall = 0.988000 f-score = 0.976767 +Class: 1 Accuracy = 0.994200 Precision = 0.986570 Recall = 0.955000 f-score = 0.970528 +Class: 2 Accuracy = 0.991800 Precision = 0.980126 Recall = 0.937000 f-score = 0.958078 +Class: 3 Accuracy = 0.996100 Precision = 0.980020 Recall = 0.981000 f-score = 0.980510 +Class: 4 Accuracy = 0.991200 Precision = 0.957831 Recall = 0.954000 f-score = 0.955912 +Class: 5 Accuracy = 0.995000 Precision = 0.972167 Recall = 0.978000 f-score = 0.975075 +Class: 6 Accuracy = 0.989400 Precision = 0.913889 Recall = 0.987000 f-score = 0.949038 +Class: 7 Accuracy = 0.995600 Precision = 0.988753 Recall = 0.967000 f-score = 0.977755 +Class: 8 Accuracy = 0.996000 Precision = 0.983871 Recall = 0.976000 f-score = 0.979920 +Class: 9 Accuracy = 0.997400 Precision = 0.987000 Recall = 0.987000 f-score = 0.987000 \ No newline at end of file diff --git a/log/ResMLP-24/train_loss.png b/log/ResMLP-24/train_loss.png new file mode 100644 index 0000000..22f0460 Binary files /dev/null and b/log/ResMLP-24/train_loss.png differ diff --git a/log/ResMLP-24/val_acc.png b/log/ResMLP-24/val_acc.png new file mode 100644 index 0000000..478eba5 Binary files /dev/null and b/log/ResMLP-24/val_acc.png differ diff --git a/log/ResNet-18/confusion_matrix.png b/log/ResNet-18/confusion_matrix.png new file mode 100644 index 0000000..ba4e838 Binary files /dev/null and b/log/ResNet-18/confusion_matrix.png differ diff --git a/log/ResNet-18/log.txt b/log/ResNet-18/log.txt new file mode 100644 index 0000000..410c501 --- /dev/null +++ b/log/ResNet-18/log.txt @@ -0,0 +1,536 @@ +********************begin training!******************** +Eopch: 1 train loss = 0.112472 +Eopch: 1 valuation loss = 0.032543, ACC = 0.991333 + Epoch: 1 model has been already save! +Training epoch: 1 completed. +Eopch: 2 train loss = 0.016170 +Eopch: 2 valuation loss = 0.033873, ACC = 0.991000 +Training epoch: 2 completed. +Eopch: 3 train loss = 0.010401 +Eopch: 3 valuation loss = 0.033791, ACC = 0.991500 + Epoch: 3 model has been already save! +Training epoch: 3 completed. +Eopch: 4 train loss = 0.008944 +Eopch: 4 valuation loss = 0.021961, ACC = 0.994333 + Epoch: 4 model has been already save! +Training epoch: 4 completed. +Eopch: 5 train loss = 0.006552 +Eopch: 5 valuation loss = 0.020410, ACC = 0.995500 + Epoch: 5 model has been already save! +Training epoch: 5 completed. +Eopch: 6 train loss = 0.004441 +Eopch: 6 valuation loss = 0.028272, ACC = 0.992833 +Training epoch: 6 completed. +Eopch: 7 train loss = 0.007019 +Eopch: 7 valuation loss = 0.029333, ACC = 0.992500 +Training epoch: 7 completed. +Eopch: 8 train loss = 0.003278 +Eopch: 8 valuation loss = 0.021766, ACC = 0.993500 +Training epoch: 8 completed. +Eopch: 9 train loss = 0.006029 +Eopch: 9 valuation loss = 0.023517, ACC = 0.993667 +Training epoch: 9 completed. +Eopch: 10 train loss = 0.005264 +Eopch: 10 valuation loss = 0.021146, ACC = 0.993833 +Training epoch: 10 completed. +Eopch: 11 train loss = 0.002638 +Eopch: 11 valuation loss = 0.017968, ACC = 0.995500 +Training epoch: 11 completed. +Eopch: 12 train loss = 0.002231 +Eopch: 12 valuation loss = 0.028438, ACC = 0.993167 +Training epoch: 12 completed. +Eopch: 13 train loss = 0.004573 +Eopch: 13 valuation loss = 0.024170, ACC = 0.994167 +Training epoch: 13 completed. +Eopch: 14 train loss = 0.002521 +Eopch: 14 valuation loss = 0.022760, ACC = 0.995500 +Training epoch: 14 completed. +Eopch: 15 train loss = 0.001604 +Eopch: 15 valuation loss = 0.029690, ACC = 0.992000 +Training epoch: 15 completed. +Eopch: 16 train loss = 0.006733 +Eopch: 16 valuation loss = 0.024623, ACC = 0.994000 +Training epoch: 16 completed. +Eopch: 17 train loss = 0.002092 +Eopch: 17 valuation loss = 0.024397, ACC = 0.993833 +Training epoch: 17 completed. +Eopch: 18 train loss = 0.001126 +Eopch: 18 valuation loss = 0.018558, ACC = 0.994500 +Training epoch: 18 completed. +Eopch: 19 train loss = 0.003236 +Eopch: 19 valuation loss = 0.019188, ACC = 0.995333 +Training epoch: 19 completed. +Eopch: 20 train loss = 0.003076 +Eopch: 20 valuation loss = 0.021177, ACC = 0.994833 +Training epoch: 20 completed. +Eopch: 21 train loss = 0.001987 +Eopch: 21 valuation loss = 0.027134, ACC = 0.992667 +Training epoch: 21 completed. +Eopch: 22 train loss = 0.002780 +Eopch: 22 valuation loss = 0.036788, ACC = 0.992167 +Training epoch: 22 completed. +Eopch: 23 train loss = 0.002600 +Eopch: 23 valuation loss = 0.026954, ACC = 0.994000 +Training epoch: 23 completed. +Eopch: 24 train loss = 0.002509 +Eopch: 24 valuation loss = 0.024505, ACC = 0.994333 +Training epoch: 24 completed. +Eopch: 25 train loss = 0.002124 +Eopch: 25 valuation loss = 0.027661, ACC = 0.992333 +Training epoch: 25 completed. +Eopch: 26 train loss = 0.001353 +Eopch: 26 valuation loss = 0.023039, ACC = 0.994833 +Training epoch: 26 completed. +Eopch: 27 train loss = 0.001375 +Eopch: 27 valuation loss = 0.019753, ACC = 0.995667 + Epoch: 27 model has been already save! +Training epoch: 27 completed. +Eopch: 28 train loss = 0.002047 +Eopch: 28 valuation loss = 0.022252, ACC = 0.994500 +Training epoch: 28 completed. +Eopch: 29 train loss = 0.003442 +Eopch: 29 valuation loss = 0.026994, ACC = 0.993333 +Training epoch: 29 completed. +Eopch: 30 train loss = 0.000458 +Eopch: 30 valuation loss = 0.019145, ACC = 0.995167 +Training epoch: 30 completed. +Eopch: 31 train loss = 0.000170 +Eopch: 31 valuation loss = 0.019967, ACC = 0.995833 + Epoch: 31 model has been already save! +Training epoch: 31 completed. +Eopch: 32 train loss = 0.004198 +Eopch: 32 valuation loss = 0.022859, ACC = 0.994000 +Training epoch: 32 completed. +Eopch: 33 train loss = 0.001504 +Eopch: 33 valuation loss = 0.032546, ACC = 0.992500 +Training epoch: 33 completed. +Eopch: 34 train loss = 0.000715 +Eopch: 34 valuation loss = 0.021275, ACC = 0.995333 +Training epoch: 34 completed. +Eopch: 35 train loss = 0.001949 +Eopch: 35 valuation loss = 0.024419, ACC = 0.992667 +Training epoch: 35 completed. +Eopch: 36 train loss = 0.002625 +Eopch: 36 valuation loss = 0.022674, ACC = 0.993500 +Training epoch: 36 completed. +Eopch: 37 train loss = 0.001432 +Eopch: 37 valuation loss = 0.020469, ACC = 0.994500 +Training epoch: 37 completed. +Eopch: 38 train loss = 0.000919 +Eopch: 38 valuation loss = 0.019236, ACC = 0.995333 +Training epoch: 38 completed. +Eopch: 39 train loss = 0.002806 +Eopch: 39 valuation loss = 0.036104, ACC = 0.992500 +Training epoch: 39 completed. +Eopch: 40 train loss = 0.000593 +Eopch: 40 valuation loss = 0.017297, ACC = 0.996000 + Epoch: 40 model has been already save! +Training epoch: 40 completed. +Eopch: 41 train loss = 0.000074 +Eopch: 41 valuation loss = 0.018258, ACC = 0.996000 +Training epoch: 41 completed. +Eopch: 42 train loss = 0.000043 +Eopch: 42 valuation loss = 0.016699, ACC = 0.996333 + Epoch: 42 model has been already save! +Training epoch: 42 completed. +Eopch: 43 train loss = 0.004258 +Eopch: 43 valuation loss = 0.022825, ACC = 0.993833 +Training epoch: 43 completed. +Eopch: 44 train loss = 0.001685 +Eopch: 44 valuation loss = 0.019110, ACC = 0.995500 +Training epoch: 44 completed. +Eopch: 45 train loss = 0.000996 +Eopch: 45 valuation loss = 0.018361, ACC = 0.994833 +Training epoch: 45 completed. +Eopch: 46 train loss = 0.000111 +Eopch: 46 valuation loss = 0.017752, ACC = 0.996000 +Training epoch: 46 completed. +Eopch: 47 train loss = 0.002375 +Eopch: 47 valuation loss = 0.021209, ACC = 0.994667 +Training epoch: 47 completed. +Eopch: 48 train loss = 0.002433 +Eopch: 48 valuation loss = 0.022865, ACC = 0.995333 +Training epoch: 48 completed. +Eopch: 49 train loss = 0.000814 +Eopch: 49 valuation loss = 0.019654, ACC = 0.995333 +Training epoch: 49 completed. +Eopch: 50 train loss = 0.002580 +Eopch: 50 valuation loss = 0.026501, ACC = 0.993667 +Training epoch: 50 completed. +Train Loss Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResNet-18/train_loss.png +Validation Accuracy Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResNet-18/val_acc.png +Train Loss: +0.1124717586737797,0.016170259801807738,0.010400650284713205,0.008944160013339069,0.0065518872841114845,0.004440692789629065,0.007019181146336049,0.0032781219610485625,0.006029157559703597,0.0052644157093864686,0.0026384786645780125,0.002230725335097287,0.0045732613302939965,0.0025210315351931367,0.0016043741853499992,0.006733059158194363,0.002091662949198499,0.0011263878866893246,0.0032356474211569525,0.003076039213504813,0.0019870159624117358,0.0027797034472573034,0.0026003861377827384,0.0025087218852057145,0.0021240568647468206,0.0013532344944920081,0.0013749040911510686,0.0020474040254814243,0.0034417064467761865,0.0004576196333709312,0.00016953872533785995,0.0041983963904424,0.0015040430597704152,0.0007154906393583548,0.0019489095852944982,0.0026249186220027878,0.0014320352600488563,0.0009191627323662895,0.002806055992076538,0.000592689474532082,7.439634051884694e-05,4.266309739758123e-05,0.0042578651909786535,0.001685497372659699,0.0009962033815523893,0.00011079841955785807,0.0023747650443307396,0.0024328762135416336,0.0008143995424636108,0.00257967325731004 +Validation Accuracy: +0.9913333333333333,0.991,0.9915,0.9943333333333333,0.9955,0.9928333333333333,0.9925,0.9935,0.9936666666666667,0.9938333333333333,0.9955,0.9931666666666666,0.9941666666666666,0.9955,0.992,0.994,0.9938333333333333,0.9945,0.9953333333333333,0.9948333333333333,0.9926666666666667,0.9921666666666666,0.994,0.9943333333333333,0.9923333333333333,0.9948333333333333,0.9956666666666667,0.9945,0.9933333333333333,0.9951666666666666,0.9958333333333333,0.994,0.9925,0.9953333333333333,0.9926666666666667,0.9935,0.9945,0.9953333333333333,0.9925,0.996,0.996,0.9963333333333333,0.9938333333333333,0.9955,0.9948333333333333,0.996,0.9946666666666667,0.9953333333333333,0.9953333333333333,0.9936666666666667 +=> loaded model checkpoint: /userhome/cs2/mingzeng/codes/kmnist/models/ResNet-18.pkl +******* begin testing!********* +Test Averaged Loss = 0.057160 +Test Averaged Accuracy = 0.988300 +Confusion Matrix Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResNet-18/confusion_matrix.png +Class: 0 Accuracy = 0.996600 Precision = 0.977273 Recall = 0.989000 f-score = 0.983101 +Class: 1 Accuracy = 0.998100 Precision = 0.994955 Recall = 0.986000 f-score = 0.990457 +Class: 2 Accuracy = 0.996100 Precision = 0.986829 Recall = 0.974000 f-score = 0.980372 +Class: 3 Accuracy = 0.998300 Precision = 0.989055 Recall = 0.994000 f-score = 0.991521 +Class: 4 Accuracy = 0.995300 Precision = 0.983756 Recall = 0.969000 f-score = 0.976322 +Class: 5 Accuracy = 0.998000 Precision = 0.990982 Recall = 0.989000 f-score = 0.989990 +Class: 6 Accuracy = 0.997900 Precision = 0.985134 Recall = 0.994000 f-score = 0.989547 +Class: 7 Accuracy = 0.998600 Precision = 0.990060 Recall = 0.996000 f-score = 0.993021 +Class: 8 Accuracy = 0.998600 Precision = 0.989087 Recall = 0.997000 f-score = 0.993028 +Class: 9 Accuracy = 0.999100 Precision = 0.995996 Recall = 0.995000 f-score = 0.995498 +=> loaded model checkpoint: /userhome/cs2/mingzeng/codes/kmnist/models/ResNet-18.pkl +********************begin training!******************** +Eopch: 1 train loss = 0.002380 +Eopch: 1 valuation loss = 0.020418, ACC = 0.994667 + Epoch: 1 model has been already save! +Training epoch: 1 completed. +Eopch: 2 train loss = 0.001551 +Eopch: 2 valuation loss = 0.034197, ACC = 0.992000 +Training epoch: 2 completed. +Eopch: 3 train loss = 0.001335 +Eopch: 3 valuation loss = 0.028909, ACC = 0.992833 +Training epoch: 3 completed. +Eopch: 4 train loss = 0.002054 +Eopch: 4 valuation loss = 0.023759, ACC = 0.995000 + Epoch: 4 model has been already save! +Training epoch: 4 completed. +Eopch: 5 train loss = 0.001485 +Eopch: 5 valuation loss = 0.022776, ACC = 0.994500 +Training epoch: 5 completed. +Eopch: 6 train loss = 0.001384 +Eopch: 6 valuation loss = 0.024340, ACC = 0.993667 +Training epoch: 6 completed. +Eopch: 7 train loss = 0.002727 +Eopch: 7 valuation loss = 0.021776, ACC = 0.994333 +Training epoch: 7 completed. +Eopch: 8 train loss = 0.001291 +Eopch: 8 valuation loss = 0.018708, ACC = 0.996333 + Epoch: 8 model has been already save! +Training epoch: 8 completed. +Eopch: 9 train loss = 0.001168 +Eopch: 9 valuation loss = 0.041369, ACC = 0.990000 +Training epoch: 9 completed. +Eopch: 10 train loss = 0.003025 +Eopch: 10 valuation loss = 0.022515, ACC = 0.994833 +Training epoch: 10 completed. +Eopch: 11 train loss = 0.001245 +Eopch: 11 valuation loss = 0.021370, ACC = 0.995333 +Training epoch: 11 completed. +Eopch: 12 train loss = 0.000126 +Eopch: 12 valuation loss = 0.018098, ACC = 0.996167 +Training epoch: 12 completed. +Eopch: 13 train loss = 0.000051 +Eopch: 13 valuation loss = 0.017615, ACC = 0.996333 +Training epoch: 13 completed. +Eopch: 14 train loss = 0.000036 +Eopch: 14 valuation loss = 0.017552, ACC = 0.996667 + Epoch: 14 model has been already save! +Training epoch: 14 completed. +Eopch: 15 train loss = 0.004902 +Eopch: 15 valuation loss = 0.023053, ACC = 0.995333 +Training epoch: 15 completed. +Eopch: 16 train loss = 0.001666 +Eopch: 16 valuation loss = 0.016388, ACC = 0.996000 +Training epoch: 16 completed. +Eopch: 17 train loss = 0.000240 +Eopch: 17 valuation loss = 0.015207, ACC = 0.996500 +Training epoch: 17 completed. +Eopch: 18 train loss = 0.000062 +Eopch: 18 valuation loss = 0.014461, ACC = 0.996667 +Training epoch: 18 completed. +Eopch: 19 train loss = 0.000047 +Eopch: 19 valuation loss = 0.015068, ACC = 0.996333 +Training epoch: 19 completed. +Eopch: 20 train loss = 0.003623 +Eopch: 20 valuation loss = 0.032521, ACC = 0.992167 +Training epoch: 20 completed. +Eopch: 21 train loss = 0.003394 +Eopch: 21 valuation loss = 0.017815, ACC = 0.995167 +Training epoch: 21 completed. +Eopch: 22 train loss = 0.000386 +Eopch: 22 valuation loss = 0.016767, ACC = 0.995667 +Training epoch: 22 completed. +Eopch: 23 train loss = 0.002935 +Eopch: 23 valuation loss = 0.022401, ACC = 0.995000 +Training epoch: 23 completed. +Eopch: 24 train loss = 0.001660 +Eopch: 24 valuation loss = 0.023005, ACC = 0.995000 +Training epoch: 24 completed. +Eopch: 25 train loss = 0.000494 +Eopch: 25 valuation loss = 0.026597, ACC = 0.994500 +Training epoch: 25 completed. +Eopch: 26 train loss = 0.002265 +Eopch: 26 valuation loss = 0.024182, ACC = 0.994333 +Training epoch: 26 completed. +Eopch: 27 train loss = 0.000340 +Eopch: 27 valuation loss = 0.017949, ACC = 0.996167 +Training epoch: 27 completed. +Eopch: 28 train loss = 0.000819 +Eopch: 28 valuation loss = 0.027741, ACC = 0.993167 +Training epoch: 28 completed. +Eopch: 29 train loss = 0.001746 +Eopch: 29 valuation loss = 0.022587, ACC = 0.995167 +Training epoch: 29 completed. +Eopch: 30 train loss = 0.000783 +Eopch: 30 valuation loss = 0.023898, ACC = 0.995667 +Training epoch: 30 completed. +Eopch: 31 train loss = 0.001118 +Eopch: 31 valuation loss = 0.021154, ACC = 0.995167 +Training epoch: 31 completed. +Eopch: 32 train loss = 0.003023 +Eopch: 32 valuation loss = 0.026357, ACC = 0.993500 +Training epoch: 32 completed. +Eopch: 33 train loss = 0.000544 +Eopch: 33 valuation loss = 0.023024, ACC = 0.994833 +Training epoch: 33 completed. +Eopch: 34 train loss = 0.000282 +Eopch: 34 valuation loss = 0.020969, ACC = 0.996167 +Training epoch: 34 completed. +Eopch: 35 train loss = 0.001814 +Eopch: 35 valuation loss = 0.024345, ACC = 0.994667 +Training epoch: 35 completed. +Eopch: 36 train loss = 0.002169 +Eopch: 36 valuation loss = 0.026725, ACC = 0.994333 +Training epoch: 36 completed. +Eopch: 37 train loss = 0.000258 +Eopch: 37 valuation loss = 0.021777, ACC = 0.995500 +Training epoch: 37 completed. +Eopch: 38 train loss = 0.002167 +Eopch: 38 valuation loss = 0.017834, ACC = 0.995500 +Training epoch: 38 completed. +Eopch: 39 train loss = 0.000532 +Eopch: 39 valuation loss = 0.020227, ACC = 0.995500 +Training epoch: 39 completed. +Eopch: 40 train loss = 0.000691 +Eopch: 40 valuation loss = 0.017154, ACC = 0.996333 +Training epoch: 40 completed. +Eopch: 41 train loss = 0.000897 +Eopch: 41 valuation loss = 0.025298, ACC = 0.993333 +Training epoch: 41 completed. +Eopch: 42 train loss = 0.001715 +Eopch: 42 valuation loss = 0.025247, ACC = 0.994833 +Training epoch: 42 completed. +Eopch: 43 train loss = 0.000493 +Eopch: 43 valuation loss = 0.023587, ACC = 0.995667 +Training epoch: 43 completed. +Eopch: 44 train loss = 0.000088 +Eopch: 44 valuation loss = 0.020639, ACC = 0.995500 +Training epoch: 44 completed. +Eopch: 45 train loss = 0.000049 +Eopch: 45 valuation loss = 0.020038, ACC = 0.996000 +Training epoch: 45 completed. +Eopch: 46 train loss = 0.000034 +Eopch: 46 valuation loss = 0.019470, ACC = 0.995667 +Training epoch: 46 completed. +Eopch: 47 train loss = 0.002782 +Eopch: 47 valuation loss = 0.041904, ACC = 0.988167 +Training epoch: 47 completed. +Eopch: 48 train loss = 0.002982 +Eopch: 48 valuation loss = 0.020116, ACC = 0.995500 +Training epoch: 48 completed. +Eopch: 49 train loss = 0.000191 +Eopch: 49 valuation loss = 0.018578, ACC = 0.996000 +Training epoch: 49 completed. +Eopch: 50 train loss = 0.000624 +Eopch: 50 valuation loss = 0.023107, ACC = 0.994667 +Training epoch: 50 completed. +Train Loss Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResNet-18/train_loss.png +Validation Accuracy Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResNet-18/val_acc.png +Train Loss: +0.0023798978278849223,0.001551491871023827,0.0013354753494879885,0.002054083236969754,0.0014850462116790097,0.0013839491533943866,0.0027274314285686938,0.0012908909813588265,0.0011675883227027773,0.0030252575809148878,0.0012450252825608912,0.00012600182976248581,5.131643628639778e-05,3.556391739841912e-05,0.004902001174867005,0.0016656818849003822,0.0002404311794494762,6.223151201156164e-05,4.731706620064671e-05,0.00362265661686718,0.0033936699260611156,0.0003855040930247019,0.0029351176442366277,0.0016602201061659066,0.0004939092476814802,0.002265196821997021,0.00034032644487177533,0.0008193693273553988,0.0017461086846763667,0.000783329249710952,0.001117981775017776,0.0030230789899898867,0.0005442745805398923,0.000281953724842536,0.0018135306640964424,0.002168529378855163,0.00025785759732562403,0.0021670936117468833,0.0005320045849255673,0.0006905365555163453,0.0008968770830824293,0.0017150963560410139,0.0004934786079238362,8.781648941732989e-05,4.8519646186183976e-05,3.3700352101059855e-05,0.0027815273267490404,0.002981613644168263,0.0001908360637885186,0.0006241627901026818 +Validation Accuracy: +0.9946666666666667,0.992,0.9928333333333333,0.995,0.9945,0.9936666666666667,0.9943333333333333,0.9963333333333333,0.99,0.9948333333333333,0.9953333333333333,0.9961666666666666,0.9963333333333333,0.9966666666666667,0.9953333333333333,0.996,0.9965,0.9966666666666667,0.9963333333333333,0.9921666666666666,0.9951666666666666,0.9956666666666667,0.995,0.995,0.9945,0.9943333333333333,0.9961666666666666,0.9931666666666666,0.9951666666666666,0.9956666666666667,0.9951666666666666,0.9935,0.9948333333333333,0.9961666666666666,0.9946666666666667,0.9943333333333333,0.9955,0.9955,0.9955,0.9963333333333333,0.9933333333333333,0.9948333333333333,0.9956666666666667,0.9955,0.996,0.9956666666666667,0.9881666666666666,0.9955,0.996,0.9946666666666667 +=> loaded model checkpoint: /userhome/cs2/mingzeng/codes/kmnist/models/ResNet-18.pkl +******* begin testing!********* +Test Averaged Loss = 0.059358 +Test Averaged Accuracy = 0.988100 +Confusion Matrix Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResNet-18/confusion_matrix.png +Class: 0 Accuracy = 0.996300 Precision = 0.975321 Recall = 0.988000 f-score = 0.981619 +Class: 1 Accuracy = 0.998100 Precision = 0.994955 Recall = 0.986000 f-score = 0.990457 +Class: 2 Accuracy = 0.996300 Precision = 0.991828 Recall = 0.971000 f-score = 0.981304 +Class: 3 Accuracy = 0.998600 Precision = 0.991036 Recall = 0.995000 f-score = 0.993014 +Class: 4 Accuracy = 0.995300 Precision = 0.985729 Recall = 0.967000 f-score = 0.976275 +Class: 5 Accuracy = 0.997900 Precision = 0.989990 Recall = 0.989000 f-score = 0.989495 +Class: 6 Accuracy = 0.997600 Precision = 0.980315 Recall = 0.996000 f-score = 0.988095 +Class: 7 Accuracy = 0.999000 Precision = 0.993028 Recall = 0.997000 f-score = 0.995010 +Class: 8 Accuracy = 0.998200 Precision = 0.984221 Recall = 0.998000 f-score = 0.991063 +Class: 9 Accuracy = 0.998900 Precision = 0.994995 Recall = 0.994000 f-score = 0.994497 +********************begin training!******************** +Eopch: 1 train loss = 0.110339 +Eopch: 1 valuation loss = 0.030959, ACC = 0.991500 + Epoch: 1 model has been already save! +Training epoch: 1 completed. +Eopch: 2 train loss = 0.015871 +Eopch: 2 valuation loss = 0.026959, ACC = 0.992667 + Epoch: 2 model has been already save! +Training epoch: 2 completed. +Eopch: 3 train loss = 0.010047 +Eopch: 3 valuation loss = 0.030732, ACC = 0.991167 +Training epoch: 3 completed. +Eopch: 4 train loss = 0.009027 +Eopch: 4 valuation loss = 0.027057, ACC = 0.992167 +Training epoch: 4 completed. +Eopch: 5 train loss = 0.007910 +Eopch: 5 valuation loss = 0.028243, ACC = 0.992333 +Training epoch: 5 completed. +Eopch: 6 train loss = 0.007268 +Eopch: 6 valuation loss = 0.039620, ACC = 0.988167 +Training epoch: 6 completed. +Eopch: 7 train loss = 0.005927 +Eopch: 7 valuation loss = 0.027992, ACC = 0.992833 + Epoch: 7 model has been already save! +Training epoch: 7 completed. +Eopch: 8 train loss = 0.004416 +Eopch: 8 valuation loss = 0.023292, ACC = 0.994500 + Epoch: 8 model has been already save! +Training epoch: 8 completed. +Eopch: 9 train loss = 0.004000 +Eopch: 9 valuation loss = 0.031309, ACC = 0.992500 +Training epoch: 9 completed. +Eopch: 10 train loss = 0.004315 +Eopch: 10 valuation loss = 0.038368, ACC = 0.990333 +Training epoch: 10 completed. +Eopch: 11 train loss = 0.005083 +Eopch: 11 valuation loss = 0.026671, ACC = 0.992500 +Training epoch: 11 completed. +Eopch: 12 train loss = 0.001932 +Eopch: 12 valuation loss = 0.020445, ACC = 0.994833 + Epoch: 12 model has been already save! +Training epoch: 12 completed. +Eopch: 13 train loss = 0.003449 +Eopch: 13 valuation loss = 0.034891, ACC = 0.991333 +Training epoch: 13 completed. +Eopch: 14 train loss = 0.003702 +Eopch: 14 valuation loss = 0.020935, ACC = 0.994833 +Training epoch: 14 completed. +Eopch: 15 train loss = 0.001845 +Eopch: 15 valuation loss = 0.030075, ACC = 0.993833 +Training epoch: 15 completed. +Eopch: 16 train loss = 0.004842 +Eopch: 16 valuation loss = 0.025842, ACC = 0.993833 +Training epoch: 16 completed. +Eopch: 17 train loss = 0.003709 +Eopch: 17 valuation loss = 0.025759, ACC = 0.994667 +Training epoch: 17 completed. +Eopch: 18 train loss = 0.002032 +Eopch: 18 valuation loss = 0.021540, ACC = 0.994500 +Training epoch: 18 completed. +Eopch: 19 train loss = 0.002395 +Eopch: 19 valuation loss = 0.033867, ACC = 0.993500 +Training epoch: 19 completed. +Eopch: 20 train loss = 0.002707 +Eopch: 20 valuation loss = 0.019205, ACC = 0.994667 +Training epoch: 20 completed. +Eopch: 21 train loss = 0.002436 +Eopch: 21 valuation loss = 0.028644, ACC = 0.992500 +Training epoch: 21 completed. +Eopch: 22 train loss = 0.002499 +Eopch: 22 valuation loss = 0.017397, ACC = 0.996500 + Epoch: 22 model has been already save! +Training epoch: 22 completed. +Eopch: 23 train loss = 0.001254 +Eopch: 23 valuation loss = 0.030186, ACC = 0.992833 +Training epoch: 23 completed. +Eopch: 24 train loss = 0.003710 +Eopch: 24 valuation loss = 0.024254, ACC = 0.993000 +Training epoch: 24 completed. +Eopch: 25 train loss = 0.001489 +Eopch: 25 valuation loss = 0.019749, ACC = 0.994667 +Training epoch: 25 completed. +Eopch: 26 train loss = 0.004095 +Eopch: 26 valuation loss = 0.020992, ACC = 0.995167 +Training epoch: 26 completed. +Eopch: 27 train loss = 0.000797 +Eopch: 27 valuation loss = 0.016143, ACC = 0.996333 +Training epoch: 27 completed. +Eopch: 28 train loss = 0.000089 +Eopch: 28 valuation loss = 0.018128, ACC = 0.995500 +Training epoch: 28 completed. +Eopch: 29 train loss = 0.002590 +Eopch: 29 valuation loss = 0.019603, ACC = 0.995500 +Training epoch: 29 completed. +Eopch: 30 train loss = 0.003278 +Eopch: 30 valuation loss = 0.025397, ACC = 0.994667 +Training epoch: 30 completed. +Eopch: 31 train loss = 0.001702 +Eopch: 31 valuation loss = 0.018519, ACC = 0.996167 +Training epoch: 31 completed. +Eopch: 32 train loss = 0.000383 +Eopch: 32 valuation loss = 0.022197, ACC = 0.994667 +Training epoch: 32 completed. +Eopch: 33 train loss = 0.003521 +Eopch: 33 valuation loss = 0.018160, ACC = 0.995500 +Training epoch: 33 completed. +Eopch: 34 train loss = 0.000882 +Eopch: 34 valuation loss = 0.044170, ACC = 0.990333 +Training epoch: 34 completed. +Eopch: 35 train loss = 0.000976 +Eopch: 35 valuation loss = 0.017261, ACC = 0.996167 +Training epoch: 35 completed. +Eopch: 36 train loss = 0.003609 +Eopch: 36 valuation loss = 0.021408, ACC = 0.994500 +Training epoch: 36 completed. +Eopch: 37 train loss = 0.002237 +Eopch: 37 valuation loss = 0.015329, ACC = 0.996333 +Training epoch: 37 completed. +Eopch: 38 train loss = 0.000244 +Eopch: 38 valuation loss = 0.016126, ACC = 0.996833 + Epoch: 38 model has been already save! +Training epoch: 38 completed. +Eopch: 39 train loss = 0.000064 +Eopch: 39 valuation loss = 0.015117, ACC = 0.996667 +Training epoch: 39 completed. +Eopch: 40 train loss = 0.000035 +Eopch: 40 valuation loss = 0.014981, ACC = 0.996667 +Training epoch: 40 completed. +Eopch: 41 train loss = 0.000154 +Eopch: 41 valuation loss = 0.036214, ACC = 0.993000 +Training epoch: 41 completed. +Eopch: 42 train loss = 0.007359 +Eopch: 42 valuation loss = 0.025046, ACC = 0.994333 +Training epoch: 42 completed. +Eopch: 43 train loss = 0.000664 +Eopch: 43 valuation loss = 0.018365, ACC = 0.996167 +Training epoch: 43 completed. +Eopch: 44 train loss = 0.000205 +Eopch: 44 valuation loss = 0.016666, ACC = 0.996500 +Training epoch: 44 completed. +Eopch: 45 train loss = 0.002770 +Eopch: 45 valuation loss = 0.028044, ACC = 0.993333 +Training epoch: 45 completed. +Eopch: 46 train loss = 0.002998 +Eopch: 46 valuation loss = 0.024017, ACC = 0.995333 +Training epoch: 46 completed. +Eopch: 47 train loss = 0.000574 +Eopch: 47 valuation loss = 0.023372, ACC = 0.995167 +Training epoch: 47 completed. +Eopch: 48 train loss = 0.002458 +Eopch: 48 valuation loss = 0.016478, ACC = 0.996333 +Training epoch: 48 completed. +Eopch: 49 train loss = 0.002323 +Eopch: 49 valuation loss = 0.019090, ACC = 0.994500 +Training epoch: 49 completed. +Eopch: 50 train loss = 0.000743 +Eopch: 50 valuation loss = 0.017156, ACC = 0.995833 +Training epoch: 50 completed. +Train Loss Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResNet-18/train_loss.png +Validation Accuracy Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResNet-18/val_acc.png +Train Loss: +0.11033941893198337,0.01587141261952466,0.010047460450098123,0.009026822771629323,0.007909631987312126,0.007267851441115432,0.005926719363539861,0.004415530911910753,0.004000338429366786,0.004315067960562365,0.005082801300376003,0.0019316070164466302,0.003448847651242608,0.0037018515641234467,0.0018449491861234294,0.0048415431339483015,0.0037093547556111294,0.0020316048078758238,0.002395397147667406,0.0027070195585829683,0.0024358899397665702,0.0024986996267306973,0.001254476565973013,0.003710166680174427,0.0014893779088541088,0.0040947873539281315,0.0007969619218517213,8.857132731382576e-05,0.002590080609492829,0.0032777426852391178,0.001701802904918349,0.0003830976405296501,0.0035213949273196557,0.0008816417004870466,0.0009755956402146495,0.003609171024395415,0.002236520517689965,0.0002444293147632207,6.380908616249523e-05,3.4506582773181185e-05,0.000154251702148673,0.007359382428508738,0.000663765362646506,0.00020465109137051844,0.002769523832936044,0.0029981745003645937,0.0005742085878933566,0.0024575316408295207,0.002322727980387896,0.0007429241633507924 +Validation Accuracy: +0.9915,0.9926666666666667,0.9911666666666666,0.9921666666666666,0.9923333333333333,0.9881666666666666,0.9928333333333333,0.9945,0.9925,0.9903333333333333,0.9925,0.9948333333333333,0.9913333333333333,0.9948333333333333,0.9938333333333333,0.9938333333333333,0.9946666666666667,0.9945,0.9935,0.9946666666666667,0.9925,0.9965,0.9928333333333333,0.993,0.9946666666666667,0.9951666666666666,0.9963333333333333,0.9955,0.9955,0.9946666666666667,0.9961666666666666,0.9946666666666667,0.9955,0.9903333333333333,0.9961666666666666,0.9945,0.9963333333333333,0.9968333333333333,0.9966666666666667,0.9966666666666667,0.993,0.9943333333333333,0.9961666666666666,0.9965,0.9933333333333333,0.9953333333333333,0.9951666666666666,0.9963333333333333,0.9945,0.9958333333333333 +=> loaded model checkpoint: /userhome/cs2/mingzeng/codes/kmnist/models/ResNet-18.pkl +******* begin testing!********* +Test Averaged Loss = 0.061179 +Test Averaged Accuracy = 0.986900 +Confusion Matrix Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResNet-18/confusion_matrix.png +Class: 0 Accuracy = 0.996500 Precision = 0.967992 Recall = 0.998000 f-score = 0.982767 +Class: 1 Accuracy = 0.998200 Precision = 0.992972 Recall = 0.989000 f-score = 0.990982 +Class: 2 Accuracy = 0.995500 Precision = 0.984772 Recall = 0.970000 f-score = 0.977330 +Class: 3 Accuracy = 0.997700 Precision = 0.986070 Recall = 0.991000 f-score = 0.988529 +Class: 4 Accuracy = 0.995000 Precision = 0.992739 Recall = 0.957000 f-score = 0.974542 +Class: 5 Accuracy = 0.997200 Precision = 0.988934 Recall = 0.983000 f-score = 0.985958 +Class: 6 Accuracy = 0.997400 Precision = 0.981225 Recall = 0.993000 f-score = 0.987078 +Class: 7 Accuracy = 0.998300 Precision = 0.988083 Recall = 0.995000 f-score = 0.991530 +Class: 8 Accuracy = 0.999000 Precision = 0.993028 Recall = 0.997000 f-score = 0.995010 +Class: 9 Accuracy = 0.999000 Precision = 0.994012 Recall = 0.996000 f-score = 0.995005 diff --git a/log/ResNet-18/train_loss.png b/log/ResNet-18/train_loss.png new file mode 100644 index 0000000..aaf4751 Binary files /dev/null and b/log/ResNet-18/train_loss.png differ diff --git a/log/ResNet-18/val_acc.png b/log/ResNet-18/val_acc.png new file mode 100644 index 0000000..187ed35 Binary files /dev/null and b/log/ResNet-18/val_acc.png differ diff --git a/log/ResNet-34/confusion_matrix.png b/log/ResNet-34/confusion_matrix.png new file mode 100644 index 0000000..9990fda Binary files /dev/null and b/log/ResNet-34/confusion_matrix.png differ diff --git a/log/ResNet-34/log.txt b/log/ResNet-34/log.txt new file mode 100644 index 0000000..465ce6b --- /dev/null +++ b/log/ResNet-34/log.txt @@ -0,0 +1,178 @@ +********************begin training!******************** +Eopch: 1 train loss = 0.106633 +Eopch: 1 valuation loss = 0.036541, ACC = 0.990000 + Epoch: 1 model has been already save! +Training epoch: 1 completed. +Eopch: 2 train loss = 0.023560 +Eopch: 2 valuation loss = 0.029485, ACC = 0.991833 + Epoch: 2 model has been already save! +Training epoch: 2 completed. +Eopch: 3 train loss = 0.014101 +Eopch: 3 valuation loss = 0.026434, ACC = 0.993167 + Epoch: 3 model has been already save! +Training epoch: 3 completed. +Eopch: 4 train loss = 0.011178 +Eopch: 4 valuation loss = 0.033568, ACC = 0.990500 +Training epoch: 4 completed. +Eopch: 5 train loss = 0.011963 +Eopch: 5 valuation loss = 0.028671, ACC = 0.993167 +Training epoch: 5 completed. +Eopch: 6 train loss = 0.008491 +Eopch: 6 valuation loss = 0.021085, ACC = 0.995000 + Epoch: 6 model has been already save! +Training epoch: 6 completed. +Eopch: 7 train loss = 0.008863 +Eopch: 7 valuation loss = 0.023528, ACC = 0.994500 +Training epoch: 7 completed. +Eopch: 8 train loss = 0.007288 +Eopch: 8 valuation loss = 0.026976, ACC = 0.992500 +Training epoch: 8 completed. +Eopch: 9 train loss = 0.005660 +Eopch: 9 valuation loss = 0.043079, ACC = 0.987667 +Training epoch: 9 completed. +Eopch: 10 train loss = 0.005652 +Eopch: 10 valuation loss = 0.032521, ACC = 0.990833 +Training epoch: 10 completed. +Eopch: 11 train loss = 0.007269 +Eopch: 11 valuation loss = 0.022062, ACC = 0.994167 +Training epoch: 11 completed. +Eopch: 12 train loss = 0.004372 +Eopch: 12 valuation loss = 0.036558, ACC = 0.992167 +Training epoch: 12 completed. +Eopch: 13 train loss = 0.005474 +Eopch: 13 valuation loss = 0.023405, ACC = 0.993833 +Training epoch: 13 completed. +Eopch: 14 train loss = 0.003349 +Eopch: 14 valuation loss = 0.027550, ACC = 0.993833 +Training epoch: 14 completed. +Eopch: 15 train loss = 0.004899 +Eopch: 15 valuation loss = 0.023654, ACC = 0.994333 +Training epoch: 15 completed. +Eopch: 16 train loss = 0.003552 +Eopch: 16 valuation loss = 0.022079, ACC = 0.995000 +Training epoch: 16 completed. +Eopch: 17 train loss = 0.004018 +Eopch: 17 valuation loss = 0.021004, ACC = 0.995167 + Epoch: 17 model has been already save! +Training epoch: 17 completed. +Eopch: 18 train loss = 0.004144 +Eopch: 18 valuation loss = 0.017145, ACC = 0.996500 + Epoch: 18 model has been already save! +Training epoch: 18 completed. +Eopch: 19 train loss = 0.002511 +Eopch: 19 valuation loss = 0.022749, ACC = 0.995167 +Training epoch: 19 completed. +Eopch: 20 train loss = 0.002511 +Eopch: 20 valuation loss = 0.033824, ACC = 0.992500 +Training epoch: 20 completed. +Eopch: 21 train loss = 0.005574 +Eopch: 21 valuation loss = 0.018856, ACC = 0.996000 +Training epoch: 21 completed. +Eopch: 22 train loss = 0.002727 +Eopch: 22 valuation loss = 0.019269, ACC = 0.995167 +Training epoch: 22 completed. +Eopch: 23 train loss = 0.002617 +Eopch: 23 valuation loss = 0.023354, ACC = 0.995167 +Training epoch: 23 completed. +Eopch: 24 train loss = 0.002244 +Eopch: 24 valuation loss = 0.018489, ACC = 0.995167 +Training epoch: 24 completed. +Eopch: 25 train loss = 0.002358 +Eopch: 25 valuation loss = 0.019329, ACC = 0.995000 +Training epoch: 25 completed. +Eopch: 26 train loss = 0.003287 +Eopch: 26 valuation loss = 0.021972, ACC = 0.995167 +Training epoch: 26 completed. +Eopch: 27 train loss = 0.004589 +Eopch: 27 valuation loss = 0.024749, ACC = 0.993333 +Training epoch: 27 completed. +Eopch: 28 train loss = 0.000912 +Eopch: 28 valuation loss = 0.021506, ACC = 0.995500 +Training epoch: 28 completed. +Eopch: 29 train loss = 0.002646 +Eopch: 29 valuation loss = 0.021657, ACC = 0.995667 +Training epoch: 29 completed. +Eopch: 30 train loss = 0.001185 +Eopch: 30 valuation loss = 0.027115, ACC = 0.994667 +Training epoch: 30 completed. +Eopch: 31 train loss = 0.004833 +Eopch: 31 valuation loss = 0.021278, ACC = 0.995333 +Training epoch: 31 completed. +Eopch: 32 train loss = 0.001897 +Eopch: 32 valuation loss = 0.022322, ACC = 0.994500 +Training epoch: 32 completed. +Eopch: 33 train loss = 0.003539 +Eopch: 33 valuation loss = 0.018811, ACC = 0.995833 +Training epoch: 33 completed. +Eopch: 34 train loss = 0.000455 +Eopch: 34 valuation loss = 0.021088, ACC = 0.995833 +Training epoch: 34 completed. +Eopch: 35 train loss = 0.002819 +Eopch: 35 valuation loss = 0.027828, ACC = 0.993667 +Training epoch: 35 completed. +Eopch: 36 train loss = 0.002950 +Eopch: 36 valuation loss = 0.022639, ACC = 0.995000 +Training epoch: 36 completed. +Eopch: 37 train loss = 0.002021 +Eopch: 37 valuation loss = 0.014453, ACC = 0.996500 +Training epoch: 37 completed. +Eopch: 38 train loss = 0.000929 +Eopch: 38 valuation loss = 0.020020, ACC = 0.996167 +Training epoch: 38 completed. +Eopch: 39 train loss = 0.003934 +Eopch: 39 valuation loss = 0.021908, ACC = 0.995667 +Training epoch: 39 completed. +Eopch: 40 train loss = 0.002856 +Eopch: 40 valuation loss = 0.022252, ACC = 0.995333 +Training epoch: 40 completed. +Eopch: 41 train loss = 0.001765 +Eopch: 41 valuation loss = 0.019979, ACC = 0.995333 +Training epoch: 41 completed. +Eopch: 42 train loss = 0.002859 +Eopch: 42 valuation loss = 0.019498, ACC = 0.995500 +Training epoch: 42 completed. +Eopch: 43 train loss = 0.001988 +Eopch: 43 valuation loss = 0.020122, ACC = 0.995833 +Training epoch: 43 completed. +Eopch: 44 train loss = 0.001906 +Eopch: 44 valuation loss = 0.015427, ACC = 0.996000 +Training epoch: 44 completed. +Eopch: 45 train loss = 0.000617 +Eopch: 45 valuation loss = 0.023248, ACC = 0.995833 +Training epoch: 45 completed. +Eopch: 46 train loss = 0.002288 +Eopch: 46 valuation loss = 0.024685, ACC = 0.994333 +Training epoch: 46 completed. +Eopch: 47 train loss = 0.002961 +Eopch: 47 valuation loss = 0.029439, ACC = 0.994000 +Training epoch: 47 completed. +Eopch: 48 train loss = 0.002208 +Eopch: 48 valuation loss = 0.027046, ACC = 0.994833 +Training epoch: 48 completed. +Eopch: 49 train loss = 0.000916 +Eopch: 49 valuation loss = 0.020738, ACC = 0.996000 +Training epoch: 49 completed. +Eopch: 50 train loss = 0.000336 +Eopch: 50 valuation loss = 0.021995, ACC = 0.994667 +Training epoch: 50 completed. +Train Loss Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResNet-34/train_loss.png +Validation Accuracy Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResNet-34/val_acc.png +Train Loss: +0.10663288501016818,0.023560329713782524,0.014101241604837157,0.011177892464259832,0.011962616963440859,0.008491031523219514,0.008862906449553844,0.0072877223670445536,0.005659631196351981,0.0056515910035211045,0.007268956035215386,0.004371746765634369,0.005474027861992732,0.0033488901729209165,0.00489867321382667,0.0035519160211847887,0.0040176142923510315,0.0041439567963489805,0.0025106570646627733,0.0025113279428380718,0.005573548964850264,0.0027273199622795284,0.0026173889789269113,0.0022438014260685135,0.002357653659443726,0.003287135360845659,0.0045886932596953065,0.0009121494066920027,0.002645777721855446,0.001184784014578749,0.004833152677004954,0.0018972325255269696,0.0035389326350548506,0.00045536609219931846,0.002819422161926344,0.00295049640826091,0.0020209123628466595,0.0009293903282567419,0.003933526405523504,0.0028557769325891352,0.001764970838518952,0.0028587067907089748,0.001987672652010898,0.0019058688251576848,0.0006169046146797123,0.0022881885661847966,0.0029608939319989026,0.0022084624991614947,0.0009156058300263428,0.0003358277108293135 +Validation Accuracy: +0.99,0.9918333333333333,0.9931666666666666,0.9905,0.9931666666666666,0.995,0.9945,0.9925,0.9876666666666667,0.9908333333333333,0.9941666666666666,0.9921666666666666,0.9938333333333333,0.9938333333333333,0.9943333333333333,0.995,0.9951666666666666,0.9965,0.9951666666666666,0.9925,0.996,0.9951666666666666,0.9951666666666666,0.9951666666666666,0.995,0.9951666666666666,0.9933333333333333,0.9955,0.9956666666666667,0.9946666666666667,0.9953333333333333,0.9945,0.9958333333333333,0.9958333333333333,0.9936666666666667,0.995,0.9965,0.9961666666666666,0.9956666666666667,0.9953333333333333,0.9953333333333333,0.9955,0.9958333333333333,0.996,0.9958333333333333,0.9943333333333333,0.994,0.9948333333333333,0.996,0.9946666666666667 +=> loaded model checkpoint: /userhome/cs2/mingzeng/codes/kmnist/models/ResNet-34.pkl +******* begin testing!********* +Test Averaged Loss = 0.070697 +Test Averaged Accuracy = 0.986100 +Confusion Matrix Visualization is saved to /userhome/cs2/mingzeng/codes/kmnist/log/ResNet-34/confusion_matrix.png +Class: 0 Accuracy = 0.995800 Precision = 0.965953 Recall = 0.993000 f-score = 0.979290 +Class: 1 Accuracy = 0.998000 Precision = 0.994949 Recall = 0.985000 f-score = 0.989950 +Class: 2 Accuracy = 0.994100 Precision = 0.972864 Recall = 0.968000 f-score = 0.970426 +Class: 3 Accuracy = 0.998000 Precision = 0.984190 Recall = 0.996000 f-score = 0.990060 +Class: 4 Accuracy = 0.995000 Precision = 0.985685 Recall = 0.964000 f-score = 0.974722 +Class: 5 Accuracy = 0.996700 Precision = 0.993871 Recall = 0.973000 f-score = 0.983325 +Class: 6 Accuracy = 0.997700 Precision = 0.983185 Recall = 0.994000 f-score = 0.988563 +Class: 7 Accuracy = 0.999100 Precision = 0.994018 Recall = 0.997000 f-score = 0.995507 +Class: 8 Accuracy = 0.998800 Precision = 0.992032 Recall = 0.996000 f-score = 0.994012 +Class: 9 Accuracy = 0.999000 Precision = 0.995000 Recall = 0.995000 f-score = 0.995000 diff --git a/log/ResNet-34/train_loss.png b/log/ResNet-34/train_loss.png new file mode 100644 index 0000000..29480ff Binary files /dev/null and b/log/ResNet-34/train_loss.png differ diff --git a/log/ResNet-34/val_acc.png b/log/ResNet-34/val_acc.png new file mode 100644 index 0000000..673c719 Binary files /dev/null and b/log/ResNet-34/val_acc.png differ diff --git a/models/.gitignore b/models/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/nets/ResNet.py b/nets/ResNet.py new file mode 100644 index 0000000..0a24f47 --- /dev/null +++ b/nets/ResNet.py @@ -0,0 +1,213 @@ +import torch.nn as nn +import torchvision +import torch +import math +import torch.utils.model_zoo as model_zoo + +# construct model +__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', + 'resnet152'] + +model_urls = { + 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', + 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', + 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', + 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', + 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', +} + + +def conv3x3(in_planes, out_planes, stride=1): + "3x3 convolution with padding" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=1, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = nn.BatchNorm2d(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = nn.BatchNorm2d(planes) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + residual = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(Bottleneck, self).__init__() + self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, + padding=1, bias=False) + self.bn2 = nn.BatchNorm2d(planes) + self.conv3 = nn.Conv2d(planes, planes * 4, kernel_size=1, bias=False) + self.bn3 = nn.BatchNorm2d(planes * 4) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + residual = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.relu(out) + + return out + + +class ResNet(nn.Module): + + def __init__(self, block, layers, num_classes=1000): + self.inplanes = 64 + super(ResNet, self).__init__() + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, + bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.fc = nn.Linear(512 * block.expansion, num_classes) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels + m.weight.data.normal_(0, math.sqrt(2. / n)) + elif isinstance(m, nn.BatchNorm2d): + m.weight.data.fill_(1) + m.bias.data.zero_() + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.Conv2d(self.inplanes, planes * block.expansion, + kernel_size=1, stride=stride, bias=False), + nn.BatchNorm2d(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + y = x + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return torch.sigmoid(x), y + + +def resnet18(t_num_classes=46, pretrained=False, **kwargs): + """Constructs a ResNet-18 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [2, 2, 2, 2], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet18'])) + num_fc_ftr = model.fc.in_features # overwrite the fc layer + model.fc = torch.nn.Linear(num_fc_ftr, t_num_classes) + return model + + +def resnet34(pretrained=False, **kwargs): + """Constructs a ResNet-34 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(BasicBlock, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet34'])) + return model + + +def resnet50(t_num_classes=5, pretrained=False, **kwargs): + """Constructs a ResNet-50 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 6, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet50'])) + num_fc_ftr = model.fc.in_features # overwrite the fc layer + model.fc = torch.nn.Linear(num_fc_ftr, t_num_classes) + return model + + +def resnet101(pretrained=False, **kwargs): + """Constructs a ResNet-101 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 4, 23, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet101'])) + return model + + +def resnet152(pretrained=False, **kwargs): + """Constructs a ResNet-152 model. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + """ + model = ResNet(Bottleneck, [3, 8, 36, 3], **kwargs) + if pretrained: + model.load_state_dict(model_zoo.load_url(model_urls['resnet152'])) + return model diff --git a/unsupervised.ipynb b/unsupervised.ipynb new file mode 100644 index 0000000..7008a97 --- /dev/null +++ b/unsupervised.ipynb @@ -0,0 +1,1827 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7ba70409", + "metadata": {}, + "source": [ + "# Unsupervised Models" + ] + }, + { + "cell_type": "markdown", + "id": "dd2ab19d", + "metadata": {}, + "source": [ + "## 1. Data and Clusters' Examples Visualization" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "0422e6d9", + "metadata": {}, + "outputs": [], + "source": [ + "# download the dataset in NumPy format\n", + "import numpy as np\n", + "def load(f):\n", + " return np.load(f)['arr_0']\n", + "\n", + "# Load the data\n", + "x_train = load('kmnist-train-imgs.npz')\n", + "x_test = load('kmnist-test-imgs.npz')\n", + "y_train = load('kmnist-train-labels.npz')\n", + "y_test = load('kmnist-test-labels.npz')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "4bf07b89", + "metadata": {}, + "outputs": [], + "source": [ + "# Flatten images\n", + "# Each element in x_train and x_test is in the form of 28x28,\n", + "# so reshaping them in the form of 1x784\n", + "x_trainf = x_train.reshape(-1, 784)\n", + "x_testf = x_test.reshape(-1, 784)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "93c6ef34", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
indexcodepointchar
00U+304Aお
11U+304Dき
22U+3059す
33U+3064぀
44U+306Aγͺ
55U+306Fは
66U+307Eま
77U+3084γ‚„
88U+308Cγ‚Œ
99U+3092γ‚’
\n", + "
" + ], + "text/plain": [ + " index codepoint char\n", + "0 0 U+304A お\n", + "1 1 U+304D き\n", + "2 2 U+3059 す\n", + "3 3 U+3064 ぀\n", + "4 4 U+306A γͺ\n", + "5 5 U+306F は\n", + "6 6 U+307E ま\n", + "7 7 U+3084 γ‚„\n", + "8 8 U+308C γ‚Œ\n", + "9 9 U+3092 γ‚’" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "# import the map to see the given 10 clusters\n", + "map = pd.read_csv(\"kmnist_classmap.csv\")\n", + "map" + ] + }, + { + "cell_type": "markdown", + "id": "ca9557a5", + "metadata": {}, + "source": [ + "### visualize characters in each cluster" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "039fead3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# cluster 1\n", + "plt.figure()\n", + "fig, (ax,ax2) = plt.subplots(ncols=2)\n", + "fig.subplots_adjust(wspace=0.01)\n", + "\n", + "sns.heatmap(x_train[2], cmap = \"gist_gray\", cbar = False, ax = ax)\n", + "sns.heatmap(x_train[12], cmap = \"gist_gray\", cbar = False, ax = ax2)\n", + "ax2.yaxis.tick_right()\n", + "ax2.tick_params(rotation=0)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "046a75eb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAD7CAYAAACMlyg3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAoQElEQVR4nO3debgdVZnv8e+PjCBkxDAkQIKdgDQyyGBEmnmeQnNVEIVAVB6xQcAhBPG2jReR2QTHpiWMKiLQkRAEI5KA3RCIIZBgmAQCCQmBCAiGIcN7/6g6cthn1a69z5Scs3+f56nn7PPWqlWrsk/22lW16l2KCMzMrDGtt7YbYGZma487ATOzBuZOwMysgbkTMDNrYO4EzMwamDsBM7MG1rOjdyCpS49BHT58eDJ+/vnnJ+NbbbVVMn700Ucn48uXL29Ns2py2GGHJePTpk1LxhcvXpyMDxs2rN3atC6JCHX1v88ikpJxDwnvOiIi/SY2I+kQYBLQA/hZRFxY7358JmBm1gVJ6gH8CDgU2A74jKTt6q2n9ExA0rbAGGAoEMCLwG0RsaDenZmZWbvZHXg6Ip4BkHQj2Wf1n+uppOqZgKSzgRsBAQ8CD+WvfylpQpXtTpE0W9LsehpjZmaZ5p+j+XJKRZGhwAvNfl+Ux+pSdibweeCfI2JlReMuBx4DktefIuJK4Mq8rC9CmpnVqfnnaIHUPYO6P2/L7gmsATZPxDfL15mZ2dqxCNii2e/DyC7X16XsTOBM4G5JT/HeaceWwD8Bp9W7MzMzazcPASMljQAWA8cBx9dbSdVOICLulDSK7AbEULLTj0XAQxGxuu4md0Evv/xyMr7++usn43vuuWcy/sMf/jAZ/8xnPtO6htXg05/+dF3l33jjjQ5qiXWUomHAr776ajJ+//33d2RzrBNFxCpJpwF3kQ0RnRwRj9VbT+nooIhYAzxQfxPNzKwjRcQdwB1tqcPPCZiZNTB3AmZmDcydgJlZA3MnYGbWwNwJmJk1MHcCZmYNTB2dWra7po3o27dvMj5nzpxkfOTIkcn4jjvumIz/+c+154AqqnvevHk11wHFzzjMnt09U0B1pVTSm266aTI+ZcqUZPyLX/xiMl7v30S9evZMjzrv3bt3Mr5ixYqObE6XVksq6fbgMwEzsy5I0haS7pG0QNJjks5oTT0dPqmMmZl1iFXA1yJijqSNgD9Jmh4R7ZdKGrL5BCTtL2nDivgh9bXXzMzaS0QsiYg5+es3gAW0IpV02XwCXwF+A5wOzJc0ptnqC6ps5/kEzMzaoIb5BJqXHQ7sDMyqdz9ll4O+COwSEW/mO7lZ0vCImEQ6lzXg+QTMzNqqhvkEAMiv0twCnBkRf6t3P2WdQI+IeDNv0HOS9iHrCLaiSidgZmYdT1Ivsg7g5xFxa2vqKLsnsFTSTk2/5B3CEcDGwEdas0MzM2s7SQKuAhZExOWtrqfacwKShgGrImJpYt0nIuJ/amhoQ10OOvbYY5PxG2+8MRn/1a9+lYwfd9xxLWI9evRIlp06dWoyfuihhybjkyZNSsbPPPPMZLy76krPCRxxxBHJeNF7f/vttyfj3/3ud5PxJUuWJONvvfVWMr711lsn45dfnv4sGjRoUDJ+5ZXpqx0TJ05MxtesaZwJDcueE5C0J3AfMI/3Znr8Zp5eumZlk8osqrKutAMwM7OOERF/pB0uy/thMTOzBuZOwMysgbkTMDNrYO4EzMwamDsBM7MG5k7AzKyBeT6BdtarV69k/NFHH03Gt91222T8mGOOaRErGpt96aWXJuPz589PxovmDXj99deT8e6qKz0nMGLEiGT8oYceSsYHDx5cV/3vvPNOMv7uu+8m43369EnGi+YNKFI0n8CWW26ZjC9fvryu+ruyWuYTkNQDmA0sjoj0wyQlfCZgZtZ1nUGWPbTV6u4EJF3Xlh2amVnb5RkdDgd+1pZ6qj4xLOm2yhCwr6QBABFxVFt2bmZmrTYRGA9s1JZKyrKIDgP+TNbTBFknsCtwWbWN8rzXhbmvzcysusTn6JV5emkkHQEsi4g/5dmdW62sE9iV7JrTucA3ImKupLciYma1jTyfgJlZ25TMJ/AJ4ChJhwF9gX6SboiIz9W7n7IEcmuA70v6df7zpbJtzMysY0XEOcA5APmZwNdb0wFAjR/oeTbRT0k6HKh75ppGsnLlymR8/Pjxyfhtt1Xedsn85Cc/aRHr169fsuyCBenBAfvuu28y3mhDQbuDxYsXJ+NPP/10Ml7vENGiIZ9F8SJFQ86ffPLJZLxoeHMjDQVd2+r6Vh8R04BpHdQWMzOrU0TMAGa0dns/J2Bm1sDcCZiZNTB3AmZmDcydgJlZA3MnYGbWwNwJmJk1MKeS7iRSOivsXXfdlYwfeOCBNdc9atSoZPypp56quY5G1JVSSRfZZpttkvGbb745Gd9+++3bZb9vvvlmMp5KgQ5w9913J+Nr1qxpl/Z0R7Wkkm4PPhMwM+uiJA2QdLOkxyUtkPTxeutwCggzs65rEnBnRHxSUm9gg3orqHomIOljkvrlr9eXdJ6kqZIuktS/dW02M7O2yj+b9wKuAoiIdyPitXrrKbscNBlomv9tEtAfuCiPXV2lcadImi1pdr0NMjOz93+O5ktlev6tgZeBqyU9LOlnkj5Q737KLgetFxGr8te7RsRH89d/lDS3aCOnkjYza5uSVNKQfX5/FDg9ImZJmgRMAP5vPfspOxOYL+nk/PUjknYFkDQKSKfLNDOzzrAIWBQRs/LfbybrFOpS1gl8Adhb0l+A7YD7JT0D/Fe+zszM1oKIWAq8IKlpnPD+ZDNB1qVsUpnXgZMkbUR2/aknWc/zUr07anQjR45MxovGeddj//33T8b9nED398QTTyTjY8aMScbvueeeZHzLLbdMxt96661k/OKLL07G586dm4x39PNIDex04Of5yKBngJNLyrdQ66QybwCP1Fu5mZl1nIiYSzYNcKv5YTEzswbmTsDMrIG5EzAza2DuBMzMGpg7ATOzBuZOwMysgXk+gXZ29NFHJ+NXXpl++vuDH/xgMp56X4rmJFi5Mv3w9sEHH5yMF40VbzTdYT6BIltttVUyPnt2Op3XI4+kR4Bfc801yfhPfvKTZPz1119Pxu+4445k/IorrkjG58+fn4w3klrmE5B0FtmDuwHMA06OiLfr2Y/PBMzMuiBJQ4GvkOV12x7oARxXbz3uBMzMuq6ewPqSepLNJfBivRWUzSfQW9KJkg7Ifz9e0g8l/ZukXq1qspmZtVlELAYuBZ4HlgCvR8Tv6q2n7EzgauBw4AxJ1wOfAmYBuwE/K9rI8wmYmbVN2XwCkgYCY4ARwObAByR9rt79lOUO+khE7JCfaiwGNo+I1ZJuoEouIc8nYGbWNjXMJ3AA8GxEvAwg6VZgD+CGevZTdiawXp6dbiOy601NU0r2AXw5yMxs7XkeGC1pA2VDB/cHFtRbSdmZwFXA42R3nc8Ffp3PJzAauLHenZmZWfvIZxO7GZgDrAIepvqZQ1LpcwKSNs93+KKkAWSnIM9HxIM17aDBLgdtscUWyfiTTz6ZjPft27fD2vLSS+lpH8aOHZuM33XXXR3WlnVRd3hOoHfv3sn4xIkTk/EjjzwyGR89enQyvvfeeyfjN9yQvuJQ9CxLkaLnCv71X/81GZ8xY0aLWHedq6CW5wTaQ+l8AhHxYrPXr5FNYWZmZt2AnxMwM2tg7gTMzBqYOwEzswbmTsDMrIG5EzAza2Clo4OsPi+88EIyfvXVVyfju+++ezKeGvo3cODAZNmhQ4cm45tsskkyfswxxyTjjTZEtCspGnp5/PHHJ+Pjxo1LxseMGZOML168OBnv379/Ml7vUNAi/fr1S8Z/+tOfJuM777xzi9iKFSvapS2NymcCZmZdkKTJkpZJmt8sNkjSdElP5T/T3xybKcsi2l/ShZIel7Q8XxbksQHtcBxmZtY61wCHVMQmAHdHxEjg7vz3qsrOBG4CXgX2iYjBETEY2DeP/breFpuZWfuIiHuBv1aExwDX5q+vBY4uq6esExgeERdFxNJmO14aERcBWxZt5FTSZmZtU5ZKusAmEbEEIP85pGyDshvDCyWNB66NiJfyhm0CnASk74DiVNJmZm1VQyrpdlF2JnAsMBiYKemvkv4KzAAGkU0wY2Zm646XJG0GkP9cVrZB1U4gIl6NiLMjYtuIGJQvH46Is6nhWpOZmXWq24CmNMFjgd+UbdCW5wTOI5t+0mrw5S9/ucPqvu6665LxE044IRkvSg9c9BzCq6++2rqGWbspSpe8+eabJ+NFacTvu+++uva7cOHCZHz16tXJeI8ePeqqf82aNcn40qVLk/GVK1fWVX93JumXwD7AxpIWAd8GLgRukvR5sklnSq/YVO0EJD1atApIP4lkZmYdLiI+U7Bq/3rqKTsT2AQ4mGxIaHMC/reeHZmZ2bqnrBO4HdgwIuZWrpA0oyMaZGZmnadqJxARn6+yLp20xMzMugznDjIza2DuBMzMGpg7ATOzBub5BNayXr16JeOpcdhFY6q/+tWvJuNFueO32WabZPyKK65IxoueN7DOU5S/f9CgQcn4O++8U1c99e53vfXa5/tj0XMF8+fPT8ZXrVrVLvvtDiRNBo4AlkXE9nnsEuBI4F3gL8DJEfFatXp8JmBm1jVdQ8tU0tOB7SNiB+BJ4JyySsrmE+gn6XuSrpd0fMW6H9fXXjMzay+pVNIR8buIaDpdegAYVlZP2ZnA1WQPht0CHCfpFkl98nWj62uymZl1onHAb8sKlXUCH4qICRExJSKOAuYAf5A0uNpGnk/AzKxtWjmfQNO25wKrgJ+XlS27MdxH0noRsQYgIr6bJyq6F9iwaCPPJ2Bm1jatnU9A0liyG8b7R1HmwWbKzgSmAvtVNOxa4Gtkd5/NzGwdIekQ4GzgqIhYUcs2ZWkjxhfE75R0Qf1NNDOz9lCQSvocoA8wPR/e+0BEfKlqPTWcLRQ14PmIKJxnuFk5Xw6q4lvf+lYyfuqpp7aIPf7448mys2enb72ceOKJyfimm26ajBeNLe/fv39d5buKiFBX//v8xS9+kYx/8pOfTMZvvPHGZHzRokXJ+HHHHZeMjxgxoobWlVuxIv1ldfvtt0/Gn3322XbZb1cQEfU91NFKnk/AzKyBeT4BM7MG5vkEzMwamOcTMDNrYM4dZGbWwNwJmJk1sFYPEa15B118CN7astlmm7WIfeMb30iW/fKXv5yM9+nTJxmv1+jR6TRRs2bNapf615buMET0Bz/4QTJ+2mmndXJLWmfJkiXJ+C677FJX+e6os4aI1n0mIGlIRzTEzMxqJ2mypGWSWky+IOnrkkLSxmX1lKWSHlSxDAYelDRQUno2CzMz6wzX0HI+ASRtARwIPF9LJWVDRF8BFlbEhpJlEw1g61p2YmZm7Ssi7pU0PLHq+8B44De11FN2OWg88ARZMqIRETECWJS/LuwAnErazKxtWpNKWtJRwOKIeKTW/ZQ9J3CppBuB70t6gSxBUemNNKeSNjNrm3pTSUvaADgXOKie/ZTeGI6IRRHxKeAesvkrN6hnB2Zm1ik+BIwAHpH0HNnUknMkpTNG5moeHRQRU4F9gQMAJJ3c6qaamVm7ioh5ETEkIoZHxHBgEfDRiFhabTunku4GRo4cmYxPmDAhGR83blwyPn9+i5FmAOy1117J+KuvVuYV7Fq6w3MCBx98cDJ+xx13JOPrrdc1ng9NpVIH+OlPf9rJLVl7yp4TaD6fAPAS8O2IuKrZ+ueAXSPilWr1OJW0mVkXFBGfKVk/vJZ6nErazKyBOZW0mVkDcyppM7MG1jXuEpmZWYdwJ2Bm1sDcCZiZNTDPJ9CNfeITn0jG//jHPybjd955ZzJ+6KGHtlub1iXd4TmBDTZIP8A/bdq0ZHzPPfdMxnv2TN8eXLNmTTL+8ssvJ+PLly9PxrfbbrtkvMjixYuT8d12261FrLvOMVDDcwKTgSOAZRGxfbP46cBpwCpgWkSMr1ZPa+YTGFzvNmZm1u6uoSKVtKR9gTHADhHxz8ClZZWUzSdwYdOkBJJ2lfQMMEvSQkl7t7blZmbWNhFxL/DXivCpwIUR8U5eZllZPWVnAoc3e+T4EuDYiPgnsgkLLquvyWZm1sFGAf8iaZakmZJaXj+rUNYJ9JLUdLFw/Yh4CCAingQKJ7D1fAJmZm3TmvkEyJ79GgiMBr4B3CSp6r2FsieGfwTcIelC4E5JE4Fbgf2BuUUbeT4BM7O2qXc+gdwi4NbIRvw8KGkNWYK59J18yp8Y/oGkeWTXmUbl5UcBU4D/V2fjzMysY00B9gNmSBoF9CabJrhQ2ZkAETEDmFEZz+cTuLoVjTQzszZqnkpa0iKymR8nA5MlzQfeBcZGyXMApZ1AFefhTmCdNmTIkLrKDxs2rINaYh1lxYoVyfjhhx+ejB90UHrmwaLLxitXrkzGZ82alYz36tUrGZ88eXIyXjQfwtChQ5Px4447rkVs4sSJybId/QzU2lYllfTn6qnH8wmYmTUwzydgZtbAPJ+AmVkD83wCZmYNzFlEzcwamDsBM7MG1pYhog3tjDPOSMbHj09nbX3ssceS8WuuuSYZv/XWW1vE3n777doalzvssMPqKv/ss88m40XDB7v7ELyurGjo6JQpUzq3IbmTTjopGX/ggQeS8a222ioZP//881vEnn766WTZqVOnJuM9evRIxlevXp2Md3c+EzAz64IkTZa0LH8wrCm2k6QHJM3N8w3tXlZPWSrpXSXdI+kGSVtImi7pdUkPSdq5PQ7EzMxa5Roq5hMALgbOi4idgH/Pf6+q7Ezgx3kl08ieC/jPiOgPTMjXmZnZWlAwn0AA/fLX/YEXy+opTSUdEb+NiF9m+4yb853fDfQt2sippM3M2qaVqaTPBC6R9ALZrGLnlG1QdmP4bUkHkfUoIenoiJiSzypWeBfFqaTNzNqmlamkTwXOiohbJH0auAo4oNoGZWcCXwK+BowjSx+xr6TXyC4FfaXOxpmZWccaSzbnC8CvgbbdGI6IRyLi4Ig4NCIej4gzImJAPoHxNm1vr5mZtaMXgab53/cDnirbQK0d6y3p+YjYsoZyXfpy0IABA5Lx559/Phlfs2ZNMj59+vRkfOed04OsUql0Fy5cmCz71FPp9/nAAw9MxovaeMop6UuOf/jDH5LxF18svee0TosIdfW/z66u6O//3nvvTcY33HDDFrGi/xennXZaMn777bfX2Lq1KyKqTgvZfD4B4CWy+QSeACaRXep/G/hyRPypWj1OJW1m1gVVmU9gl3rqcSppM7MG5lTSZmYNzKmkzcwamHMHmZk1MHcCZmYNzJ2AmVkDa/VzAjXvoIuPw95rr72S8ZkzZybjEydOTMbPOuusZLxXr17JeGrMflHdPXvWNy3E2LFjk/Hrrruurnq6Oj8n0P7aa+6Jor/FE044oeY67rvvvmT8mGOOScZfeeWVmuvuDGXPCbSXslTS/SVdKOlxScvzZUEeG9AZDTQzs5by9P735J/Jj0k6I48PytP+P5X/HFitnrLLQTeRPSOwT0QMjojBwL557NftcSBmZtYqq4CvRcSHgdHAv0najizV/90RMRK4O/+9UFknMDwiLoqIpU2BiFgaERcBpSkjzMysY0TEkoiYk79+A1gADAXGANfmxa4Fjq5WT1knsFDSeEn/SBEhaRNJZwMvFG3k+QTMzNqmnvkEJA0HdgZmAZtExBLIOgpgSLX9lN1RPJbsVGJm3hEEWaKi24BPF23k+QTMzNqm1vkEJG0I3AKcGRF/K7o5X6TsieFXJV0NTAceiIg3m+34EODOuvZmZmbtRlIvsg7g5xHRNI/AS5I2i4glkjYDllWro2x00FeA3wCnAfMljWm2+oLWN93MzNpC2Vf+q4AFEXF5s1W3kU0uQ/7zN1XrqTZ+V9I84OMR8WZ+zelm4PqImCTp4YhIJwN/fx1d+nLQxhtvnIwvW5buXKdMmZKMF41NrsdOO+2UjB977LHJ+P3335+M33bbbW1uS3fg5wTKbbTRRsn4N7/5zWR89er0rLPf+ta36tpv0fM5qbktevTokSxb9Nk2YUJ6sMxll12WjBcdU0erYT6BPYH7gHlA0yQh3yS7L3AT2eCd54FPRUTlhPT/UHZPoEfTJaCIeE7SPsDNkrYiSydtZmZrQUT8keLP4f1rradsdNBSSTs12+mbwBFkM9l8pNadmJnZuqmsEzgRWNo8EBGrIuJEIH2+ZmZmXUbZ6KBFVdb9T/s3x8zMOpOziJqZNTB3AmZmDcyppFupaPjlbrvtlowXDe+cP39+ezXJ6uQhouX69u2bjN9zzz3J+LRp05LxCy5IP1Y0ZEg6o0FR+ZNPPjkZr8dLL72UjO+xxx7J+DPPPNPmfbbGupJKup+k70m6XtLxFet+3LFNMzOzIlVSSV+Sp/9/VNJ/l6X9L7scdDXZONRbgOMk3SKpT75udFsPwszMWq0olfR0YPuI2AF4EjinWiVlncCHImJCREyJiKOAOcAfJA1ue/vNzKy1ilJJR8TvImJVXuwBYFi1esqeGO4jab2IWJPv6LuSFgH3AhsWbZSnPC1Me2pmZtUlPkevzDOLpsoO571U0s2NA35VbT9lncBUYD/g902BiLhW0kvAD4o2cippM7O2aW0q6Wbxc8kuGf282vZVLwdFxHhgkaT98x01xe8EvlLWODMz6zgFqaSRNJYsxc9no2QIaNnooNPJ0pCeTstU0t9tbcPNzKxtilJJ53O9nA0cFREryuopuxx0CrBL81TSkoZHxCQaPIvo7bffnoyPHp0eNHXjjTcm40ceeWQy/uyzz7auYdYl9OyZ/q/34Q9/OBkfNWpUMj5ixIhkfIsttkjGP/axjyXjjz76aDI+a1blJebM8OHDk/Fx48Yl44cffngy/pGPpPNQfuADH0jG61H0BXjgwIHJ+NChQ5PxtfWcQA0+AZwAzJM0N499E7gC6ANMz2cZeyAivlRUiVNJm5l1QVVSSd9RTz1OJW1m1sCcStrMrIE5lbSZWQNzFlEzswbmTsDMrIG5EzAza2B1zycgaUhELKujfLdMG7H55psn4w8++GAyXjQGedmy9D/lZz/72Rax3//+94mS1lprcz6BHXfcMRkvytM/YMCAZDwfB97pVq9enYy/++67yXivXr3qqqdPnz7JeD2KPtsefvjhZHzs2LHJ+Nqa82NdmU9gUMUyGHhQ0kBJgzqjgWZm1lLRfALN1n9dUkjauFo9ZQ+LvQIsrIgNJUspHcDW9TbczMzaRdN8AnMkbQT8SdL0iPizpC2AA4HnyyopuycwHniCLAfFiIgYASzKX7sDMDNbS4rmE8hXf5/s87v0cmdZFtFLgS8A/y7p8ry3Ka1U0imSZkuaXVbWzMxaav45mi+Fc7Q0n09A0lHA4oh4pJb9lF0Oanpg7FOSjiSbtmyDGrbxfAJmZm3QmvkEyC4RnQscVOt+SoeIStpW0v7APcC+wAF5/JBad2JmZu0vMZ/Ah4ARwCOSniObWnKOpE2L6igbHfQVms0nABwUEU3jpS5o8xGYmVmrpOYTiIh5ETEkIoZHxHBgEfDRiFhaVE/Z5aAv4vkEkl588cVk/KCD0mdhM2bMSMaHDBmSjN9xR8tssFdddVWy7DnnnJOMv/baa8m4rX29e/dOxte15wGKcumfdNJJyfgLL7yQjBc9V7PRRhsl46nnZAB22GGHFrFtttkmWbbIBz/4wWT873//e131rAOS8wlERF2ppD2fgJlZF1RlPoHmZYaX1eP5BMzMGpjnEzAza2CeT8DMrIE5i6iZWQNzJ2Bm1sDq7gTyTKJmZtYNVJ1PQNKFwKUR8YqkXYGbgDVAL+DEiJhZugOnjQDS45sB7rvvvmS8X79+Ndf97W9/Oxn/zne+k4z37ds3GT/llHRqkpkz02/zI4/UlJpknbU25xPYcMMNk/HLLrssGR83blwy3rNnaeaXNnn77beT8WOPPTYZnzp1ajJe77wlRfMJpOKjRo2qq+4lS5Yk40XP/tTb9vZSNp9Anin0OmBTss/lK/NnuJB0OnAaWRqJaRExvqiesr+gwyNiQv76EuDYiHhI0ijgF8CutRyMmZm1u2QqaWATYAywQ0S8Iyn9RGqurBPoJalnRKwC1o+IhwAi4klJbZ/6x8zMWiUilgBL8tdvSGpKJf1F4MKIeCdfV3UmyLJ7Aj8C7pC0H3CnpImS9pJ0HjC3aCOnkjYza5vWppIGRgH/ImmWpJmSdqu2n7LnBH4gaR5wal5xz/znFOD8Kts5lbSZWRu0JpV0RPxNUk9gIDAa2A24SdLWUXBzo5a7SkvzhsxqyiOU7/gQ4M4atjczsw6QSCUNWebQW/MP/QclrSFL9fNyqo66UklLGtNstVNJm5mtJalU0rkpwH55mVFAb7L54tP1lAwRnQd8vHkqaeD6iJgk6eGI2LmGhvpyUBV77LFHMn7BBS372K23Tk/rfMwxxyTjS5emU4hPnz49Gd92222T8X333TcZL0qP3VWszSGiRamhi4Z8fuELX0jGR44cWVc9xx9/fDI+eHB9j/8sX748GT/ggAOS8Xnz5iXjq1evrmu/jaSGIaJ7AvcB88iGiAJ8E/g9MBnYCXgX+HpE/KGoHqeSNjPrgkpSSX+u1nqcStrMrIE5lbSZWQNzKmkzswbmLKJmZg3MnYCZWQNzJ2Bm1sgiotMW4BSXb5/y61JbukP5dbFNLt812tIZ5Tty6dydwWyXb5/y61JbukP5dbFNLt812tIZ5Tty8eUgM7MG5k7AzKyBdXYnUJoW1eXXibobsXxn7MPl26/8utSWzijfYaomkDMzs+7Nl4PMzBqYOwEzswbmTsCMbKY8SU9IelrShJKyW0i6R9ICSY9JOqOG+ntIeljS7TW2Z4CkmyU9nu/n41XKnpW3Y76kX0rqmygzWdIySfObxQZJmi7pqfznwJLyl+TteVTSf0saUFS22TZflxSSNq5Wdx4/PX8PHpN0cUlbdpL0gKS5+fy7uzdbl3x/io63Svmi4636/jc/5mpli46303Xk+FNgW+Bs4ApgUv76wyXl9wc2rIgfUsO+ritZ/zGgX/56feA8YCpwEdC/omxvsgyqB+S/Hw/8EPg3oNfaHtfrpX0XoAfwF2Dr/L1/BNiuSvnNgI/mrzcCnqxWPi/3VeAXwO01tula4Av5697AgIJyQ4FngfXz328CTkqU2wv4KDC/WexiYEL+egJwUUn5g4Ce+euLmsqnyubxLYC7gIXAxiV170s2GUqf/PchJeV/Bxyavz4MmFH2/hQdb5XyRcdb+P5XHnOVuguPt7OXDjsTkHQ2cCPZpAcPAg/lr3+Z+qZVz1SWkm6rWKYCxzT9XtCkycCK/PUkoD/ZG7sCuLqi7NXA4cAZkq4HPgXMIpu0+Wc1/QNYu5I0pM7y9UyVtTvwdEQ8ExHvkv3djikqHBFLImJO/voNYAHZh3FRW4aR/T3V9LcjqR/ZB99V+T7ejYjXqmzSE1hf2QTjGwAvJtp8L/DXivAYss6G/OfR1cpHxO8iYlX+6wPAsCp1A3wfGA+8b/RJQflTgQsj4p28zLKS8gH0y1/3p9kxV3l/ksdbVL7K8VZ7/993zFXKFh5vp+uo3oWsx2vxrZnsW81Tifg88jMAYDgwGzgj//3hirJzgBuAfYC9859L8td7F7RnQfPtK9bNrfj90fxnT+AlshnWIOvEHl1bPXbimGr+9gAMbsf99gcuBB4HlufLgjw2IFG+H/A94Hrg+Ip1P06UH1SxDAaeAwYCgxLlLyT/pgnsCjwDPE32bSz591Cx/SeBnzX7/QTghzX+WwwHnic/yywoczOwS/53WnomQDYt4IPANcDDZJ3HB6qUPwN4k2wi8Z+XtLX5t+nXKta/Wq18xbqpwOeq1H0UMCl//RzNzgQKys8lOzufBcwEdisp/+H83/0FYDGwVdn7U3a81d7PyuMtqL+WY24qW/V4O3PpyHsCa4DNE/HNeG8+zObeN5Ul2X+YQyVdTssp1HYF/gScC7weETOAtyJiZkTMLGjPfEkn568fkbQr/GMi5pUVZdeT1Jvs9G0Dsg89gD5Ar1TlkvpLujC/hrg8XxbksQGJ8v0kfU/S9ZKOr1j340T5QRXLYOBBSQMlDaooe2HTNVhJu0p6BpglaaGkvRN175pft7whv4Y5XdLrkh6SlJpH+ibgVWCfiBgcEYPJTm9fBX6dKH812Xt4C3CcpFsk9cnXjU6Uf4Xs/W1aZpN9e5qTv650eEQ0TaR9CXBsRPwTcCBwWaJ8pdQUfaVjpyVtSHZMZ0bE3wrKHAEsi4g/1dCOJj3JLn/8JLJ5vP9OdvkiVf9Asm+4I8j+v31AUs1TC7aGpHOBVcDPC9ZvQPZ/89/rqLYnWSc/GvgGcJNUMBFz5lTgrIjYAjiL/Kypoh2l708t5YuOt3n5fH3hMSfqrvd4O05H9S7AIWTfxn5L9mDElcCdeazFNX7gD8BOFbGewHXA6oJ9DCP70Pkh8HxJe/qTfbP6C1nvu5LsG+NMYMeKsmfl6xYCXwHuBv6L7Gzl2wX130V2z2PTZrFN89j0RPlbyL7BHg3clv/edH1wTqL8GrJrv82XlfnPZyrKzmv2+h7ybxnAKBI5S8i+dR4KfIbsm9Un8/j+wP2J8k9U+XdusY6WZ1rnAv9D9g0/daxfz/9WPtIs9myVfT7Oe9duHyj6t6iy/ceBu5r9fg5wTsk2vfL3/Ksl5b4HLCL7ZriU7PLjDSXbbAo81+z3fwGmFZT9FHBVs99PJHF2la8bzvu/TT8BbJa/3qzyvassn8fGAvcDGxSVJZt6dll+zM+RfUA+X/F/o7Itd5J9qWj6/S/AB6uUf533nnMS8Ley96fa8Ra9n1WO933lqx1zQVuqHm9nLh1beTb6aDTwf8hOuUeTX1pJlB3W/I+kYt0nSvZzOHBBjW3aCNiR7PR8kyrlNgc2z18PyNu/e5Xy68wHI3V+KNLschsVnSkVl+Ly2O/Irntu0iy2CVmH9/tE+QXAehWxscBjwMIqfw+/Bi7P37NnUuXysqfnbdoP+A9gItk19fOA62v4m+hJ1umP4L0bw/9cpbzIvpxMrPP/wz7UfmP4PmCb/PV/AJcUlPtY/u+4Qd6ua4HTC8oO5/0fpJfw/hulF5eUPwT4M4kPq8qyFeueo/xy0JeA7+SvR5F9GVGV8gvIP0TJvqz8qez9KTreKuWTx1vL+990zFXqrnq8nbl0+g6768I69MFInR+KZN90DiL7VrkQODqP7036zGEg2U31x8kuAf01P56LSF+zv5h8pFVF/BAS94cqyhxJdlNuaUm5fYBfkV1DnwfcAZxCjaO5yEaYPEn2jezckrJ7kl0uepTs2u5c4LAa9rEPtXcCO5Fd+noUmAIMrFL2vPy9mE9236VPoswvye6brSQ7M/k82ReOu4Gn8p+DSso/nX9YNR3zT4vKVuz7Od4/OihVd2+y+3zzyS777VdSfk+yS4WPkJ3Z71L2/hQdb5XyRcdb+v7zXidQVHfh8Xb2slZ22h0X3v/B+Ffe/8HY4j8wHfzBSPGHYs9E2R3JTld/SzZMdxLwGlmHtEdB/dsCB1DjcF6Kh/8eWlaebEjv9q2sv3R4sRcvjbys9QY0wgKc3N7lKz4Ya66/PdpCdp/kCbJvqM8BY5qtS13KOr3O8vXWX1d5L168vLes9QY0wkLJTevOLN8edVPHcN51sbwXL17eW3pi7ULSo0WryO4NdFr5jm4LFcN5Je0D3CxpK9LDLde18maWcyfQfjYBDia7UdqcgP/t5PId3ZalknaKiLkAEfFmPh5+MtlQuXW9vJnl3Am0n9vJLknMrVwhaUYnl+/otpxINg76HyJ7vP5ESf/ZBcqbWc6TypiZNTCnkjYza2DuBMzMGpg7ATOzBuZOwMysgf1/OytM6c921YUAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# cluster 2\n", + "plt.figure()\n", + "fig, (ax,ax2) = plt.subplots(ncols=2)\n", + "fig.subplots_adjust(wspace=0.01)\n", + "sns.heatmap(x_train[3], cmap = \"gist_gray\", cbar = False, ax = ax)\n", + "sns.heatmap(x_train[8], cmap = \"gist_gray\", cbar = False, ax = ax2)\n", + "ax2.yaxis.tick_right()\n", + "ax2.tick_params(rotation=0)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "da357b54", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# cluster 3\n", + "plt.figure()\n", + "fig, (ax,ax2) = plt.subplots(ncols=2)\n", + "fig.subplots_adjust(wspace=0.01)\n", + "sns.heatmap(x_train[5], cmap = \"gist_gray\", cbar = False, ax = ax)\n", + "sns.heatmap(x_train[26], cmap = \"gist_gray\", cbar = False, ax = ax2)\n", + "ax2.yaxis.tick_right()\n", + "ax2.tick_params(rotation=0)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "7286cdbb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# cluster 4\n", + "plt.figure()\n", + "fig, (ax,ax2) = plt.subplots(ncols=2)\n", + "fig.subplots_adjust(wspace=0.01)\n", + "sns.heatmap(x_train[21], cmap = \"gist_gray\", cbar = False, ax = ax)\n", + "sns.heatmap(x_train[54], cmap = \"gist_gray\", cbar = False, ax = ax2)\n", + "ax2.yaxis.tick_right()\n", + "ax2.tick_params(rotation=0)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "38866d42", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# cluster 5 \n", + "plt.figure()\n", + "fig, (ax,ax2) = plt.subplots(ncols=2)\n", + "fig.subplots_adjust(wspace=0.01)\n", + "sns.heatmap(x_train[4], cmap = \"gist_gray\", cbar = False, ax = ax)\n", + "sns.heatmap(x_train[6], cmap = \"gist_gray\", cbar = False, ax = ax2)\n", + "ax2.yaxis.tick_right()\n", + "ax2.tick_params(rotation=0)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e0c292a2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# cluster 6\n", + "plt.figure()\n", + "fig, (ax,ax2) = plt.subplots(ncols=2)\n", + "fig.subplots_adjust(wspace=0.01)\n", + "sns.heatmap(x_train[10], cmap = \"gist_gray\", cbar = False, ax = ax)\n", + "sns.heatmap(x_train[13], cmap = \"gist_gray\", cbar = False, ax = ax2)\n", + "ax2.yaxis.tick_right()\n", + "ax2.tick_params(rotation=0)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "5c9e5d1f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# cluster 7\n", + "plt.figure()\n", + "fig, (ax,ax2) = plt.subplots(ncols=2)\n", + "fig.subplots_adjust(wspace=0.01)\n", + "sns.heatmap(x_train[24], cmap = \"gist_gray\", cbar = False, ax = ax)\n", + "sns.heatmap(x_train[25], cmap = \"gist_gray\", cbar = False, ax = ax2)\n", + "ax2.yaxis.tick_right()\n", + "ax2.tick_params(rotation=0)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "523d5272", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# cluster 8\n", + "plt.figure()\n", + "fig, (ax,ax2) = plt.subplots(ncols=2)\n", + "fig.subplots_adjust(wspace=0.01)\n", + "sns.heatmap(x_train[1], cmap = \"gist_gray\", cbar = False, ax = ax)\n", + "sns.heatmap(x_train[14], cmap = \"gist_gray\", cbar = False, ax = ax2)\n", + "ax2.yaxis.tick_right()\n", + "ax2.tick_params(rotation=0)\n", + "\n", + "plt.show()\n", + "#sns.heatmap(x_train[17], cmap = \"gist_gray\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "a53a0ed4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAD7CAYAAACMlyg3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAsq0lEQVR4nO3deZhU1bnv8e8rCCook+IcAYcYHI4DKokTOBs94rlxitEoGDXGOESNEycxmmsCTgkaTY4DatSrMc5EJcE5nqhoVBTFCYOIgjgLigPw3j/27tgW76rdu7u66aZ+n+epp6t+tWrtVV3dtWrvWnstc3dERKQ+LbW4GyAiIouPOgERkTqmTkBEpI6pExARqWPqBERE6pg6ARGROta5tTdgZhqDCpx88slhPnr06CbX8bOf/SzMzz777DDX8N/q3N06yt/nzjvvHObDhw8P80GDBoX5gAEDwvyFF14I81NOOSXMH3jggTD/+OOPw1zKc3crKmNmuwFjgE7A5e4+qux2tCcgItIBmVkn4GJgd2Ag8F0zG1i2nsI9ATNbHxgGrA448CZwh7tPKbsxERGpmS2BV9z9VQAzu4Hsvfr5MpVU3RMws1OAGwADJgKP59evN7NTqzzuCDN7wsyeKNMYERHJNH4fzS9HVBRZHXi90e0ZeVZK0Z7AYcAG7v5FReMuAJ4DwuNP7n4pcGletkMccxURaU8av48mRN8ZlH6/LfpOYCGwWpCvmt8nIiKLxwxgzUa31yA7XF9K0Z7A8cC9ZvYyX+52fA1YB/hx2Y2JiEjNPA6sa2b9gTeAA4ADy1ZiRcMIzWwpsi8gVifb/ZgBPO7uC5q0gTo7HLTOOuuE+cSJE8O8V69eYX7RRRctkh1//PFh2YULtVPWHItziGjPnj3D/MAD4//hH/zgB2H+jW98I8xT/9ejRsUjCH//+9+H+dtvvx3mi0u/fv0Wyd56662w7Lx581q5Na2riUNEvw38lmyI6Fh3j8eLV1E4OsjdFwKPlq1YRERal7vfBdzVkjp0noCISB1TJyAiUsfUCYiI1DF1AiIidUydgIhIHVMnICJSxwrPE2jxBpbQ8wS6d+8e5vfff3+Yp6b2nTp1aphvttlmi2QfffRRE1tXXbdu3cL8tNNOC/OXX345zA866KAwv/baa8P86quvbkLr2k5bnCfQqVOnMP/e974X5mPHjg3zd999N8xT4/gvvPDCML/sssvC3Cwekr7RRhuF+aRJk8K8rNR2jz766DA/4ojK6XPgF7/4RVj2lltuaXa72oOmnCdQC9oTEBHpgMxsTTO738ymmNlzZnZcc+pp9UVlRESkVcwHTnT3J81seeCfZjbB3Ws3lTRk6wmY2Y5m1r0i361ce0VEpFbcfaa7P5lfnwNMoRlTSRetJ3AscDtwDDDZzIY1uvtXVR6n9QRERFqgCesJNC7bD9gUeKzsdooOBx0ObO7uc/ON3GRm/dx9DPFc1oDWExARaakmrCcAQH6U5mbgeHcvPXqkqBPo5O5z8wZNM7MhZB3BWlTpBEREpPWZ2dJkHcB17t6s4VBF3wnMMrNNGm7kHcKewIpAPHZMRERanWXja68Aprj7Bc2up9p5Ama2BjDf3WcF923t7v/bhIYukYeDLr744jD/0Y9+FObz588P81133TXM77vvvuY1rJGuXbuGeWq8/rRp08L8rLPOCvPnnnsuzPv27Rvme+21V5jfe++9Yd7a2uI8gS5duoT5HXfcEeYDBgwI83322SfMU6/BggVNWu7j31LnLay33nphfsYZZ5SqP2WbbbYJ8wkTJoR5dN5Fag2P6dOnN79h7UDReQJmtg3wd+BZvlzp8fR8eukmq3o4yN1nVLmvsAMQEZHW4e4PU4PD8jpZTESkjqkTEBGpY+oERETqmDoBEZE6pk5ARKSOqRMQEaljmkW0wOabbx7mI0aMKFVPamx+av2BWhg5cmSY9+/fP8yHDx8e5vPmzQvzVNtT9Rx55JFhvrjOE2gLX3zxRZj/9a9/DfNf/vKXYT5+/PgwP+yww8L87rvvDvPOneN/+dRr88orr4R5rWy77bZhvswyy4R5dC7LG2+8UcsmLWK11VYL8zfffLNVt9sUZtYJeAJ4w933bE4d2hMQEem4jiObPbTZSncCZvbHlmxQRERaLp/RYQ/g8pbUU/VwkJlVnttuwFAz6wng7vE8ACIi0tp+C5wMLN+SSoq+E1gDeJ6sp3GyTmAQcH61B+XzXifnvhYRkeqC99FL8+mlMbM9gdnu/s98dudmK+oEBpEdcxoJ/NTdnzazee7+YLUHaT0BEZGWKVhPYGtgLzP7NrAMsIKZXevuB5XdTtEEcguB35jZn/OfbxU9RkREWpe7nwacBpDvCZzUnA4AmviGns8muq+Z7QGUXrmmI+jWrVuYp4Z2poawvf7662F++umnh3m1qbybatiwYWF+7LHHhvmWW24Z5qmhoCkffvhhqfKrr156+dMOL/X6Xnpp/AHvqKOOCvN11103zC+66KIw33777cM8Nc33FltsEeYp2VT2iyr79zxw4MBS5aMht2WnzS5r5syZrVr/4lbqU7273wnc2UptERGRktz9AeCB5j5e5wmIiNQxdQIiInVMnYCISB1TJyAiUsfUCYiI1DF1AiIidUwnfuVGjx4d5htssEFN6pk9e3bpNlVKTQE9duzYUm156aWXWtwWSI8VT1l11VVrst0lwTrrrBPmH3/8cZjPnz8/zNdaa60w33vvvcM89XeYOufjs88+C/Oy5wP06tUrzDfaaKNS9ay00kqLZD//+c/DstOnTw/zOXPmhPmrr74a5i+++GKYf/LJJ2He0WhPQESkgzKznmZ2k5m9YGZTzOybZevQnoCISMc1Bhjv7vuYWRdgubIVVN0TMLOtzGyF/PqyZnammY0zs9Fm1qN5bRYRkZbK35u3A64AcPfP3f2DsvUUHQ4aCzQc+BoD9ABG59mVVRp3hJk9YWZPlG2QiIh89X00v1ROzz8AeBu40syeMrPLzSyeBK2KosNBS7l7wzdSg9x9s/z6w2b2dOpBmkpaRKRlCqaShuz9ezPgGHd/zMzGAKcCPyuznaI9gclm1rBq+CQzGwRgZusB8QraIiLSFmYAM9z9sfz2TWSdQilFncAPgO3NbCowEHjEzF4FLsvvExGRxcDdZwGvm9nX82hHspUgSylaVOZD4FAzW57s+FNnsp7nrbIbau+++c1yI6vGjRsX5n/4wx9q0ZxwDP6FF14Ylk2tYXDeeefVpC0p7733Xqnyjz76aCu1pOMZMWJEmL/zzjthnhrzfvzxx4f5+PHjw3znnXcO84ULF4b5gAEDwjw17j+1LsHBBx8c5htvvHGYf/RRvGxJz549F8nOPPPMsGytPPPMM2F+wgknhPn9998f5qnfcQsdA1yXjwx6FRheUH4RTV1UZg4wqWzlIiLSetz9abJlgJtNJ4uJiNQxdQIiInVMnYCISB1TJyAiUsfUCYiI1DF1AiIidazuZhHt2rVrmK+//vql6rn00vhs7gULFpRuU2TkyJGLZHvssUdY9thjjw3zL75o3ZO6p06dWqr8kjD/erdu8dQsRx11VJinxpin1oCYMWNGmKfm9U+tP5Ca7z/VnqWWij8PptaAuOyyy8J88ODBpepJrUmxwgorhHlrSp2jkTqXIXUuxjXXXBPmhx9+eJi35D3DzH5CduKuA88Cw9390zJ1aE9ARKQDMrPVgWPJ5nXbEOgEHFC2HnUCIiIdV2dgWTPrTLaWwJtlKyhaT6CLmX3fzHbKbx9oZr8zs6PNbOlmNVlERFrM3d8AzgOmAzOBD939b2XrKdoTuBLYAzjOzK4B9gUeA7YALk89SOsJiIi0TNF6AmbWCxgG9AdWA7qZ2UFlt1P0xfBG7r5xvqvxBrCauy8ws2upMpeQ1hMQEWmZJqwnsBPwL3d/G8DMbgG+BVxbZjtFewJL5bPTLU92vKlhScmugA4HiYgsPtOBwWa2nGXDrHYEppStpGhP4ArgBbJvnUcCf87XExgM3FB2YyIiUhv5amI3AU8C84GnqL7nELLUeOJ/FzBbLd/gm2bWk2wXZLq7T2zSBtrZ4aCVV145zGfNmhXmH3zwQZivueaaYT537txS7dluu+3C/J577lkkmzlzZlj261//eph/+mmp4cKl7bXXXmF+++23h/k//vGPMN96661r1qYy3N1Sf58rrbRS+Jjtt98+zFNrOkyePDnMU+P7y1p22WXDPPXaHHnkkWE+ZMiQME+N40/NjZ8aa5/6PWywwQZhnvo/rYXU+SqbbrppmN96661hvu6664Z56nczfHg81f/1118f5u4e//JrrPBkMXd/s9H1D8iWMBMRkSWAzhMQEalj6gREROqYOgERkTqmTkBEpI6pExARqWN1N5V0akrblEmT4hOjyw4F7dmzZ5iPGTMmzKOpfU888cSwbGsPBU3p1KlTqfLvvvtuK7Wk+ZZZZpkwv/zyeFaU1PTcN954Y5jvtNNOYZ6aPnjOnDlh/sgjj4T5VlttFebnnntumKemwk556qmnwnzcuHFhnhoGnBpqev7554d5aw4RTU3LPX/+/DA/5JBDwjwaxg3QvXv3MD/ttNPC/KabFu+AS+0JiIh0QGY21sxmm9nkRllvM5tgZi/nP3sV1VM0i2gPMxtlZi+Y2bv5ZUqe9azB8xARkea5CtitIjsVuNfd1wXuzW9XVbQncCPwPjDE3fu4ex9gaJ79uWyLRUSkNtz9IeC9ingYcHV+/Wpg76J6ijqBfu4+2t3/PaeCu89y99HA11IP0lTSIiItUzSVdMLK7j4TIP/Zt+gBRV8Mv2ZmJwNXu/tbecNWBg4F4slS0FTSIiIt1YSppGuiaE9gf6AP8KCZvWdm7wEPAL3JFpgREZH24y0zWxUg/zm76AFVOwF3f9/dT3H39d29d375hrufQhOONYmISJu6A2gY03oIEE/p20hLzhM4k2z5yQ5l6aXLrYWTmgK3rJ/+9Kdhvskmm4T5xRdfvEi2uMcTVyp7fsLbb7/dSi1pvq5du4b5rrvuWqqeVPnUuPzUdMPR+SEA06ZNC/NeveIRgKntps5PSI3j7927d5j/7ne/C/PU1NB//OMfw/ycc84J8wsuuCDMo2mXBw0aFJYdOHBgmKfG8Z900klhnvqdpX7HqfNnBgwYEOap6cCLmNn1wBBgRTObAZwBjAJuNLPDyBadKTxiU7UTMLNnUncBrXc2h4iIVOXu303ctWOZeor2BFYGdiUbEtqYAfGpgSIi0mEUdQJ/Abq7+9OVd5jZA63RIBERaTtVOwF3P6zKfQfWvjkiItKWNHeQiEgdUycgIlLH1AmIiNSxultPIDV2OCU1f3zKUUcdFeannHJKmE+dOjXMf/azn5Xa7uLQpUuXUuX//ve/t1JLmu+jjz4K89tuuy3Mhw0bFuap809Sfz+p8qnx+v379w/zlFmzZoV5qv2XXXZZmG+88cZhfvrpp4f5iBEjwvyqq64K86uvvjrMv/a1eGqy6HyD+++/PyybkvrdDx8+PMxTr0nnzuXePlPlU+eGFDGzscCewGx33zDPzgX+E/gcmAoMd/cPqtWjPQERkY7pKhadSnoCsKG7bwy8BMQr2TRStJ7ACmb2azO7xswOrLjvknLtFRGRWommknb3v7l7wxJpjwJrFNVTtCdwJdmJYTcDB5jZzWbWcJ794HJNFhGRNjQCuLuoUFEnsLa7n+rut7n7XsCTwH1m1qfag7SegIhIyzRzPYGGx44E5gPXFZUt+majq5kt5e4LAdz97HyiooeAeBYmtJ6AiEhLNXc9ATM7hOwL4x3dvfD9t2hPYBywQ0XDrgZOJPv2WURE2gkz2w04BdjL3T9pymOKpo04OZGPN7NflW+iiIjUQmIq6dOArsCEfGjro+7+w2r11N16AltuuWWp8rNnxwvzfOtb3wrz888/P8xTY4FPPPHEMH///cqJW2snNYd+akz4E0/EX+2svHK52cTLjqtuC6m95YMPPjjMl1tuuTBPzSG//vrrh/lZZ50V5jvuWGoWYGbMmBHm+++/f5hPnDgxzF966aUwT/1NlP393HjjjWE+Z86cMD/55PDzJ4cdtuh0ZiuuuGJYNrVmw7x588I8dc7IJ5/EH6hnzpwZ5iuttFKYf/55fPCk7LlIDRJTSV9Rth6tJyAiUse0noCISB3TegIiInVM6wmIiNQxzR0kIlLH1AmIiNSx9jdmr5VtscUWpcofdNBBYX788ceH+bLLLhvmEyZMCPNx48aVak8tfPbZZ2H+3HPPhXlqmGBqut+UBQsWlCq/OKWG7fXs2TPM99tvvzC//fbbwzw1hXJqiGhqCOd3vvOdMJ88eXKYpzz88MNhvs8++4R57969wzw1bDI1zDj1+zz77LPDfNNNNw3zSGo4bOp/+p133gnz1JDSslNMp/7+P/300zBvK6X3BMysb2s0REREms7MxprZbDNbpMc3s5PMzM0sPomikaKppHtXXPoAE82sl5nFHwVERKQtXMWi6wlgZmsCOwPTm1JJ0eGgd4DXKrLVyWYTdWBAUzYiIiK15e4PmVm/4K7fACcD8bHICkWHg04GXiSbjKi/u/cHZuTXkx2AppIWEWmZ5kwlbWZ7AW+4+6SmbqfoPIHzzOwG4Ddm9jrZBEWFU5NqKmkRkZYpO5W0mS0HjAR2KbOdwi+G3X2Gu+8L3E+2fmU8Q5SIiCxOawP9gUlmNo1sacknzWyVag9q8uggdx8HDAV2AjCz4c1uqoiI1JS7P+vufd29n7v3A2YAm7n7rGqPK3WegLvPAxqGI7XrqaRT44833HDDUvUMHDiwVPnUOOnvfjea9TU93e3ikJoyd9Kk+PDi8OHlPge0p+faXP/1X/8V5qNHjw7zoUOHhvnaa69darup16Ds+QApN910U5inpjpfY414/fILL7wwzJdffvlS202dz5OaqjqSOrdi+vR40Exzp3SulDoPp9ai9QTcXVNJi4jUg8R6Ao3v79eUejSVtIhIHdNU0iIidUxTSYuI1DHNIioiUsfUCYiI1DF1AiIidWyJXU9g9913D/PUfP9lzZ07N8xTY+fffffdmmy3PUmN/U4pM8a7vbrnnnvCPHUOROrvMCU1xrxHjx5hnprT3r3cbC1vvPFGmKfWkjjuuOPC/Jprrgnz1LoKW221VZjXYo79XXaJZ09I/S5T6wm0V2Y2FtgTmO3uGzbKjwF+DMwH7nT3k6vV05z1BPqUfYyIiNTcVVRMJW1mQ4FhwMbuvgFwXlElResJjGpYlMDMBpnZq8BjZvaamW3f3JaLiEjLuPtDwHsV8VHAKHf/LC8zu6ieoj2BPdy9YR/pXGB/d1+HbMGC88s1WUREWtl6wLZm9piZPWhmhevpFnUCS5tZw/cGy7r74wDu/hLQNfUgrScgItIyzVlPgOx73l7AYOCnwI2W+uKo0QOquRi4y8xGAePN7LfALcCOwNOpB2k9ARGRlim7nkBuBnCLZyMDJprZQmBF4O3UA4rOGL7IzJ4lO860Xl5+PeA24JclGyciIq3rNmAH4AEzWw/oQrZMcFLhEFF3fwB4oDLP1xNot1NJi4gsyaKppIGxwFgzmwx8DhziBeOFW3KeQLteT+DII4+sST2p39+OO+4Y5hMnTqzJdjuCfv36lSpfdux6e5Sao/6jjz4K89S6FqnfRerw7dJLL13cuFbwwQcfhPmZZ54Z5t26dQvz1DoenTp1CvNanFOyyirxglr77rtvmP/+979v8TbbUpWppA8qU4/WExARqWNaT0BEpI5pPQERkTqm9QREROqYZhEVEalj6gREROpYh59KeqONNgrzbbbZpib1p6YIfvPNN2tSf0eQGsaXGvaX0r1791o0Z7Faaqn4c1NqKubUdNszZswI89VXXz3MU0NHU+1ZsGBBmLe2efPmhfkTT8QzyOywww5hXjDTQZN8/PHHYT5+/PgW170k0Z6AiEgHZGZjzWx2fmJYQ7aJmT1qZk/n8w1tWVRP0VTSg8zsfjO71szWNLMJZvahmT1uZpvW4omIiEizXEXFegLAOcCZ7r4J8PP8dlVFewKX5JXcSXZewP+4ew/g1Pw+ERFZDBLrCTiwQn69B1B43LpwKml3v9vdr8+26TflG78XWCb1IE0lLSLSMs2cSvp44Fwze51sVbHTih5Q9MXwp2a2C1mP4ma2t7vflq8qlvzmSVNJi4i0TDOnkj4K+Im732xm+wFXADtVe0DRnsAPgROBEWTTRww1sw/IDgUdW7JxIiLSug4hW/MF4M9Ay74YdvdJ7r6ru+/u7i+4+3Hu3jNfwPjrLW+viIjU0JtAw/rvOwAvFz2gw08lfdJJJ4V5amx7Wakpf7/44oua1N8RpM6V+OSTT0rVs91224X5RRddFOafffZZqfrbwvDhw8N8vfXWC/PU7+600+JDtVdccUWYr7baamGe+jtfXOcJpJ7v4YcfHuaPPPJImK+00kphHv0/pv5Hx4wZE+bTpk0L844msZ7A4cCYfFngT4HC7xE0lbSISAdUZT2BzcvUo6mkRUTqmKaSFhGpY5pKWkSkjmnuIBGROqZOQESkjqkTEBGpY5YaY1uzDdRo2ojBgweH+cMPPxzmtTpP4PPPPw/zVVZZJczff79yINWS68or49NEDj300FL13HXXXWG+//77h/ncuXNL1Z/i7pb6+0ytffCnP/0pzLfffvswf+aZeJT1nnvuGeapdQlS56Wk/i+ef/75MG9vBg4cGObnnXdemK+44oqLZPPnzw/LDh06NMzb4/knEXdv+aIKTVA0lXQPMxtlZi+Y2bv5ZUqe9WyLBoqIyKLy6f3vz9+TnzOz4/K8dz7t/8v5z17V6ik6HHQj2TkCQ9y9j7v3AYbm2Z9r8URERKRZ5gMnuvs3gMHA0WY2kGyq/3vdfV3g3vx2UlEn0M/dR7v7rIbA3We5+2jgay1qvoiINJu7z3T3J/Prc4ApwOrAMODqvNjVwN7V6inqBF4zs5PN7N9TRJjZymZ2CvB66kFaT0BEpGXKrCdgZv2ATYHHgJXdfSZkHQXQt9p2is4Y3p9sV+LBvCNw4C3gDmC/1IO0noCISMs0dT0BM+sO3Awc7+4fmZX7PrnojOH3zexKYALwqLv/e1iGme0GjC+1NRERqRkzW5qsA7jO3RvWEXjLzFZ195lmtiowu1odRaODjgVuB34MTDazYY3u/lXzmy4iIi1h2Uf+K4Ap7n5Bo7vuIFtchvzn7dXqKTocdDiwubvPzY853WRm/dx9DNlMom3mv//7v8O8VucDpKR2rcruci2JRo0aFeb77RcfKVxuueXC/Nvf/naYX3fddWE+bNiwMG+OpZaKPwddfvnlYb7tttuG+bLLLhvmG2ywQZjfcsstYZ5qzwcffBDmH3/8cZh3FKl1D1LrCWy44YaLZG++Ga+l3rlz/PbWUc4TaIKtgYOBZ83s6Tw7HRgF3GhmhwHTgX2rVVLUCXRqOATk7tPMbAhZR7AWbdwJiIjIl9z9YdLvwzs2tZ6i0UGzzGyTRhudC+wJrAhs1NSNiIhI+1TUCXwfmNU4cPf57v59IF4rUEREOoyi0UEzqtz3v7VvjoiItCXNIioiUsfUCYiI1LGi0UFtrkePHmG+2267tXFLMnPmzCmV15MXX3wxzH/84x+HeWrYZWpY5JZbbtm8hpWQGurbt298pn1qiunUMMXUEObU1NMpa665ZpiPGDEizM8444xS9S8uffr0CfNBgwaFeTT1/QUXXBCUXKKGgraqopPFVjCzX5vZNWZ2YMV9l7Ru00REJKXKVNLn5tP/P2NmtxZN+190OOhKsnGoNwMHmNnNZtY1vy9ezUJERNpCairpCcCG7r4x8BJwWrVKijqBtd39VHe/zd33Ap4E7jOzeB9ORETaRGoqaXf/m7s3LLf2KLBGtXqKvhPoamZLufvCfENnm9kM4CEgPjhKNgUqkJz2VEREqgveRy/NZxaNyvbjy6mkGxsBxGui5oo6gXHADsA9DYG7X21mbwEXpR6kqaRFRFqmuVNJN8pHkh0yiifhylU9HOTuJwMzzGzHfEMN+Xjg2KLGiYhI60lMJY2ZHUI2xc/3PBpS1UjR6KBjyKYhPYZFp5I+u7kNFxGRlklNJZ2v9XIKsJe7f1JUT9HhoCNo46mkU2PGU/ncuXPD/N133w3ztdZaqybt0VTSaXfffXeYp16rFVZYIczfe++9mrUpJTWV8T333BPmqfNYzj47/kw0a9asML/vvvvCvGvXrmGectBBB4X5WWedFeap57u4fPJJ/B41f/78Juep80nmzZsX5ldddVWYL1y4MMzbsdRU0hcCXYEJ+fvUo+7+w1QlmkpaRKQDqjKV9F1l6tFU0iIidUxTSYuI1DFNJS0iUsc0i6iISB1TJyAiUsfUCYiI1DErOJls0QeY9XX32SXKl9rA0ksvHeZjxowJ89tuuy3M+/fvH+Z/+MMfyjSHP/0pnnbjgAMOKFXPkmjttdcO8wkTJoR56jW59dZbw/zII48M87fffrsJrSvm7pb6++zSpUv4mM6d46/RUmPSU84555wwP/HEE8M8dV7Kc889F+Ybb7xxmLe3sfDdunUL8+effz7Mv/a1rzW57tRzveKKK8L8Rz/6UZinzllobe7eJsPwi84Y7l1x6QNMNLNeZta7LRooIiKLSq0n0Oj+k8zMzWzFavUUnSz2DvBaRbY62ZTSDgwo23AREamJhvUEnjSz5YF/mtkEd3/ezNYEdgamF1VS9J3AycCLZHNQ9Hf3/sCM/Lo6ABGRxSS1nkB+92/I3r8LD8cXzSJ6HvAD4OdmdkHe2xRWamZHmNkTZvZEUVkREVlU4/fR/JJco6XxegJmthfwhrtPasp2Cheaz08Y29fM/pNs2bLlmvAYrScgItICzVlPgOwQ0Uhgl6Zup3CIqJmtb2Y7AvcDQ4Gd8ny3pm5ERERqL1hPYG2gPzDJzKaRLS35pJmtkqqjaHTQsTRaTwDYxd0n53f/qsXPQEREmiVaT8Ddn3X3vu7ez937ATOAzdw9ntOcgvMEzOxZ4JuN1xMArnH3MWb2lLtv2oSGLpbDQUOHDg3z1Dzuqd/DkCFDwvyhhx5qVrs6oq233jrMb7jhhjDv06dPmKfG/V93Xbz6XWuPaa92nsDicskll4T5BhtsEOaHHnpomP/rX/+qVZNKWWaZZcJ8lVXiD6Kpc0Q22WSTMP/ss88WyVLnbnTq1CnMU//r22yzTZj/4x//CPPWVnSegJltA/wdeBZo+Gc53d3valRmGjDI3d9J1aP1BEREOqAq6wk0LtOvqB6tJyAiUse0noCISB3TegIiInVMs4iKiNQxdQIiInWsdCeQzyQqIiJLgKrfCZjZKOA8d3/HzAYBNwIL87PUvu/uD7ZFI5tj6tSpYZ4ae37vvfeG+cMPP1yzNrV3qbHcd955Z6l69ttvvzD/y1/+UrpN9eboo48O89Q6G59//nlrNie5jsHo0aPD/Hvf+16Yp8by9+3bt1R7unbtukiWmu//rbfeCvPU76x79+6l2rK45TOF/hFYhew8gUvdfUx+3zHAj8mmkbjT3U9O1VN0nsAe7n5qfv1cYH93f9zM1gP+HzCoZU9DRESaKZxKGlgZGAZs7O6fmVnVnraoE1jazDq7+3xgWXd/HMDdXzKzRbtkERFpE+4+E5iZX59jZg1TSR8OjHL3z/L7qq4EWfSdwMXAXWa2AzDezH5rZtuZ2ZnA06kHaSppEZGWae5U0sB6wLZm9piZPWhmW1TbTtF5Ahfl8wcdlVfcOf95G/B/qzxOU0mLiLRAc6aSdvePzKwz0AsYDGwB3GhmAzwxaVLhegJkZwxfCjzWMI9QvuHdgPFNeLyIiLSCYCppyGYOvSV/059oZgvJpvp5O6qj1FTSZjas0d2aSlpEZDGJppLO3QbskJdZD+hCtl58qGhP4HBg88ZTSZtZv3wYUrueRXT27Pi7kIsuuijMzznnnDBv7emM25MRI0aEeY8ePcI8NRxQQ0GbLzXNcWsPBU3Ze++9w/yEE04I89T0zan2X3XVVaXy6P/x7bfDD7hMnx6vsb5gwYIwj6apbue2Bg4GnjWzp/PsdGAsMNbMJgOfA4ekDgWBppIWEemQCqaSPqip9WgqaRGROqappEVE6pimkhYRqWOaRVREpI6pExARqWPqBERE6pm7t9kFOELla1O+PbVlSSjfHtuk8h2jLW1RvjUvbbsxeELla1O+PbVlSSjfHtuk8h2jLW1RvjUvOhwkIlLH1AmIiNSxtu4ECqdFVfl2UXc9lm+Lbah87cq3p7a0RflWY/nxKRERqUM6HCQiUsfUCYiI1DF1AiJkK+WZ2Ytm9oqZnVpQdk0zu9/MppjZc2Z2XBPq72RmT5lZkxZbMLOeZnaTmb2Qb+ebVcr+JG/HZDO73syWCcqMNbPZ+RzzDVlvM5tgZi/nP3sVlD83b88zZnarmfVMlW30mJPMzM1sxWp15/kx+WvwnJmdU628mW1iZo+a2dP5+rtbNrovfH1Sz7dK+dTzrfr6N37O1cqmnm+ba83xp8D6wCnAhcCY/Po3CsrvCHSvyHdrwrb+WHD/VsAK+fVlgTOBccBooEdF2S5kM6julN8+EPgdcDSw9OIe16tLbS9AJ2AqMCB/7ScBA6uUXxXYLL++PPBStfJ5uROA/wf8pYltuhr4QX69C9AzUW514F/AsvntG4FDg3LbAZsBkxtl5wCn5tdPBUYXlN8F6JxfH91QPiqb52sCfwVeA1YsqHsocA/QNb/dt6D834Dd8+vfBh4oen1Sz7dK+dTzTb7+lc+5St3J59vWl1bbEzCzU4AbyBY9mAg8nl+/PvqkVWYpSzO7o+IyDvg/DbcTTRoLfJJfHwP0IHthPwGurCh7JbAHcJyZXQPsCzxGtmjz5U36BUhNmVnfkuX7lCi+JfCKu7/q7p+T/d0OSxV295nu/mR+fQ4whezNONWWNcj+npr0t2NmK5C98V2Rb+Nzd/+gykM6A8tatsD4csCbQZsfAt6riIeRdTbkP/euVt7d/+bu8/ObjwJrVKkb4DfAycBXRp8kyh8FjHL3z/IyswvKO7BCfr0HjZ5zldcnfL6p8lWeb7XX/yvPuUrZ5PNtc63Vu5D1eIt8aib7VPNykD9LvgcA9AOeAI7Lbz9VUfZJ4FpgCLB9/nNmfn37RHumNH58xX1PV9x+Jv/ZGXiLbIU1yDqxZxZXjx08pyZ/egD61HC7PYBRwAvAu/llSp71DMqvAPwauAY4sOK+S4LyvSsufYBpQC+gd1B+FPknTWAQ8CrwCtmnsfDvoeLx+wCXN7p9MPC7Jv4u+gHTyfcyE2VuAjbP/04L9wSATcg+OF0FPEXWeXSrUv44YC7ZQuLXFbS18afpDyruf79a+Yr7xgEHVal7L2BMfn0ajfYEEuWfJts7fwx4ENiioPw38t/768AbwFpFr0/R8632elY+30T9TXnODWWrPt+2vLTmdwILgdWCfNX8vkpfWcqS7B9mdzO7gEWXUBsE/BMYCXzo7g8A89z9QXd/MNGeyWY2PL8+ycwGwb8XYv6iouxSZtaFbPdtObI3PYCuwNJR5WbWw8xG5ccQ380vU/KsZ1B+BTP7tZldY2YHVtx3SVC+d8WlDzDRzHqZWe+KsqMajsGa2SAzexV4zMxeM7Ptg7oH5cctr82PYU4wsw/N7HEz2zR4ujcC7wND3L2Pu/ch2719H/hzUP5KstfwZuAAM7vZzLrm9w0Oyr9D9vo2XJ4g+/T0ZH690h7u3rCQ9rnA/u6+DrAzcH5QvlK0RF/h2Gkz6072nI53948SZfYEZrv7P5vQjgadyQ5//N7dNwU+Jjt8EdXfi+wTbn+y/7duZtbkpQWbw8xGAvOB6xL3L0f2v/nzEtV2JuvkBwM/BW40s2pL2B4F/MTd1wR+Qr7XVNGOwtenKeVTz7dx+fz+5HMO6i77fFtPa/UuwG5kn8buJjsx4lJgfJ4tcowfuA/YpCLrDPwRWJDYxhpkbzq/A6YXtKcH2SerqWS97xdknxgfBP6jouxP8vteA44F7gUuI9tbOSNR/1/JvvNYpVG2Sp5NCMrfTPYJdm/gjvx2w/HBJ4PyC8mO/Ta+fJH/fLWi7LONrt9P/ikDWI9gzhKyT527A98l+2S1T57vCDwSlH+xyu95kftYdE9rJPC/ZJ/wo+d6Uv63slGj7F9VtvkCXx67fTT1u6jy+G8Cf210+zTgtILHLJ2/5icUlPs1MIPsk+EsssOP1xY8ZhVgWqPb2wJ3JsruC1zR6Pb3Cfau8vv68dVP0y8Cq+bXV6187SrL59khwCPAcqmyZEvPzs6f8zSyN8jpFf8blW0ZT/ahouH2VGClKuU/5MvznAz4qOj1qfZ8U69nlef7lfLVnnOiLVWfb1teWrfybPTRYOA7ZLvcg8kPrQRl12j8R1Jx39YF29kD+FUT27Q88B9ku+crVym3GrBafr1n3v4tq5RvN2+MlHxTpNHhNio6UyoOxeXZ38iOe67cKFuZrMO7Jyg/BViqIjsEeA54rcrfw5+BC/LX7NWoXF72mLxNOwC/AH5Ldkz9TOCaJvxNdCbr9Pvz5RfDG1Qpb2QfTn5b8v9hCE3/YvjvwNfz678Azk2U2yr/PS6Xt+tq4JhE2X589Y30XL76Rek5BeV3A54neLOqLFtx3zSKDwf9EDgrv74e2YcRq1J+CvmbKNmHlX8WvT6p51ulfPh8m/L6NzznKnVXfb5teWnzDS6pF9rRGyMl3xTJPunsQvap8jVg7zzfnnjPoRfZl+ovkB0Cei9/PqOJj9mfQz7SqiLfjeD7oYoy/0n2pdysgnJDgD+RHUN/FrgLOIImjuYiG2HyEtknspEFZbchO1z0DNmx3aeBbzdhG0NoeiewCdmhr2eA24BeVcqemb8Wk8m+d+kalLme7HuzL8j2TA4j+8BxL/By/rN3QflX8jerhuf8h1TZim1P46ujg6K6u5B9zzeZ7LDfDgXltyE7VDiJbM9+86LXJ/V8q5RPPd/C158vO4FU3cnn29aXxbLRJfHCV98Y3+Orb4yL/APTym+MpN8UOwdl/4Nsd/VusmG6Y4APyDqkbyXqXx/YiSYO5yU9/Hf3ovJkQ3o3bGb9hcOLddGlni+LvQH1cAGG17p8xRtjk+uvRVvIvid5kewT6jRgWKP7okNZx5QsX7b+UuV10UWXLy+LvQH1cKHgS+u2LF+LuikxnLc9ltdFF12+vHRGasLMnkndRfbdQJuVb+22UDGc18yGADeZ2VrEwy3bW3kRyakTqJ2VgV3JvihtzIB/tHH51m7LLDPbxN2fBnD3ufl4+LFkQ+Xae3kRyakTqJ2/kB2SeLryDjN7oI3Lt3Zbvk82DvrfPDu9/vtm9j8doLyI5LSojIhIHdNU0iIidUydgIhIHVMnICJSx9QJiIjUsf8P6h6QPrKpkwAAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# cluster 9\n", + "plt.figure()\n", + "fig, (ax,ax2) = plt.subplots(ncols=2)\n", + "fig.subplots_adjust(wspace=0.01)\n", + "sns.heatmap(x_train[0], cmap = \"gist_gray\", cbar = False, ax = ax)\n", + "sns.heatmap(x_train[7], cmap = \"gist_gray\", cbar = False, ax = ax2)\n", + "ax2.yaxis.tick_right()\n", + "ax2.tick_params(rotation=0)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "e7d36a15", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# cluster 10\n", + "plt.figure()\n", + "fig, (ax,ax2) = plt.subplots(ncols=2)\n", + "fig.subplots_adjust(wspace=0.01)\n", + "sns.heatmap(x_train[19], cmap = \"gist_gray\", cbar = False, ax = ax)\n", + "sns.heatmap(x_train[30], cmap = \"gist_gray\", cbar = False, ax = ax2)\n", + "ax2.yaxis.tick_right()\n", + "ax2.tick_params(rotation=0)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "2786386d", + "metadata": {}, + "source": [ + "## 2. Models" + ] + }, + { + "cell_type": "markdown", + "id": "3fc3e521", + "metadata": {}, + "source": [ + "### 2.1 Kmeans" + ] + }, + { + "cell_type": "markdown", + "id": "9bef3c89", + "metadata": {}, + "source": [ + "###    2.1.1 Fitting Models" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "289d8d9e", + "metadata": {}, + "outputs": [], + "source": [ + "# import KMeans from sklearn \n", + "from sklearn.cluster import KMeans\n", + "\n", + "# assigned 10 clusters \n", + "# fit() to compute clustering for K-Means\n", + "# fit_predict() to make predictions\n", + "kmeans = KMeans(n_clusters = 10).fit(x_trainf)\n", + "y_pred_kmean = kmeans.predict(x_testf)" + ] + }, + { + "cell_type": "markdown", + "id": "67ccad57", + "metadata": {}, + "source": [ + "###    2.2.2 Clustering results evaluations" + ] + }, + { + "cell_type": "markdown", + "id": "f2e23193", + "metadata": {}, + "source": [ + "####     NMI (Normaliszed Mutual Information)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "955c19c9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test score:0.3075\n" + ] + } + ], + "source": [ + "from sklearn.metrics.cluster import normalized_mutual_info_score\n", + "print(\"Test score:{:.4f}\".format(normalized_mutual_info_score(y_test, y_pred_kmean,average_method='arithmetic')))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "40e0dea9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test score:0.3204\n" + ] + } + ], + "source": [ + "from sklearn.metrics.cluster import normalized_mutual_info_score\n", + "print(\"Test score:{:.4f}\".format(normalized_mutual_info_score(y_test, y_pred_kmean,average_method='min')))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "01329398", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test score:0.3077\n" + ] + } + ], + "source": [ + "from sklearn.metrics.cluster import normalized_mutual_info_score\n", + "print(\"Test score:{:.4f}\".format(normalized_mutual_info_score(y_test, y_pred_kmean,average_method='geometric')))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "ac0103e6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test score:0.2956\n" + ] + } + ], + "source": [ + "from sklearn.metrics.cluster import normalized_mutual_info_score\n", + "print(\"Test score:{:.4f}\".format(normalized_mutual_info_score(y_test, y_pred_kmean,average_method='max')))" + ] + }, + { + "cell_type": "markdown", + "id": "5d7c0620", + "metadata": {}, + "source": [ + "####     ARI (Adjusted Rand Index)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "779c4a21", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test score:0.1616\n" + ] + } + ], + "source": [ + "from sklearn.metrics.cluster import adjusted_rand_score\n", + "print(\"Test score:{:.4f}\".format(adjusted_rand_score(y_test, y_pred_kmean)))" + ] + }, + { + "cell_type": "markdown", + "id": "eaf905f4", + "metadata": {}, + "source": [ + "####     Confusion Matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "49e50762", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Confusion matrix: \n", + "[[259 106 0 60 7 3 523 21 3 18]\n", + " [170 0 79 2 6 75 1 95 0 572]\n", + " [229 4 137 16 14 355 4 8 14 219]\n", + " [549 108 3 9 3 3 1 9 256 59]\n", + " [ 83 5 68 11 108 38 73 414 2 198]\n", + " [ 62 251 56 1 0 411 6 8 10 195]\n", + " [ 81 0 560 32 4 24 5 106 3 185]\n", + " [ 38 1 14 391 27 116 9 314 19 71]\n", + " [401 19 75 2 1 361 4 6 0 131]\n", + " [222 1 14 10 301 191 1 22 0 238]]\n" + ] + } + ], + "source": [ + "from sklearn.metrics import confusion_matrix\n", + "kmeans_confusion = confusion_matrix(y_test,y_pred_kmean)\n", + "print('Confusion matrix: \\n{}'.format(kmeans_confusion))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "ba637eb3", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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stlsyszMtDqKJGnhwoWy2Wxum8PhsDqWy2effab7779fHTp0UJs2bXTzzTeruLjY6liSpB/84Aem753NZtPMmTOtjiZJunTpkp588kklJCQoIiJC119/vZ5++mldvnzZ6miSpOrqamVmZqpbt26KiIhQWlqa9u7da3UsNNL3qkAIptdkejp37pz69u2rVatWWR3FpKioSDNnztSePXtUWFioS5cuKSMjQ+fOnbM6miSpc+fOWrx4sfbt26d9+/bpjjvu0OjRo1VSUmJ1NJO9e/dqzZo16tOnj9VR3Nx0000qLS11bQcPHrQ6kiSpoqJCgwYNUlhYmN566y19/PHHWrZsma655hqro0n69t/nP3/fvnuAzY9+9COLk31ryZIl+q//+i+tWrVKhw8f1tKlS/WLX/xCzz//vNXRJEkPPfSQCgsLtWHDBh08eFAZGRkaNmyYPvvsM6ujoTGa/e0PTejf/u3fjOnTp7vt69Wrl/H4449blMg7ScaWLVusjlGv8vJyQ5JRVFRkdZR6tWvXznjllVesjuGmurraSExMNAoLC4309HRj9uzZVkcyDOPbF8X07dvX6hhezZ8/37jtttusjtFos2fPNrp3725cvnzZ6iiGYRjG3XffbUyZMsVt39ixY43777/fokT/cP78eSMkJMT4/e9/77a/b9++Rk5OjkWp4I/vTQfhu9dkZmRkuO237DWZLVhlZaUkqX379hYnMaurq1NBQYHOnTvn9jKTYDBz5kzdfffdGjZsmNVRTI4dO6b4+HglJCRowoQJOnHihNWRJElbt25VamqqfvSjH6lTp07q16+fXn75ZatjeVVbW6uNGzdqypQpsgXyXcBX4bbbbtMf//hHHT16VJL017/+Vbt27dJdd91lcbJvxx91dXVq3bq12/6IiAjt2rXLolTwx/fmSYpfffWV6urqTC+0iI2NNb34AvUzDENz5szRbbfdpqSkJKvjuBw8eFADBw7UhQsX1LZtW23ZskU33nij1bFcCgoKVFxcrH379lkdxWTAgAF69dVXdcMNN+iLL77Qs88+q7S0NJWUlKhDhw6WZjtx4oRWr16tOXPm6IknntAHH3ygn//857Lb7frxj39saTZPb7zxhr755hs9+OCDVkdxmT9/viorK9WrVy+FhISorq5OixYt0n333Wd1NEVFRWngwIF65pln1Lt3b8XGxurXv/61/vKXvygxMdHqeGiE702B8B3Pyt4wjKCp9luCRx55RB999FHQVfg9e/bUgQMH9M033+i1117T5MmTVVRUFBRFwunTpzV79mxt377d9NtSMBgxYoTrfycnJ2vgwIHq3r278vPzNWfOHAuTSZcvX1Zqaqpyc3MlSf369VNJSYlWr14ddAXC2rVrNWLECMXHx1sdxWXz5s3auHGjNm3apJtuukkHDhxQZmam4uPjNXnyZKvjacOGDZoyZYquu+46hYSE6JZbbtHEiRP14YcfWh0NjfC9KRCC7TWZLdGsWbO0detW7dy5U507d7Y6jpvw8HD16NFDkpSamqq9e/fqueee00svvWRxMqm4uFjl5eVKSUlx7aurq9POnTu1atUqOZ1OhYSEWJjQXWRkpJKTk3Xs2DGroyguLs5U5PXu3VuvvfaaRYm8+/TTT7Vjxw69/vrrVkdx89hjj+nxxx/XhAkTJH1bAH766afKy8sLigKhe/fuKioq0rlz51RVVaW4uDiNHz9eCQkJVkdDI3xv7kEIttdktiSGYeiRRx7R66+/rnfeeadF/J/XMAw5nU6rY0iShg4dqoMHD+rAgQOuLTU1VZMmTdKBAweCqjiQJKfTqcOHDysuLs7qKBo0aJBpSe3Ro0cteTGNL+vWrVOnTp109913Wx3Fzfnz59Wqlft/xkNCQoJmmeN3IiMjFRcXp4qKCr399tsaPXq01ZHQCN+bDoIUXK/J9HT27FkdP37c9fHJkyd14MABtW/fXl27drUw2bc3123atEm/+93vFBUV5erCxMTEKCIiwtJskvTEE09oxIgR6tKli6qrq1VQUKD33ntP27ZtszqapG9nrZ73a0RGRqpDhw5BcR9HVlaWRo4cqa5du6q8vFzPPvusqqqqguI3zEcffVRpaWnKzc3VuHHj9MEHH2jNmjVas2aN1dFcLl++rHXr1mny5MkKDQ2u/2SOHDlSixYtUteuXXXTTTdp//79Wr58uaZMmWJ1NEnS22+/LcMw1LNnTx0/flyPPfaYevbsqZ/85CdWR0NjWLqGogm88MILRrdu3Yzw8HDjlltuCZqleu+++64hybRNnjzZ6mhec0ky1q1bZ3U0wzAMY8qUKa5/p9dee60xdOhQY/v27VbH8imYljmOHz/eiIuLM8LCwoz4+Hhj7NixRklJidWxXN58800jKSnJsNvtRq9evYw1a9ZYHcnN22+/bUgyjhw5YnUUk6qqKmP27NlG165djdatWxvXX3+9kZOTYzidTqujGYZhGJs3bzauv/56Izw83HA4HMbMmTONb775xupYaCRe9wwAAEy+N/cgAACAwKFAAAAAJhQIAADAhAIBAACYUCAAAAATCgQAAGBCgQAAAEwoEAAAgAkFAgAAMKFAAAAAJhQIAADAhAIBAACY/D83AL1SE8bm4gAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# visualize the confusion matrix, the deeper color represents the greater values\n", + "import seaborn as sns\n", + "sns.heatmap(kmeans_confusion, annot=False, cmap='Blues')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "ab647317", + "metadata": {}, + "source": [ + "### 2.2 PCA (Principal component analysis)" + ] + }, + { + "cell_type": "markdown", + "id": "06872c16", + "metadata": {}, + "source": [ + "###    2.2.1 Scatter Plots in 2D and 3D" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "64add44b", + "metadata": {}, + "outputs": [], + "source": [ + "# import PCA from sklearn\n", + "from sklearn.decomposition import PCA\n", + "\n", + "# implement PCA and keep the first two principal components only\n", + "pca = PCA(n_components = 2, whiten = True)\n", + "pca.fit(x_trainf)\n", + "\n", + "# transform data to reduce dimensions\n", + "x_train_pca = pca.transform(x_trainf)\n", + "x_test_pca = pca.transform(x_testf)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "fc524704", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "%matplotlib inline\n", + "plt.scatter(x_train_pca[:,0], x_train_pca[:,1], c = y_train)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "8baaf415", + "metadata": {}, + "outputs": [], + "source": [ + "# implement PCA and keep the first three principal components only\n", + "pca3 = PCA(n_components = 3, whiten = True)\n", + "pca3.fit(x_trainf)\n", + "# transform data\n", + "x_train_pca3 = pca3.transform(x_trainf)\n", + "x_test_pca3 = pca3.transform(x_testf)" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "a7c2b5b8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from mpl_toolkits.mplot3d import Axes3D\n", + "plt.figure(figsize=(8,8))\n", + "ax = plt.axes(projection=\"3d\")\n", + "ax.scatter3D(x_train_pca3[:,0], x_train_pca3[:,1],x_train_pca3[:,2], c = y_train)\n", + "ax.view_init(10, 60)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "9f414ded", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.10869168 0.05363875]\n", + "[0.10869168 0.05363875 0.0409124 ]\n" + ] + } + ], + "source": [ + "print(pca.explained_variance_ratio_)\n", + "print(pca3.explained_variance_ratio_)" + ] + }, + { + "cell_type": "markdown", + "id": "4b55fa60", + "metadata": {}, + "source": [ + "###    2.2.2 KMeans using PCA" + ] + }, + { + "cell_type": "markdown", + "id": "5fbf7294", + "metadata": {}, + "source": [ + "### ARI" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "4b695f26", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test score:0.0848\n" + ] + } + ], + "source": [ + "from sklearn.cluster import KMeans\n", + "\n", + "# implement KMeans on transformed data\n", + "kmeans = KMeans(n_clusters = 10).fit(x_train_pca)\n", + "y_pred_trans_kmean = kmeans.predict(x_test_pca)\n", + "test_score = adjusted_rand_score(y_test, y_pred_trans_kmean)\n", + "print(\"Test score:{:.4f}\".format(test_score))" + ] + }, + { + "cell_type": "markdown", + "id": "42ef2a8d", + "metadata": {}, + "source": [ + "### NMI" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "981f11be", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test score:0.1828\n" + ] + } + ], + "source": [ + "test_score = normalized_mutual_info_score(y_test, y_pred_trans_kmean)\n", + "print(\"Test score:{:.4f}\".format(test_score))" + ] + }, + { + "cell_type": "markdown", + "id": "54dc4e2d", + "metadata": {}, + "source": [ + "####     Confusion Matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "57eb2033", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Confusion matrix: \n", + "[[ 1 2 398 105 41 34 103 82 234 0]\n", + " [369 99 23 0 61 15 73 28 18 314]\n", + " [337 39 33 5 146 5 38 114 7 276]\n", + " [ 13 3 207 170 187 7 99 283 31 0]\n", + " [ 77 198 38 1 165 134 188 36 35 128]\n", + " [331 51 55 213 34 0 16 23 9 268]\n", + " [333 129 4 0 66 45 83 18 8 314]\n", + " [ 18 185 32 2 190 209 150 177 15 22]\n", + " [107 104 71 23 148 6 82 161 17 281]\n", + " [119 138 12 1 266 40 124 162 4 134]]\n" + ] + } + ], + "source": [ + "from sklearn.metrics import confusion_matrix\n", + "kmeans_pca_confusion = confusion_matrix(y_test,y_pred_kmean_pca)\n", + "print('Confusion matrix: \\n{}'.format(kmeans_pca_confusion))" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "3eef5fab", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import seaborn as sns\n", + "sns.heatmap(kmeans_pca_confusion, annot=False, cmap='Blues')" + ] + }, + { + "cell_type": "markdown", + "id": "0ec36a9a", + "metadata": {}, + "source": [ + "### 2.3 MiniBatchKMeans" + ] + }, + { + "cell_type": "markdown", + "id": "78ddd888", + "metadata": {}, + "source": [ + "###    2.3.1 Fitting Models" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "c4f713ae", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.cluster import MiniBatchKMeans\n", + "from sklearn.metrics.cluster import normalized_mutual_info_score\n", + "from sklearn.metrics.cluster import adjusted_rand_score\n", + "\n", + "# implement Mini-Batch K-Means\n", + "# assign 10 clusters \n", + "kmeans = MiniBatchKMeans(n_clusters=10,batch_size=5120).fit(x_train_pca)\n", + "y_pred_mbkm = kmeans.predict(x_test_pca)" + ] + }, + { + "cell_type": "markdown", + "id": "d5af13fa", + "metadata": {}, + "source": [ + "###    2.3.2 Clustering results evaluations" + ] + }, + { + "cell_type": "markdown", + "id": "a14ff10a", + "metadata": {}, + "source": [ + "####     NMI (Normaliszed Mutual Information) and ARI (Adjusted Rand Index)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "178c9a4a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "NMI:0.1729\n", + "ARI:0.0817\n" + ] + } + ], + "source": [ + "print(\"NMI:{:.4f}\".format(normalized_mutual_info_score(y_test, y_pred_mbkm,average_method='arithmetic')))\n", + "print(\"ARI:{:.4f}\".format(adjusted_rand_score(y_test, y_pred_mbkm)))" + ] + }, + { + "cell_type": "markdown", + "id": "05d87e3f", + "metadata": {}, + "source": [ + "####     Confusion Matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "91486cd4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Confusion matrix: \n", + "[[127 27 1 80 238 2 156 310 0 59]\n", + " [ 2 60 459 20 76 75 56 9 229 14]\n", + " [ 2 96 418 9 43 22 158 5 209 38]\n", + " [112 112 11 16 129 2 377 81 0 160]\n", + " [ 2 241 128 156 112 161 60 27 105 8]\n", + " [185 32 416 0 17 26 31 32 201 60]\n", + " [ 0 76 395 55 56 83 28 1 270 36]\n", + " [ 2 179 23 186 101 201 228 8 24 48]\n", + " [ 7 96 172 9 95 56 204 29 258 74]\n", + " [ 0 260 139 45 80 90 167 0 130 89]]\n" + ] + } + ], + "source": [ + "mbkm_confusion = confusion_matrix(y_test,y_pred_mbkm)\n", + "print('Confusion matrix: \\n{}'.format(mbkm_confusion))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "c9ec58f1", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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hMprMs0++ugjjRkzRklJSXI4HHrrrbfsjuThcrnUv39/xcbGqkOHDho3bpwOHjxodyyP1atXq3fv3mrdurVat26tgQMH6r333rM7Vr1cLpccDocyMjLsjiJJysnJkcPh8NoSExPtjuVx6tQp3XvvvYqPj1fLli110003qbi42O5YkqSf/vSnlq+dw+HQrFmz7I4mSbp48aKefPJJde3aVdHR0erWrZuefvpp1dXV2R1NklRVVaWMjAx16dJF0dHRGjRokHbt2mV3LDTSVVUghNJrMs3Onj2rPn36aNWqVXZHsdi2bZtmzZqlnTt3qqioSBcvXlR6errOnj1rdzRJUqdOnbR48WLt3r1bu3fv1q233qq77rpLBw4csDuaxa5du7RmzRr17t3b7ihebrzxRpWUlHi2ffv22R1JklReXq7BgwcrIiJC7733nj7//HM9//zzatOmjd3RJP3w5/m/v24/PsDmF7/4hc3JfrBkyRL99re/1apVq/TFF19o6dKleu6557Ry5Uq7o0mSHnjgARUVFWnDhg3at2+f0tPTNXLkSJ06dcruaGiMK/72hyb0L//yL8aMGTO89vXo0cN44oknbErkmyRj8+bNdseoV1lZmSHJ2LZtm91R6tW2bVvj1VdftTuGl6qqKiMlJcUoKioyhg0bZsyZM8fuSIZh/PCimD59+tgdw6f58+cbQ4YMsTtGo82ZM8e49tprjbq6OrujGIZhGHfccYcxbdo0r33jx4837r33XpsS/Y9z584Z4eHhxh//+Eev/X369DGys7NtSoVAXDUdhB9fk5menu6137bXZDZjFRUVkqR27drZnMSqtrZW+fn5Onv2rNfLTELBrFmzdMcdd2jkyJF2R7E4fPiwkpKS1LVrV9199906evSo3ZEkSW+//bb69eunX/ziF+rQoYP69u2rV155xe5YPtXU1Gjjxo2aNm2aHMF8F/BlGDJkiP70pz/p0KFDkqRPP/1U27dv1+23325zsh/GH7W1tYqKivLaHx0dre3bt9uUCoG4ap6k+N1336m2ttbyQouEhATLiy9QP8MwlJmZqSFDhig1NdXuOB779u3TwIEDdf78ebVq1UqbN2/WDTfcYHcsj/z8fBUXF2v37t12R7EYMGCAXnvtNV1//fX65ptv9Oyzz2rQoEE6cOCA4uPjbc129OhRrV69WpmZmVqwYIE++eQT/fu//7ucTqfuv/9+W7OZvfXWWzp9+rSmTp1qdxSP+fPnq6KiQj169FB4eLhqa2u1aNEi3XPPPXZHU2xsrAYOHKhnnnlGPXv2VEJCgn73u9/pr3/9q1JSUuyOh0a4agqEH5kre8MwQqbabw4eeeQRffbZZyFX4Xfv3l179+7V6dOn9cYbb2jKlCnatm1bSBQJJ06c0Jw5c1RYWGj5aSkUjB492vPvvXr10sCBA3XttdcqLy9PmZmZNiaT6urq1K9fP+Xm5kqS+vbtqwMHDmj16tUhVyCsXbtWo0ePVlJSkt1RPF5//XVt3LhRmzZt0o033qi9e/cqIyNDSUlJmjJlit3xtGHDBk2bNk3XXHONwsPDdfPNN2vSpEn629/+Znc0NMJVUyCE2msym6PZs2fr7bff1kcffaROnTrZHcdLZGSkrrvuOklSv379tGvXLr3wwgt6+eWXbU4mFRcXq6ysTGlpaZ59tbW1+uijj7Rq1Sq53W6Fh4fbmNBbTEyMevXqpcOHD9sdRR07drQUeT179tQbb7xhUyLfvvrqK23ZskVvvvmm3VG8PP7443riiSd09913S/qhAPzqq6/kcrlCokC49tprtW3bNp09e1aVlZXq2LGjJk6cqK5du9odDY1w1axBCLXXZDYnhmHokUce0ZtvvqkPPvigWfzPaxiG3G633TEkSSNGjNC+ffu0d+9ez9avXz9NnjxZe/fuDaniQJLcbre++OILdezY0e4oGjx4sOWW2kOHDtnyYhp/1q1bpw4dOuiOO+6wO4qXc+fOKSzM+9t4eHh4yNzm+KOYmBh17NhR5eXlev/993XXXXfZHQmNcNV0EKTQek2m2ZkzZ3TkyBHPr48dO6a9e/eqXbt26ty5s43Jflhct2nTJv3hD39QbGyspwsTFxen6OhoW7NJ0oIFCzR69GglJyerqqpK+fn5+vDDD1VQUGB3NEk/zFrN6zViYmIUHx8fEus45s6dqzFjxqhz584qKyvTs88+q8rKypD4CfPRRx/VoEGDlJubqwkTJuiTTz7RmjVrtGbNGrujedTV1WndunWaMmWKWrQIrW+ZY8aM0aJFi9S5c2fdeOON2rNnj5YtW6Zp06bZHU2S9P7778swDHXv3l1HjhzR448/ru7du+uXv/yl3dHQGLbeQ9EEXnzxRaNLly5GZGSkcfPNN4fMrXpbt241JFm2KVOm2B3NZy5Jxrp16+yOZhiGYUybNs3zZ/qTn/zEGDFihFFYWGh3LL9C6TbHiRMnGh07djQiIiKMpKQkY/z48caBAwfsjuXxzjvvGKmpqYbT6TR69OhhrFmzxu5IXt5//31DknHw4EG7o1hUVlYac+bMMTp37mxERUUZ3bp1M7Kzsw232213NMMwDOP11183unXrZkRGRhqJiYnGrFmzjNOnT9sdC43E654BAIDFVbMGAQAABA8FAgAAsKBAAAAAFhQIAADAggIBAABYUCAAAAALCgQAAGBBgQAAACwoEAAAgAUFAgAAsKBAAAAAFhQIAADA4v8HO52l+2LGvKcAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.heatmap(mbkm_confusion, annot=False, cmap='Blues')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "e7bb3593", + "metadata": {}, + "source": [ + "### 2.4 Birch" + ] + }, + { + "cell_type": "markdown", + "id": "103a4fad", + "metadata": {}, + "source": [ + "###    2.4.1 Fitting Models" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "296530dd", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.cluster import Birch\n", + "\n", + "# implement birch\n", + "brc = Birch(n_clusters = 10).fit(x_train_pca)\n", + "y_pred_brc = brc.predict(x_test_pca)" + ] + }, + { + "cell_type": "markdown", + "id": "c21d97b8", + "metadata": {}, + "source": [ + "###    2.4.2 Clustering results evaluations" + ] + }, + { + "cell_type": "markdown", + "id": "cac10047", + "metadata": {}, + "source": [ + "####     NMI (Normaliszed Mutual Information) and ARI (Adjusted Rand Index)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "857fee12", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "NMI:0.1808\n", + "ARI:0.0910\n" + ] + } + ], + "source": [ + "from sklearn.metrics.cluster import normalized_mutual_info_score\n", + "from sklearn.metrics.cluster import adjusted_rand_score\n", + "print(\"NMI:{:.4f}\".format(normalized_mutual_info_score(y_test, y_pred_brc,average_method='arithmetic')))\n", + "print(\"ARI:{:.4f}\".format(adjusted_rand_score(y_test, y_pred_brc)))" + ] + }, + { + "cell_type": "markdown", + "id": "81466971", + "metadata": {}, + "source": [ + "####     Confusion Matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "b89536eb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Confusion matrix: \n", + "[[ 41 451 48 2 94 0 1 73 289 1]\n", + " [230 39 5 16 0 0 603 35 72 0]\n", + " [171 33 1 2 10 0 545 12 226 0]\n", + " [101 132 1 2 158 0 15 32 559 0]\n", + " [502 63 15 71 2 1 131 116 98 1]\n", + " [137 43 0 0 218 0 538 5 59 0]\n", + " [275 17 10 27 0 1 573 45 50 2]\n", + " [362 43 7 156 3 0 25 91 309 4]\n", + " [250 83 0 6 38 0 321 17 284 1]\n", + " [439 26 2 18 3 0 187 43 282 0]]\n" + ] + } + ], + "source": [ + "brc_confusion = confusion_matrix(y_test,y_pred_brc)\n", + "print('Confusion matrix: \\n{}'.format(brc_confusion))" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "c75904f9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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/rjWr1+v2267zX19xIgRWrlypebNm9fuffLz85Wbm+txblXZJ/5EAQCg07BAz88CISIiQl988YUGDBigTz/9VCNHjvS4PnLkSI8piLbY7XbZ7XbPIOHh/kQBAKDTdOepgUDxq0iaNGmSNm7cKEnKysrS73//e4/r//Vf/6XLLrsscOkAAPhfxOl0asSIEYqKilK/fv00ffp0HT582GOMYRgqKChQYmKiIiIiNHbsWFVWVnqMcblcWrJkieLi4hQZGampU6fq+PHjfmXxq0BYvXq1/vSnPykrK0tJSUl65JFHNGbMGN12223KyspSQUGBVq1a5VcAAACCjS2Ahz/Kysq0ePFivfnmmyotLdWZM2eUnZ2tkydPusesWbNGa9eu1YYNG7R37145HA5NmDBBjY2N7jE5OTkqKSlRcXGxysvLdeLECU2ePFktLS0dzuLXFENiYqLeffddrVq1Si+++KIMw9Dbb7+tTz75RKNHj9Ybb7yhjIwMf24JAEDQsWqKYefOnR4fb968Wf369VNFRYWuvfZaGYah9evXa8WKFZoxY4YkqaioSPHx8dq+fbsWLFig+vp6Pf3009q6davGjx8v6dtdh0lJSXrllVc0ceLEDmXxex3GRRddpFWrVqmyslJNTU1yuVz68MMP9dvf/pbiAAAAL7629rtcrg59bn19vSSpb9++kqSqqirV1NQoOzvbPcZutysrK0t79uyRJFVUVOj06dMeYxITE5Wamuoe0xEs1AQAwEuPAB6+tvY7nc6zZjAMQ7m5ubrmmmuUmpoqSaqpqZEkxcfHe4yNj493X6upqVF4eLj69OnT5piO4EmKAAB4CeQUg6+t/d47+Xy544479Pe//13l5eVnzWcYxlkzd2TMP6ODAACAl0AuUrTb7YqOjvY4zlYgLFmyRDt27NCrr76q/v37u887HA5JMnUCamtr3V0Fh8Oh5uZm1dXVtTmmIygQAAAIEoZh6I477tDzzz+vP//5z0pOTva4npycLIfDodLSUve55uZmlZWVKTMzU5KUnp6usLAwjzHV1dU6ePCge0xHMMUAAIAXq56TtHjxYm3fvl1/+MMfFBUV5e4UxMTEKCIiQjabTTk5OSosLFRKSopSUlJUWFioXr16ac6cOe6x8+fP1913363Y2Fj17dtXeXl5SktLc+9q6AgKBAAAvPTw+wkGgfHdwwjH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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.heatmap(brc_confusion, annot=False, cmap='Blues')" + ] + }, + { + "cell_type": "markdown", + "id": "3a50f7f3", + "metadata": {}, + "source": [ + "### 2.5 Gaussian mixture" + ] + }, + { + "cell_type": "markdown", + "id": "33c3d7e7", + "metadata": {}, + "source": [ + "###    2.5.1 Fitting Models" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "e98317fb", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.mixture import GaussianMixture\n", + "gm = GaussianMixture(n_components = 10).fit(x_train_pca)\n", + "y_pred_gm = gm.predict(x_test_pca)" + ] + }, + { + "cell_type": "markdown", + "id": "b4aa5c01", + "metadata": {}, + "source": [ + "###    2.5.2 Clustering results evaluations" + ] + }, + { + "cell_type": "markdown", + "id": "547683c2", + "metadata": {}, + "source": [ + "####     NMI (Normaliszed Mutual Information) and ARI (Adjusted Rand Index)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "52f39cb4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "NMI:0.1823\n", + "ARI:0.0836\n" + ] + } + ], + "source": [ + "print(\"NMI:{:.4f}\".format(normalized_mutual_info_score(y_test, y_pred_gm,average_method='arithmetic')))\n", + "print(\"ARI:{:.4f}\".format(adjusted_rand_score(y_test, y_pred_gm)))" + ] + }, + { + "cell_type": "markdown", + "id": "337975a0", + "metadata": {}, + "source": [ + "####     Confusion Matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "09af68b9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Confusion matrix: \n", + "[[ 1 2 398 105 41 34 103 82 234 0]\n", + " [369 99 23 0 61 15 73 28 18 314]\n", + " [337 39 33 5 146 5 38 114 7 276]\n", + " [ 13 3 207 170 187 7 99 283 31 0]\n", + " [ 77 198 38 1 165 134 188 36 35 128]\n", + " [331 51 55 213 34 0 16 23 9 268]\n", + " [333 129 4 0 66 45 83 18 8 314]\n", + " [ 18 185 32 2 190 209 150 177 15 22]\n", + " [107 104 71 23 148 6 82 161 17 281]\n", + " [119 138 12 1 266 40 124 162 4 134]]\n" + ] + } + ], + "source": [ + "gm_confusion = confusion_matrix(y_test,y_pred_kmean_pca)\n", + "print('Confusion matrix: \\n{}'.format(gm_confusion))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "971194b5", + "metadata": {}, + "outputs": [], + "source": [ + "sns.heatmap(gm_confusion, annot=False, cmap='Blues')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "3a8306de", + "metadata": {}, + "source": [ + "## 3. Appendix" + ] + }, + { + "cell_type": "markdown", + "id": "ca1adee0", + "metadata": {}, + "source": [ + "### 3.1 KNN" + ] + }, + { + "cell_type": "markdown", + "id": "2efec242", + "metadata": {}, + "source": [ + "#### We also tried other models including KNN and various regression models to see how they perform. Note that these are not unsupervised models, and labels were used to train the models. Therefore, these implementations are not included in the final report. " + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "c27cb6d8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting KNeighborsClassifier(n_jobs=-1, n_neighbors=4, weights='distance')\n", + "Evaluating KNeighborsClassifier(n_jobs=-1, n_neighbors=4, weights='distance')\n" + ] + } + ], + "source": [ + "from sklearn.neighbors import KNeighborsClassifier\n", + "\n", + "clf = KNeighborsClassifier(n_neighbors=4, weights='distance', n_jobs=-1)\n", + "print('Fitting', clf)\n", + "clf.fit(x_trainf, y_train)\n", + "print('Evaluating', clf)\n", + "\n", + "y_pred_knn = clf.predict(x_testf)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "31b937dc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test accuracy: 0.921\n" + ] + } + ], + "source": [ + "test_score = clf.score(x_testf, y_test)\n", + "print('Test accuracy:', test_score)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "df13d267", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8231031975085954" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.metrics.cluster import normalized_mutual_info_score\n", + "normalized_mutual_info_score(y_test, y_pred_knn,average_method='arithmetic')" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "2226f1b5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8234272963838932" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.metrics.cluster import normalized_mutual_info_score\n", + "normalized_mutual_info_score(y_test, y_pred_knn,average_method='min')" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "09c6c71e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.823103261265742" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.metrics.cluster import normalized_mutual_info_score\n", + "normalized_mutual_info_score(y_test, y_pred_knn,average_method='geometric')" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "cb776587", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.8227793536618937" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.metrics.cluster import normalized_mutual_info_score\n", + "normalized_mutual_info_score(y_test, y_pred_knn,average_method='max')" + ] + }, + { + "cell_type": "markdown", + "id": "12d38ecb", + "metadata": {}, + "source": [ + "####    Confusion Matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "id": "4bef3167", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Confusion matrix: \n", + "[[910 0 1 1 3 26 0 15 44 0]\n", + " [ 1 910 27 1 4 3 39 0 8 7]\n", + " [ 9 6 880 45 8 15 14 3 18 2]\n", + " [ 1 1 18 969 0 5 3 1 2 0]\n", + " [ 13 12 11 16 885 10 14 2 28 9]\n", + " [ 1 5 36 8 2 931 12 0 3 2]\n", + " [ 3 2 20 6 8 3 951 2 2 3]\n", + " [ 1 8 11 4 9 6 14 912 21 14]\n", + " [ 0 13 9 6 0 7 12 0 952 1]\n", + " [ 2 24 10 2 3 4 13 5 27 910]]\n" + ] + } + ], + "source": [ + "from sklearn.metrics import confusion_matrix\n", + "knn_confusion = confusion_matrix(y_test,y_pred_knn)\n", + "print('Confusion matrix: \\n{}'.format(knn_confusion))" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "id": "2bc87615", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import seaborn as sns\n", + "sns.heatmap(knn_confusion, annot=True, cmap='Blues')" + ] + }, + { + "cell_type": "markdown", + "id": "98588e59", + "metadata": {}, + "source": [ + "### 3.2 Four Regression Models" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "84d84800", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training data set score: 0.337\n", + "Test data set score: 0.187\n" + ] + } + ], + "source": [ + "# Linear regression\n", + "from sklearn.linear_model import LinearRegression\n", + "lr = LinearRegression().fit(x_trainf,y_train)\n", + "print('Training data set score: {:.3f}'.format(lr.score(x_trainf, y_train)))\n", + "print('Test data set score: {:.3f}'.format(lr.score(x_testf, y_test))) # overfit" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "id": "0f2cb297", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training data set score: 0.34\n", + "Test data set score: 0.19\n" + ] + } + ], + "source": [ + "# Ridge Regression\n", + "from sklearn.linear_model import Ridge\n", + "ridge = Ridge().fit(x_trainf, y_train)\n", + "print('Training data set score: {:.2f}'.format(ridge.score(x_trainf, y_train)))\n", + "print('Test data set score: {:.2f}'.format(ridge.score(x_testf, y_test))) # overfit" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "id": "b3bee2c1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training data set score: 0.34\n", + "Test data set score: 0.19\n" + ] + } + ], + "source": [ + "# Lasso Regression\n", + "from sklearn.linear_model import Lasso\n", + "lasso = Lasso(alpha = 0.1, max_iter = 100000).fit(x_trainf, y_train)\n", + "print('Training data set score: {:.2f}'.format(lasso.score(x_trainf, y_train)))\n", + "print('Test data set score: {:.2f}'.format(lasso.score(x_testf, y_test))) # overfit" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "id": "1f7c891d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training data set score: 0.838\n", + "Test data set score: 0.691\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "D:\\ANA\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + " n_iter_i = _check_optimize_result(\n" + ] + } + ], + "source": [ + "# Logistic Regression\n", + "from sklearn.linear_model import LogisticRegression\n", + "logreg = LogisticRegression(max_iter=100).fit(x_trainf, y_train)\n", + "print('Training data set score: {:.3f}'.format(logreg.score(x_trainf, y_train)))\n", + "print('Test data set score: {:.3f}'.format(logreg.score(x_testf, y_test))) # overfit" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/utils/__pycache__/__init__.cpython-38.pyc b/utils/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..3160c29 Binary files /dev/null and b/utils/__pycache__/__init__.cpython-38.pyc differ diff --git a/utils/evaluation.py b/utils/evaluation.py new file mode 100644 index 0000000..5ab52f7 --- /dev/null +++ b/utils/evaluation.py @@ -0,0 +1,62 @@ +import numpy as np +import matplotlib.pyplot as plt +from sklearn.metrics import recall_score, f1_score, classification_report, confusion_matrix, ConfusionMatrixDisplay + + +def avg_accuracy(gt, pred): + """ + gt: ground truth + pred: prediction + """ + correct_cnt = (pred == gt).sum() + acc = correct_cnt * 1.0 / pred.shape[0] + return acc + + +def class_metric(confusion_matrix, class_id): + """ + confusion_matrix: confusion matrix of multi-class classification + class_id: id of a particular class + """ + confusion_matrix = np.float64(confusion_matrix) + TP = confusion_matrix[class_id, class_id] + FN = np.sum(confusion_matrix[class_id]) - TP + FP = np.sum(confusion_matrix[:, class_id]) - TP + TN = np.sum(confusion_matrix) - TP - FN - FP + + accuracy = (TP + TN) / (TP + FP + FN + TN) + precision = TP / (TP + FP) + recall = TP / (TP + FN) + f_score = 2 * precision * recall / (precision + recall) + return accuracy, precision, recall, f_score + + +# plot train loss +def visualize_train_loss(train_loss, logger, log_img_path): + plt.xlabel('Train Loss') + plt.plot(train_loss) + path = log_img_path + 'train_loss.png' + plt.savefig(path) + plt.clf() + logger.info('Train Loss Visualization is saved to ' + path) + + +# plot validation accuracy +def visualize_val_accuracy(val_acc, logger, log_img_path): + plt.xlabel('Validation Accuracy') + plt.plot(val_acc) + path = log_img_path + 'val_acc.png' + plt.savefig(path) + plt.clf() + logger.info('Validation Accuracy Visualization is saved to ' + path) + + +# plot confusion matrix +def visualize_confusion_matrix(gt, pred, logger, log_img_path): + cm = confusion_matrix(gt, pred) + disp = ConfusionMatrixDisplay(cm).plot() + path = log_img_path + 'confusion_matrix.png' + plt.savefig(path) + plt.clf() + logger.info('Confusion Matrix Visualization is saved to ' + path) + return cm diff --git a/utils/init.py b/utils/init.py new file mode 100644 index 0000000..97c6e26 --- /dev/null +++ b/utils/init.py @@ -0,0 +1,18 @@ +from nets import ResNet +import timm +from config import * + + +# initialize model +def get_model(model): + if model == 'ResNet-18': + return timm.create_model('resnet18', pretrained=True, num_classes=config['N_CLASSES']) + elif model == 'ResNet-34': + return timm.create_model('resnet34', pretrained=True, num_classes=config['N_CLASSES']) + elif model == 'ResMLP-12': + return timm.create_model('resmlp_12_224', pretrained=True, num_classes=config['N_CLASSES']) + elif model == 'ResMLP-24': + return timm.create_model('resmlp_24_224', pretrained=True, num_classes=config['N_CLASSES']) + else: + print('No required model') + return None diff --git a/utils/logger.py b/utils/logger.py new file mode 100644 index 0000000..2d5084d --- /dev/null +++ b/utils/logger.py @@ -0,0 +1,88 @@ +import sys +import logging +import os + + +def get_logger(exp_dir): + """ + creates logger instance. writing out info to file and to terminal. + :param exp_dir: experiment directory, where exec.log file is stored. + :return: logger instance. + """ + if not os.path.exists(exp_dir): + os.makedirs(exp_dir) + + logger = logging.getLogger('ChestXray_detection') + logger.setLevel(logging.DEBUG) + log_file = os.path.join(exp_dir, 'log.txt') + hdlr = logging.FileHandler(log_file) + print('Logging to {}'.format(log_file)) + logger.addHandler(hdlr) + logger.addHandler(ColorHandler()) + logger.propagate = False + return logger + + +class _AnsiColorizer(object): + """ + A colorizer is an object that loosely wraps around a stream, allowing + callers to write text to the stream in a particular color. + + Colorizer classes must implement C{supported()} and C{write(text, color)}. + """ + _colors = dict(black=30, red=31, green=32, yellow=33, + blue=34, magenta=35, cyan=36, white=37, default=39) + + def __init__(self, stream): + self.stream = stream + + @classmethod + def supported(cls, stream=sys.stdout): + """ + A class method that returns True if the current platform supports + coloring terminal output using this method. Returns False otherwise. + """ + if not stream.isatty(): + return False # auto color only on TTYs + try: + import curses + except ImportError: + return False + else: + try: + try: + return curses.tigetnum("colors") > 2 + except curses.error: + curses.setupterm() + return curses.tigetnum("colors") > 2 + except: + raise + # guess false in case of error + return False + + def write(self, text, color): + """ + Write the given text to the stream in the given color. + + @param text: Text to be written to the stream. + + @param color: A string label for a color. e.g. 'red', 'white'. + """ + color = self._colors[color] + self.stream.write('\x1b[%sm%s\x1b[0m' % (color, text)) + + +class ColorHandler(logging.StreamHandler): + + def __init__(self, stream=sys.stdout): + super(ColorHandler, self).__init__(_AnsiColorizer(stream)) + + def emit(self, record): + msg_colors = { + logging.DEBUG: "green", + logging.INFO: "default", + logging.WARNING: "red", + logging.ERROR: "red" + } + color = msg_colors.get(record.levelno, "blue") + self.stream.write(record.msg + "\n", color)