diff --git a/doc/Grundlagen_des_maschinellen_lernens.aux b/doc/Grundlagen_des_maschinellen_lernens.aux index 0dea0dd..385a36d 100644 --- a/doc/Grundlagen_des_maschinellen_lernens.aux +++ b/doc/Grundlagen_des_maschinellen_lernens.aux @@ -86,22 +86,28 @@ \newlabel{Filter_output dargestellt}{{19}{14}{Die jeweils oben stehenden Filter wurden auf das Beispielbild angewandt.\relax }{figure.caption.17}{}} \@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {20}{\ignorespaces Beispiele f\IeC {\"u}r low- mid- und high-level Features in Convolutional Neural Nets\newline Quelle: https://tvirdi.github.io/2017-10-29/cnn/}}{15}{figure.caption.18}\protected@file@percent } \newlabel{HL_features_conv}{{20}{15}{Beispiele für low- mid- und high-level Features in Convolutional Neural Nets\newline Quelle: https://tvirdi.github.io/2017-10-29/cnn/}{figure.caption.18}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.2}Pooling Layers}{16}{subsubsection.3.7.2}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {4}PyTorch}{16}{section.4}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Datenvorbereitung}{16}{subsection.4.1}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Definieren des Netzes}{16}{subsection.4.2}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Trainieren des Netzes}{16}{subsection.4.3}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {5}Fallbeispiel I:\newline Ein Klassifizierungsnetzwerk f\IeC {\"u}r handgeschriebene Ziffern}{16}{section.5}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Aufgabe}{16}{subsection.5.1}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Der MNIST Datensatz}{16}{subsection.5.2}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}Fragmentbasierte Erkennung}{16}{subsection.5.3}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.4}Ergebnis}{16}{subsection.5.4}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {6}Fallbeispiel II:\newline Eine selbsttrainierende KI f\IeC {\"u}r Tic-Tac-Toe}{16}{section.6}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.1}Das Prinzip}{16}{subsection.6.1}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.2}Chance-Tree Optimierung}{16}{subsection.6.2}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.3}L\IeC {\"o}sung mittels eines neuronalen Netzes}{16}{subsection.6.3}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.4}Vergleich}{16}{subsection.6.4}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {7}Schlusswort}{16}{section.7}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.2}Pooling Layers}{15}{subsubsection.3.7.2}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {21}{\ignorespaces Max Pooling mit $2\times 2$ gro\IeC {\ss }en Submatritzen\newline Quelle: https://computersciencewiki.org/index.php/Max-pooling\_/\_Pooling CC BY NC SA Lizenz}}{16}{figure.caption.19}\protected@file@percent } +\newlabel{Maxpool}{{21}{16}{Max Pooling mit $2\times 2$ großen Submatritzen\newline Quelle: https://computersciencewiki.org/index.php/Max-pooling\_/\_Pooling\\ CC BY NC SA Lizenz}{figure.caption.19}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {22}{\ignorespaces Average Pooling mit $2\times 2$ gro\IeC {\ss }en Submatritzen\newline Aus: Dominguez-Morales, Juan Pedro. (2018). Neuromorphic audio processing through real-time embedded spiking neural networks. Abbildung 33}}{16}{figure.caption.20}\protected@file@percent } +\newlabel{AvgPool}{{22}{16}{Average Pooling mit $2\times 2$ großen Submatritzen\newline Aus: Dominguez-Morales, Juan Pedro. (2018). Neuromorphic audio processing through real-time embedded spiking neural networks. Abbildung 33}{figure.caption.20}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {23}{\ignorespaces Gegen\IeC {\"u}berstellung von Max und Average Pooling\relax }}{17}{figure.caption.21}\protected@file@percent } +\newlabel{Pooling_Mnist}{{23}{17}{Gegenüberstellung von Max und Average Pooling\relax }{figure.caption.21}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {4}PyTorch}{18}{section.4}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Datenvorbereitung}{18}{subsection.4.1}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Definieren des Netzes}{18}{subsection.4.2}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Trainieren des Netzes}{18}{subsection.4.3}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {5}Fallbeispiel I:\newline Ein Klassifizierungsnetzwerk f\IeC {\"u}r handgeschriebene Ziffern}{18}{section.5}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Aufgabe}{18}{subsection.5.1}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Der MNIST Datensatz}{18}{subsection.5.2}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}Fragmentbasierte Erkennung}{18}{subsection.5.3}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.4}Ergebnis}{18}{subsection.5.4}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {6}Fallbeispiel II:\newline Eine selbsttrainierende KI f\IeC {\"u}r Tic-Tac-Toe}{18}{section.6}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.1}Das Prinzip}{18}{subsection.6.1}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.2}Chance-Tree Optimierung}{18}{subsection.6.2}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.3}L\IeC {\"o}sung mittels eines neuronalen Netzes}{18}{subsection.6.3}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.4}Vergleich}{18}{subsection.6.4}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {7}Schlusswort}{18}{section.7}\protected@file@percent } \bibcite{1}{1} \bibcite{2}{2} \bibcite{3}{3} diff --git a/doc/Grundlagen_des_maschinellen_lernens.lof b/doc/Grundlagen_des_maschinellen_lernens.lof index 751b3d0..22b4f04 100644 --- a/doc/Grundlagen_des_maschinellen_lernens.lof +++ b/doc/Grundlagen_des_maschinellen_lernens.lof @@ -40,3 +40,9 @@ \contentsline {figure}{\numberline {19}{\ignorespaces Die jeweils oben stehenden Filter wurden auf das Beispielbild angewandt.\relax }}{14}{figure.caption.17}% \defcounter {refsection}{0}\relax \contentsline {figure}{\numberline {20}{\ignorespaces Beispiele f\IeC {\"u}r low- mid- und high-level Features in Convolutional Neural Nets\newline Quelle: https://tvirdi.github.io/2017-10-29/cnn/}}{15}{figure.caption.18}% +\defcounter {refsection}{0}\relax +\contentsline {figure}{\numberline {21}{\ignorespaces Max Pooling mit $2\times 2$ gro\IeC {\ss }en Submatritzen\newline Quelle: https://computersciencewiki.org/index.php/Max-pooling\_/\_Pooling CC BY NC SA Lizenz}}{16}{figure.caption.19}% +\defcounter {refsection}{0}\relax +\contentsline {figure}{\numberline {22}{\ignorespaces Average Pooling mit $2\times 2$ gro\IeC {\ss }en Submatritzen\newline Aus: Dominguez-Morales, Juan Pedro. (2018). Neuromorphic audio processing through real-time embedded spiking neural networks. Abbildung 33}}{16}{figure.caption.20}% +\defcounter {refsection}{0}\relax +\contentsline {figure}{\numberline {23}{\ignorespaces Gegen\IeC {\"u}berstellung von Max und Average Pooling\relax }}{17}{figure.caption.21}% diff --git a/doc/Grundlagen_des_maschinellen_lernens.log b/doc/Grundlagen_des_maschinellen_lernens.log index 038e63b..0ce393a 100644 --- a/doc/Grundlagen_des_maschinellen_lernens.log +++ b/doc/Grundlagen_des_maschinellen_lernens.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex 2019.12.27) 15 JAN 2020 22:21 +This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex 2019.12.27) 17 JAN 2020 23:24 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -1487,29 +1487,37 @@ File: ../graphics/mnist_5/mnist_5_raw.png Graphic file (type png) Package pdftex.def Info: ../graphics/mnist_5/mnist_5_raw.png used on input lin e 352. (pdftex.def) Requested size: 172.5pt x 129.37639pt. -<../graphics/mnist_5/mnist_5_upper_edges.png, id=328, 462.528pt x 346.896pt> -File: ../graphics/mnist_5/mnist_5_upper_edges.png Graphic file (type png) - -Package pdftex.def Info: ../graphics/mnist_5/mnist_5_upper_edges.png used on i -nput line 361. +<../graphics/mnist_5/conv_only/mnist_5_upper_edges.png, id=328, 462.528pt x 346 +.896pt> +File: ../graphics/mnist_5/conv_only/mnist_5_upper_edges.png Graphic file (type +png) + +Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_upper_edges.png + used on input line 361. (pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/mnist_5_left_edges.png, id=329, 462.528pt x 346.896pt> -File: ../graphics/mnist_5/mnist_5_left_edges.png Graphic file (type png) - -Package pdftex.def Info: ../graphics/mnist_5/mnist_5_left_edges.png used on in -put line 366. +<../graphics/mnist_5/conv_only/mnist_5_left_edges.png, id=329, 462.528pt x 346. +896pt> +File: ../graphics/mnist_5/conv_only/mnist_5_left_edges.png Graphic file (type p +ng) + +Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_left_edges.png +used on input line 366. (pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/mnist_5_lower_edges.png, id=330, 462.528pt x 346.896pt> -File: ../graphics/mnist_5/mnist_5_lower_edges.png Graphic file (type png) - -Package pdftex.def Info: ../graphics/mnist_5/mnist_5_lower_edges.png used on i -nput line 371. +<../graphics/mnist_5/conv_only/mnist_5_lower_edges.png, id=330, 462.528pt x 346 +.896pt> +File: ../graphics/mnist_5/conv_only/mnist_5_lower_edges.png Graphic file (type +png) + +Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_lower_edges.png + used on input line 371. (pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/mnist_5_right_edges.png, id=331, 462.528pt x 346.896pt> -File: ../graphics/mnist_5/mnist_5_right_edges.png Graphic file (type png) - -Package pdftex.def Info: ../graphics/mnist_5/mnist_5_right_edges.png used on i -nput line 376. +<../graphics/mnist_5/conv_only/mnist_5_right_edges.png, id=331, 462.528pt x 346 +.896pt> +File: ../graphics/mnist_5/conv_only/mnist_5_right_edges.png Graphic file (type +png) + +Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_right_edges.png + used on input line 376. (pdftex.def) Requested size: 68.99895pt x 51.7463pt. <../graphics/features.png, id=334, 833.1125pt x 388.45125pt> File: ../graphics/features.png Graphic file (type png) @@ -1517,23 +1525,135 @@ File: ../graphics/features.png Graphic file (type png) Package pdftex.def Info: ../graphics/features.png used on input line 387. (pdftex.def) Requested size: 345.0pt x 160.86047pt. -Underfull \hbox (badness 10000) in paragraph at lines 298--393 +Underfull \hbox (badness 10000) in paragraph at lines 298--394 [] -[14 <../graphics/mnist_5/mnist_5_raw.png> <../graphics/mnist_5/mnist_5_upper_ed -ges.png> <../graphics/mnist_5/mnist_5_left_edges.png> <../graphics/mnist_5/mnis -t_5_lower_edges.png> <../graphics/mnist_5/mnist_5_right_edges.png>] +[14 <../graphics/mnist_5/mnist_5_raw.png> <../graphics/mnist_5/conv_only/mnist_ +5_upper_edges.png> <../graphics/mnist_5/conv_only/mnist_5_left_edges.png> <../g +raphics/mnist_5/conv_only/mnist_5_lower_edges.png> <../graphics/mnist_5/conv_on +ly/mnist_5_right_edges.png>] [15 <../graphics/features.png>] +<../graphics/MaxpoolSample2.png, id=355, 164.25pt x 68.547pt> +File: ../graphics/MaxpoolSample2.png Graphic file (type png) + +Package pdftex.def Info: ../graphics/MaxpoolSample2.png used on input line 405 +. +(pdftex.def) Requested size: 241.49895pt x 100.79422pt. +<../graphics/Average-Pooling-Example.png, id=356, 746.79pt x 337.26pt> +File: ../graphics/Average-Pooling-Example.png Graphic file (type png) + +Package pdftex.def Info: ../graphics/Average-Pooling-Example.png used on input + line 413. +(pdftex.def) Requested size: 241.49895pt x 109.0627pt. +File: ../graphics/mnist_5/conv_only/mnist_5_upper_edges.png Graphic file (type +png) + +Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_upper_edges.png + used on input line 423. +(pdftex.def) Requested size: 68.99895pt x 51.7463pt. +File: ../graphics/mnist_5/conv_only/mnist_5_left_edges.png Graphic file (type p +ng) + +Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_left_edges.png +used on input line 428. +(pdftex.def) Requested size: 68.99895pt x 51.7463pt. +File: ../graphics/mnist_5/conv_only/mnist_5_lower_edges.png Graphic file (type +png) + +Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_lower_edges.png + used on input line 433. +(pdftex.def) Requested size: 68.99895pt x 51.7463pt. +File: ../graphics/mnist_5/conv_only/mnist_5_right_edges.png Graphic file (type +png) + +Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_right_edges.png + used on input line 438. +(pdftex.def) Requested size: 68.99895pt x 51.7463pt. +<../graphics/mnist_5/conv_pool/upper_horiz_pooled.png, id=358, 462.528pt x 346. +896pt> +File: ../graphics/mnist_5/conv_pool/upper_horiz_pooled.png Graphic file (type p +ng) + +Package pdftex.def Info: ../graphics/mnist_5/conv_pool/upper_horiz_pooled.png +used on input line 443. +(pdftex.def) Requested size: 68.99895pt x 51.7463pt. +<../graphics/mnist_5/conv_pool/left_vert_pooled.png, id=359, 462.528pt x 346.89 +6pt> +File: ../graphics/mnist_5/conv_pool/left_vert_pooled.png Graphic file (type png +) + +Package pdftex.def Info: ../graphics/mnist_5/conv_pool/left_vert_pooled.png us +ed on input line 448. +(pdftex.def) Requested size: 68.99895pt x 51.7463pt. +<../graphics/mnist_5/conv_pool/lower_horiz_pooled.png, id=360, 462.528pt x 346. +896pt> +File: ../graphics/mnist_5/conv_pool/lower_horiz_pooled.png Graphic file (type p +ng) + +Package pdftex.def Info: ../graphics/mnist_5/conv_pool/lower_horiz_pooled.png +used on input line 453. +(pdftex.def) Requested size: 68.99895pt x 51.7463pt. +<../graphics/mnist_5/conv_pool/right_vert_pooled.png, id=361, 462.528pt x 346.8 +96pt> +File: ../graphics/mnist_5/conv_pool/right_vert_pooled.png Graphic file (type pn +g) + +Package pdftex.def Info: ../graphics/mnist_5/conv_pool/right_vert_pooled.png u +sed on input line 458. +(pdftex.def) Requested size: 68.99895pt x 51.7463pt. +<../graphics/mnist_5/conv_pool/upper_horiz_avgpooled.png, id=362, 462.528pt x 3 +46.896pt> +File: ../graphics/mnist_5/conv_pool/upper_horiz_avgpooled.png Graphic file (typ +e png) + +Package pdftex.def Info: ../graphics/mnist_5/conv_pool/upper_horiz_avgpooled.pn +g used on input line 463. +(pdftex.def) Requested size: 68.99895pt x 51.7463pt. +<../graphics/mnist_5/conv_pool/left_vert_avgpooled.png, id=363, 462.528pt x 346 +.896pt> +File: ../graphics/mnist_5/conv_pool/left_vert_avgpooled.png Graphic file (type +png) + +Package pdftex.def Info: ../graphics/mnist_5/conv_pool/left_vert_avgpooled.png + used on input line 468. +(pdftex.def) Requested size: 68.99895pt x 51.7463pt. +<../graphics/mnist_5/conv_pool/lower_horiz_avgpooled.png, id=364, 462.528pt x 3 +46.896pt> +File: ../graphics/mnist_5/conv_pool/lower_horiz_avgpooled.png Graphic file (typ +e png) + +Package pdftex.def Info: ../graphics/mnist_5/conv_pool/lower_horiz_avgpooled.pn +g used on input line 473. +(pdftex.def) Requested size: 68.99895pt x 51.7463pt. +<../graphics/mnist_5/conv_pool/right_vert_avgpooled.png, id=365, 462.528pt x 34 +6.896pt> +File: ../graphics/mnist_5/conv_pool/right_vert_avgpooled.png Graphic file (type + png) + +Package pdftex.def Info: ../graphics/mnist_5/conv_pool/right_vert_avgpooled.png + used on input line 478. +(pdftex.def) Requested size: 68.99895pt x 51.7463pt. + +Underfull \hbox (badness 10000) in paragraph at lines 401--484 + + [] + +[16 <../graphics/MaxpoolSample2.png> <../graphics/Average-pooling-example.png>] Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding): -(hyperref) removing `\newline' on input line 398. +(hyperref) removing `\newline' on input line 488. Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding): -(hyperref) removing `\newline' on input line 403. +(hyperref) removing `\newline' on input line 493. -[15 <../graphics/features.png>] [16] -Underfull \hbox (badness 10000) in paragraph at lines 420--424 +[17 <../graphics/mnist_5/conv_pool/upper_horiz_pooled.png> <../graphics/mnist_5 +/conv_pool/left_vert_pooled.png> <../graphics/mnist_5/conv_pool/lower_horiz_poo +led.png> <../graphics/mnist_5/conv_pool/right_vert_pooled.png> <../graphics/mni +st_5/conv_pool/upper_horiz_avgpooled.png> <../graphics/mnist_5/conv_pool/left_v +ert_avgpooled.png> <../graphics/mnist_5/conv_pool/lower_horiz_avgpooled.png> <. +./graphics/mnist_5/conv_pool/right_vert_avgpooled.png>] [18] +Underfull \hbox (badness 10000) in paragraph at lines 510--514 \T1/LinuxBiolinumT-TLF/m/n/10 Quelle: https://towardsdatascience.com/common-los s-functions-in-machine- [] @@ -1544,22 +1664,28 @@ Overfull \hbox (21.8196pt too wide) in paragraph at lines 28--28 b/master/README.md [] -[17] +[19] Overfull \hbox (5.42265pt too wide) in paragraph at lines 42--42 [][] [][]\T1/LinuxBiolinumT-TLF/m/n/10 Beispiele für low- mid- und high-level Fea-tu-res in Con-vo-lu-tio-nal Neural [] + +Overfull \hbox (23.8891pt too wide) in paragraph at lines 44--44 + \T1/LinuxBiolinumT-TLF/m/n/10 Quelle: https://computersciencewiki.org/index.ph +p/Max-pooling_/_Pooling + [] + ) \tf@lof=\write7 \openout7 = `Grundlagen_des_maschinellen_lernens.lof'. - [18] -Package atveryend Info: Empty hook `BeforeClearDocument' on input line 427. -Package atveryend Info: Empty hook `AfterLastShipout' on input line 427. + [20] +Package atveryend Info: Empty hook `BeforeClearDocument' on input line 517. +Package atveryend Info: Empty hook `AfterLastShipout' on input line 517. (./Grundlagen_des_maschinellen_lernens.aux) -Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 427. -Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 427. +Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 517. +Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 517. Package rerunfilecheck Info: File `Grundlagen_des_maschinellen_lernens.out' has not changed. (rerunfilecheck) Checksum: B310243FE389BD4A3D39E25B868838EA;2989. @@ -1578,10 +1704,10 @@ un.xml'. ) Here is how much of TeX's memory you used: - 38343 strings out of 492615 - 854737 string characters out of 6131389 - 1381825 words of memory out of 5000000 - 41550 multiletter control sequences out of 15000+600000 + 38406 strings out of 492615 + 857459 string characters out of 6131389 + 1382290 words of memory out of 5000000 + 41593 multiletter control sequences out of 15000+600000 83070 words of font info for 118 fonts, out of 8000000 for 9000 1143 hyphenation exceptions out of 8191 62i,14n,100p,1509b,3444s stack positions out of 5000i,500n,10000p,200000b,80000s @@ -1597,11 +1723,11 @@ hare/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.pfb> -Output written on Grundlagen_des_maschinellen_lernens.pdf (19 pages, 1088555 by +Output written on Grundlagen_des_maschinellen_lernens.pdf (21 pages, 1178389 by tes). PDF statistics: - 465 PDF objects out of 1000 (max. 8388607) - 409 compressed objects within 5 object streams - 93 named destinations out of 1000 (max. 500000) - 383 words of extra memory for PDF output out of 10000 (max. 10000000) + 512 PDF objects out of 1000 (max. 8388607) + 434 compressed objects within 5 object streams + 101 named destinations out of 1000 (max. 500000) + 433 words of extra memory for PDF output out of 10000 (max. 10000000) diff --git a/doc/Grundlagen_des_maschinellen_lernens.pdf b/doc/Grundlagen_des_maschinellen_lernens.pdf index 77cd340..1d6758d 100644 Binary files a/doc/Grundlagen_des_maschinellen_lernens.pdf and b/doc/Grundlagen_des_maschinellen_lernens.pdf differ diff --git a/doc/Grundlagen_des_maschinellen_lernens.synctex.gz b/doc/Grundlagen_des_maschinellen_lernens.synctex.gz index f2507dd..91b4688 100644 Binary files a/doc/Grundlagen_des_maschinellen_lernens.synctex.gz and b/doc/Grundlagen_des_maschinellen_lernens.synctex.gz differ diff --git a/doc/Grundlagen_des_maschinellen_lernens.tex b/doc/Grundlagen_des_maschinellen_lernens.tex index 187f2ad..bab23a3 100644 --- a/doc/Grundlagen_des_maschinellen_lernens.tex +++ b/doc/Grundlagen_des_maschinellen_lernens.tex @@ -358,22 +358,22 @@ beispielsweise zur einfachen Kantenerkennung genutzt werden. Zur Veranschaulichu \begin{figure}[h] \begin{minipage}{0.2\linewidth} \centering - \includegraphics[width=\linewidth]{../graphics/mnist_5/mnist_5_upper_edges.png} + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_only/mnist_5_upper_edges.png} \end{minipage} \hfill \begin{minipage}{0.2\linewidth} \centering - \includegraphics[width=\linewidth]{../graphics/mnist_5/mnist_5_left_edges.png} + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_only/mnist_5_left_edges.png} \end{minipage} \hfill \begin{minipage}{0.2\linewidth} \centering - \includegraphics[width=\linewidth]{../graphics/mnist_5/mnist_5_lower_edges.png} + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_only/mnist_5_lower_edges.png} \end{minipage} \hfill \begin{minipage}{0.2\linewidth} \centering - \includegraphics[width=\linewidth]{../graphics/mnist_5/mnist_5_right_edges.png} + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_only/mnist_5_right_edges.png} \end{minipage} \caption{Die jeweils oben stehenden Filter wurden auf das Beispielbild angewandt.} \label{Filter_output dargestellt} @@ -382,15 +382,105 @@ beispielsweise zur einfachen Kantenerkennung genutzt werden. Zur Veranschaulichu Der jeweils dunkel dargestellte Bereich kann als das identifiziert werden, was vom convolutional Layer als Kante erkannt wurde. Hier werden eindeutige Limitationen deutlich: Es kann nur als Kante erkannt werden, was auch eindeutig senkrecht oder waagerecht ist. Außerdem kann es zu Fehlentscheidungen kommen.\\ Die Kernels werden natürlich nicht per Hand initialisiert und angepasst, sondern setzen sich aus Parameternm zusammen, die im Laufe des Lernprozesses durch das Netz anpassbar sind. Das Netz kann also die Filtermatrix selber verändern. Die Filter werden meißt mit Zufallswerten initialisiert und dann während des Lernens angepasst. Ferner muss ein Kernel auch nicht immer drei Einheiten breit sein, sondern kann jede Größe $\ge2$ annehmen. Je nachdem, wie sich der Kernel über die Eingabematrix bewegt, ist außerdem ein sogenanntes \glqq Padding'' nötig, da gegebenenfalls Werte betrachtet werden müssten, die nicht in der Eingabematrix liegen. In der Regel werden daher alle Werte, die nicht in der Eingabematrix vorhanden sind durch 0 ersetzt. Das Padding ist in Abbildung \ref{Convolution_illustration} als weiß in der Eingabematrix dargestellt. Es ist eine Art \glqq Rand aus Nullen'', der um dasd Bild gelegt wird.\\ \\ -Hintereinander können convolutional Layers auch ganze Elemente eines Bildes erkennen. Erkennt das erste Layer wie oben gezeigt beispielsweise Kanten, so kann das Layer darauf Kombinationen aus diesen, wie beispielsweise Ecken oder Winkel, erkennen. Wie gefilterte Bilder für sogenannte \glqq High-Level-Features'' aussehen können ist in Abbilldung \ref{HL_features_conv} dargestellt. +Hintereinander können convolutional Layers auch ganze Elemente eines Bildes erkennen. Erkennt das erste Layer wie oben gezeigt beispielsweise Kanten, so kann das Layer darauf Kombinationen aus diesen, wie beispielsweise Ecken oder Winkel, erkennen. Wie gefilterte Bilder für sogenannte \glqq High-Level-Features'' aussehen können ist in Abbilldung \ref{HL_features_conv} dargestellt. Die Ausgabebilder von Convolutional Layers werden als \glqq Feature map'' bezeichnet. \begin{figure}[h] \includegraphics[width=\linewidth]{../graphics/features.png} \caption[Beispiele für low- mid- und high-level Features in Convolutional Neural Nets\newline Quelle: https://tvirdi.github.io/2017-10-29/cnn/]{Beispiele für low- mid- und high-level Features in Convolutional Neural Nets} \label{HL_features_conv} \end{figure} +\\ Das bemerkenswerte an Convolutional Layers ist vor allem, dass duch ähnliche Optimierungsalgorytmen auch hier maschinelles lernen möglich ist, dass sich ein neuronales Netz diese Filter also selbstständig beibringen kann. \subsubsection{Pooling Layers} +Pooling Layers werden ebenfalls hauptsächlich in Convolutional Neural Networks verwendet. Sie werden nach Convolutional Layers genutzt um das Ausgabebild herunterzutakten, also verlustbehaftet zu Komprimieren. Dabei wird die Feature Map im wesentlichen zusammengefasst um die Datenmenge, die das Folgende Convolutional Layer erhält zu reduzieren und sie Verschiebungen im Originalbild gegenüber immuner zu machen. Das ist deshalb notwendig, da die Convolutional Layers die Features lokal sehr begrenzt erkennen und daher eine kleine Verschiebung des Originalbildes zur Folge haben kann, dass im Folgenden Convolutional Layer die Kombination der Features gegebenenfalls nicht richtig erkannt wird. Das Pooling Layer kann diesem Effekt entgegenwirken, indem es die Features zusammenfasst. So kann aus einer ganzen Kante beispielsweise ein einziger Pixel werden.\\ +Es werden im Wesentlichen zwei Techniken zum Pooling eingesetzt. +\begin{enumerate} + \item Max Pooling (Abbildung \ref{Maxpool}) + \item Average Pooling (Abbildung \ref{AvgPool}) +\end{enumerate} +Sie unterscheiden sich darin, wie die zu komprimierenden Werte mit einander verrechnet werden, sind ansonsten jedoch identisch.\\ +Beim Pooling wird die Eingabematrix in Submatritzen partitioniert\footnote{Hier ist die Mengenteorethische Partitionierung gemeint. Eine Menge wird in nicht leere Teilmengen unterteilt, sodass jedes Element der Ausgangsmenge in genau einer der Teilmengen enthalten ist.}. Jede Submatrix stellt später einen Pixel in der Ausgabematrix dar. Hier unterscheiden sich jetzt Max- und Avarage- Pooling. Beim Max Pooling ist der neue Wert der höhste Wert aus dieser Submatrix, beim Avarage Pooling wird der Durchschnitt aller Werte Der Submatrix gebildet und als Neuer Wert verwendet. +\begin{figure}[h] + \centering + \includegraphics[width=0.7\linewidth]{../graphics/MaxpoolSample2.png} + \caption[Max Pooling mit $2\times2$ großen Submatritzen\newline + Quelle: https://computersciencewiki.org/index.php/Max-pooling\_/\_Pooling\\ + CC BY NC SA Lizenz]{Max Pooling mit $2\times2$ großen Submatritzen} + \label{Maxpool} +\end{figure} +\begin{figure}[h] + \centering + \includegraphics[width=0.7\linewidth]{../graphics/Average-Pooling-Example.png} + \caption[Average Pooling mit $2\times2$ großen Submatritzen\newline + Aus: Dominguez-Morales, Juan Pedro. (2018). Neuromorphic audio processing through real-time embedded spiking neural networks. Abbildung 33]{Average Pooling mit $2\times2$ großen Submatritzen} + \label{AvgPool} +\end{figure} +\\ +Die Dimension der Submatritzen beträgt meißt $2\times2$. In Abbildung \ref{Pooling_Mnist} ist dargestellt, wie Pooling konkret auf das im letzten Abschnitt beschriebene Bild abgewandt aussieht. Dafür sind in der ersten Zeile die $28\times28$ Pixel großen Bilder dargestellt, die das Convolutional Layer mit Hilfe der Kantenerkennungsfilter berechnet hat. In Zeile zwei wurde auf die jeweils darüber stehenden Bilder Max Pooling angewandt, in Zeile drei auf die selben Bilder Average Pooling. Die Bilder sind nach dem Pooling $14\times14$ Pixel groß. +\begin{figure}[h] + \begin{minipage}{0.2\linewidth} + \centering + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_only/mnist_5_upper_edges.png} + \end{minipage} + \hfill + \begin{minipage}{0.2\linewidth} + \centering + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_only/mnist_5_left_edges.png} + \end{minipage} + \hfill + \begin{minipage}{0.2\linewidth} + \centering + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_only/mnist_5_lower_edges.png} + \end{minipage} + \hfill + \begin{minipage}{0.2\linewidth} + \centering + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_only/mnist_5_right_edges.png} + \end{minipage} +\\ + \begin{minipage}{0.2\linewidth} + \centering + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_pool/upper_horiz_pooled.png} +\end{minipage} +\hfill +\begin{minipage}{0.2\linewidth} + \centering + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_pool/left_vert_pooled.png} +\end{minipage} +\hfill +\begin{minipage}{0.2\linewidth} + \centering + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_pool/lower_horiz_pooled.png} +\end{minipage} +\hfill +\begin{minipage}{0.2\linewidth} + \centering + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_pool/right_vert_pooled.png} +\end{minipage} +\\ + \begin{minipage}{0.2\linewidth} + \centering + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_pool/upper_horiz_avgpooled.png} +\end{minipage} +\hfill +\begin{minipage}{0.2\linewidth} + \centering + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_pool/left_vert_avgpooled.png} +\end{minipage} +\hfill +\begin{minipage}{0.2\linewidth} + \centering + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_pool/lower_horiz_avgpooled.png} +\end{minipage} +\hfill +\begin{minipage}{0.2\linewidth} + \centering + \includegraphics[width=\linewidth]{../graphics/mnist_5/conv_pool/right_vert_avgpooled.png} +\end{minipage} +\caption{Gegenüberstellung von Max und Average Pooling} +\label{Pooling_Mnist} +\end{figure} +\\ \section{PyTorch} \subsection{Datenvorbereitung} \subsection{Definieren des Netzes} diff --git a/doc/Grundlagen_des_maschinellen_lernens.toc b/doc/Grundlagen_des_maschinellen_lernens.toc index fbbe85f..0a37a71 100644 --- a/doc/Grundlagen_des_maschinellen_lernens.toc +++ b/doc/Grundlagen_des_maschinellen_lernens.toc @@ -49,34 +49,34 @@ \defcounter {refsection}{0}\relax \contentsline {subsubsection}{\numberline {3.7.1}Convolutional Layers}{13}{subsubsection.3.7.1}% \defcounter {refsection}{0}\relax -\contentsline {subsubsection}{\numberline {3.7.2}Pooling Layers}{16}{subsubsection.3.7.2}% +\contentsline {subsubsection}{\numberline {3.7.2}Pooling Layers}{15}{subsubsection.3.7.2}% \defcounter {refsection}{0}\relax -\contentsline {section}{\numberline {4}PyTorch}{16}{section.4}% +\contentsline {section}{\numberline {4}PyTorch}{18}{section.4}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {4.1}Datenvorbereitung}{16}{subsection.4.1}% +\contentsline {subsection}{\numberline {4.1}Datenvorbereitung}{18}{subsection.4.1}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {4.2}Definieren des Netzes}{16}{subsection.4.2}% +\contentsline {subsection}{\numberline {4.2}Definieren des Netzes}{18}{subsection.4.2}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {4.3}Trainieren des Netzes}{16}{subsection.4.3}% +\contentsline {subsection}{\numberline {4.3}Trainieren des Netzes}{18}{subsection.4.3}% \defcounter {refsection}{0}\relax -\contentsline {section}{\numberline {5}Fallbeispiel I:\newline Ein Klassifizierungsnetzwerk f\IeC {\"u}r handgeschriebene Ziffern}{16}{section.5}% +\contentsline {section}{\numberline {5}Fallbeispiel I:\newline Ein Klassifizierungsnetzwerk f\IeC {\"u}r handgeschriebene Ziffern}{18}{section.5}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {5.1}Aufgabe}{16}{subsection.5.1}% +\contentsline {subsection}{\numberline {5.1}Aufgabe}{18}{subsection.5.1}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {5.2}Der MNIST Datensatz}{16}{subsection.5.2}% +\contentsline {subsection}{\numberline {5.2}Der MNIST Datensatz}{18}{subsection.5.2}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {5.3}Fragmentbasierte Erkennung}{16}{subsection.5.3}% +\contentsline {subsection}{\numberline {5.3}Fragmentbasierte Erkennung}{18}{subsection.5.3}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {5.4}Ergebnis}{16}{subsection.5.4}% +\contentsline {subsection}{\numberline {5.4}Ergebnis}{18}{subsection.5.4}% \defcounter {refsection}{0}\relax -\contentsline {section}{\numberline {6}Fallbeispiel II:\newline Eine selbsttrainierende KI f\IeC {\"u}r Tic-Tac-Toe}{16}{section.6}% +\contentsline {section}{\numberline {6}Fallbeispiel II:\newline Eine selbsttrainierende KI f\IeC {\"u}r Tic-Tac-Toe}{18}{section.6}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {6.1}Das Prinzip}{16}{subsection.6.1}% +\contentsline {subsection}{\numberline {6.1}Das Prinzip}{18}{subsection.6.1}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {6.2}Chance-Tree Optimierung}{16}{subsection.6.2}% +\contentsline {subsection}{\numberline {6.2}Chance-Tree Optimierung}{18}{subsection.6.2}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {6.3}L\IeC {\"o}sung mittels eines neuronalen Netzes}{16}{subsection.6.3}% +\contentsline {subsection}{\numberline {6.3}L\IeC {\"o}sung mittels eines neuronalen Netzes}{18}{subsection.6.3}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {6.4}Vergleich}{16}{subsection.6.4}% +\contentsline {subsection}{\numberline {6.4}Vergleich}{18}{subsection.6.4}% \defcounter {refsection}{0}\relax -\contentsline {section}{\numberline {7}Schlusswort}{16}{section.7}% +\contentsline {section}{\numberline {7}Schlusswort}{18}{section.7}% diff --git a/graphics/Average-pooling-example.png b/graphics/Average-pooling-example.png new file mode 100644 index 0000000..04b3bc7 Binary files /dev/null and b/graphics/Average-pooling-example.png differ diff --git a/graphics/MaxpoolSample2.png b/graphics/MaxpoolSample2.png new file mode 100644 index 0000000..16bcee1 Binary files /dev/null and b/graphics/MaxpoolSample2.png differ diff --git a/graphics/mnist_5/mnist_5_left_edges.png b/graphics/mnist_5/conv_only/mnist_5_left_edges.png similarity index 100% rename from graphics/mnist_5/mnist_5_left_edges.png rename to graphics/mnist_5/conv_only/mnist_5_left_edges.png diff --git a/graphics/mnist_5/mnist_5_lower_edges.png b/graphics/mnist_5/conv_only/mnist_5_lower_edges.png similarity index 100% rename from graphics/mnist_5/mnist_5_lower_edges.png rename to graphics/mnist_5/conv_only/mnist_5_lower_edges.png diff --git a/graphics/mnist_5/mnist_5_right_edges.png b/graphics/mnist_5/conv_only/mnist_5_right_edges.png similarity index 100% rename from graphics/mnist_5/mnist_5_right_edges.png rename to graphics/mnist_5/conv_only/mnist_5_right_edges.png diff --git a/graphics/mnist_5/mnist_5_upper_edges.png b/graphics/mnist_5/conv_only/mnist_5_upper_edges.png similarity index 100% rename from graphics/mnist_5/mnist_5_upper_edges.png rename to graphics/mnist_5/conv_only/mnist_5_upper_edges.png diff --git a/graphics/mnist_5/conv_pool/left_vert_avgpooled.png b/graphics/mnist_5/conv_pool/left_vert_avgpooled.png new file mode 100644 index 0000000..a371ad0 Binary files /dev/null and b/graphics/mnist_5/conv_pool/left_vert_avgpooled.png differ diff --git a/graphics/mnist_5/conv_pool/left_vert_pooled.png b/graphics/mnist_5/conv_pool/left_vert_pooled.png new file mode 100644 index 0000000..aa2b5b1 Binary files /dev/null and b/graphics/mnist_5/conv_pool/left_vert_pooled.png differ diff --git a/graphics/mnist_5/conv_pool/lower_horiz_avgpooled.png b/graphics/mnist_5/conv_pool/lower_horiz_avgpooled.png new file mode 100644 index 0000000..f951568 Binary files /dev/null and b/graphics/mnist_5/conv_pool/lower_horiz_avgpooled.png differ diff --git a/graphics/mnist_5/conv_pool/lower_horiz_pooled.png b/graphics/mnist_5/conv_pool/lower_horiz_pooled.png new file mode 100644 index 0000000..0a3ce21 Binary files /dev/null and b/graphics/mnist_5/conv_pool/lower_horiz_pooled.png differ diff --git a/graphics/mnist_5/conv_pool/right_vert_avgpooled.png b/graphics/mnist_5/conv_pool/right_vert_avgpooled.png new file mode 100644 index 0000000..3749978 Binary files /dev/null and b/graphics/mnist_5/conv_pool/right_vert_avgpooled.png differ diff --git a/graphics/mnist_5/conv_pool/right_vert_pooled.png b/graphics/mnist_5/conv_pool/right_vert_pooled.png new file mode 100644 index 0000000..26ec95c Binary files /dev/null and b/graphics/mnist_5/conv_pool/right_vert_pooled.png differ diff --git a/graphics/mnist_5/conv_pool/upper_horiz_avgpooled.png b/graphics/mnist_5/conv_pool/upper_horiz_avgpooled.png new file mode 100644 index 0000000..5ae1a34 Binary files /dev/null and b/graphics/mnist_5/conv_pool/upper_horiz_avgpooled.png differ diff --git a/graphics/mnist_5/conv_pool/upper_horiz_pooled.png b/graphics/mnist_5/conv_pool/upper_horiz_pooled.png new file mode 100644 index 0000000..9db8633 Binary files /dev/null and b/graphics/mnist_5/conv_pool/upper_horiz_pooled.png differ diff --git a/other scripts/convolutioner.py b/other scripts/convolutioner.py deleted file mode 100644 index 95c63b9..0000000 --- a/other scripts/convolutioner.py +++ /dev/null @@ -1,50 +0,0 @@ -import torch -import PIL -import numpy -from torchvision import transforms, datasets -import matplotlib.pyplot as plt - - -def frobdot(mat1, mat2): - return mat1[0][0] * mat2[0][0] + mat1[0][1] * mat2[0][1] + mat1[0][2] * mat2[0][2] + mat1[1][0] * mat2[1][0] + \ - mat1[1][1] * mat2[1][1] + mat1[1][2] * mat2[1][2] + mat1[2][0] * mat2[2][0] + mat1[2][1] * mat2[2][1] + \ - mat1[2][2] * mat2[2][2] - - -data = datasets.MNIST('../datasets', train=True, download=True, - transform=transforms.Compose([ - transforms.ToTensor() - ])) - -loader = torch.utils.data.DataLoader(data, batch_size=1, shuffle=False) -examples = enumerate(loader) -batch_idx, (example_data, example_targets) = next(examples) - -raw_img = example_data[0][0] - -new_img = numpy.zeros((28, 28)) - -kernel = numpy.array([[1, 20, 1], - [20, 0, 20], - [1, 20, 1]]) -print(new_img.shape) -for y, line in enumerate(raw_img): - for x, value in enumerate(line): - tempmat = numpy.zeros((3, 3)) - possible_positions = [[y + 1, x - 1], [y + 1, x], [y + 1, x + 1], [y, x - 1], [y, x], [y, x + 1], - [y - 1, x - y], [y - 1, x], [y - 1, x - 1]] - n = -1 - for i, pos in enumerate(possible_positions): - if i % 3 is 0: - n += 1 - - if (pos[0] < 0) or (pos[0] > 27) or (pos[1] < 0) or (pos[1] > 27): - tempmat[n][i % 3] = 0 - else: - tempmat[n][i % 3] = raw_img[pos[0]][pos[1]] - new_img[y][x] = frobdot(tempmat, kernel) - -plt.xticks([]) -plt.yticks([]) -plt.imshow(new_img, cmap='gray') -plt.show() diff --git a/other_scripts/convolutioner.py b/other_scripts/convolutioner.py new file mode 100644 index 0000000..84e91e0 --- /dev/null +++ b/other_scripts/convolutioner.py @@ -0,0 +1,80 @@ +import torch +import PIL +import numpy +from torchvision import transforms, datasets +import matplotlib.pyplot as plt + + +def frobdot(mat1, mat2): + return mat1[0][0] * mat2[0][0] + mat1[0][1] * mat2[0][1] + mat1[0][2] * mat2[0][2] + mat1[1][0] * mat2[1][0] + \ + mat1[1][1] * mat2[1][1] + mat1[1][2] * mat2[1][2] + mat1[2][0] * mat2[2][0] + mat1[2][1] * mat2[2][1] + \ + mat1[2][2] * mat2[2][2] + + +data = datasets.MNIST('../datasets', train=True, download=True, + transform=transforms.Compose([ + transforms.ToTensor() + ])) + +loader = torch.utils.data.DataLoader(data, batch_size=1, shuffle=False) +examples = enumerate(loader) +batch_idx, (example_data, example_targets) = next(examples) + +raw_img = example_data[0][0] + + +def convolve(raw_img, kernel): + new_img = numpy.zeros((28, 28)) + for y, line in enumerate(raw_img): + for x, value in enumerate(line): + tempmat = numpy.zeros((3, 3)) + possible_positions = [[y + 1, x - 1], [y + 1, x], [y + 1, x + 1], [y, x - 1], [y, x], [y, x + 1], + [y - 1, x - y], [y - 1, x], [y - 1, x - 1]] + n = -1 + for i, pos in enumerate(possible_positions): + if i % 3 is 0: + n += 1 + + if (pos[0] < 0) or (pos[0] > 27) or (pos[1] < 0) or (pos[1] > 27): + tempmat[n][i % 3] = 0 + else: + tempmat[n][i % 3] = raw_img[pos[0]][pos[1]] + new_img[y][x] = frobdot(tempmat, kernel) + + return new_img + + +def maxpool(raw_image): + new_img = numpy.zeros((14, 14)) + new_y = -1 + for y in range(0, 28, 2): + new_x = -1 + new_y += 1 + for x in range(0, 28, 2): + new_x += 1 + new_img[new_y][new_x] = max( + [raw_image[y][x], raw_image[y][x + 1], raw_image[y + 1][x], raw_image[y + 1][x + 1]]) + return new_img + + +def avgpool(raw_image): + new_img = numpy.zeros((14, 14)) + new_y = -1 + for y in range(0, 28, 2): + new_x = -1 + new_y += 1 + for x in range(0, 28, 2): + new_x += 1 + new_img[new_y][new_x] = sum( + [raw_image[y][x], raw_image[y][x + 1], raw_image[y + 1][x], raw_image[y + 1][x + 1]]) / 4 + return new_img + + +kernel = numpy.array([[-1, -1, -1], + [1, 1, 1], + [0, 0, 0]]) + +plt.xticks([]) +plt.yticks([]) +plt.imshow(avgpool(convolve(raw_img, kernel)), cmap='gray') +plt.show()