diff --git a/docs/document.aux b/docs/document.aux index f8a4c95..ab59a47 100644 --- a/docs/document.aux +++ b/docs/document.aux @@ -12,40 +12,64 @@ \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {1.1\relax .\enspace }Regresja liniowa}{13}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {1.2\relax .\enspace }Funkcja kosztu oraz metody gradientowe}{13}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {1.1.}{\ignorespaces Regresja liniowa jednej zmiennej}}{14}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {1.1}{\ignorespaces Regresja liniowa jednej zmiennej\relax }}{14}\protected@file@percent } +\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}} \newlabel{fig:linreg}{{1.1}{14}} -\@writefile{toc}{\contentsline {subsection}{\numberline {1.2.1\relax .\enspace }Funkcja kosztu}{14}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {1.2.2\relax .\enspace }Metoda gradientu prostego}{15}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {1.2.}{\ignorespaces źródlo: PrzykÅ‚ad sieci neuronowej}}{15}\protected@file@percent } -\newlabel{fig:neuralnet1}{{1.2}{15}} -\@writefile{toc}{\contentsline {chapter}{Rozdzia\PlPrIeC {\l }\ 2\relax .\enspace Reprezentacja danych muzycznych}{17}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {1.2\relax .\enspace }Uczenie modelu}{14}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {1.2.1\relax .\enspace }Funkcja kosztu}{15}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {1.2.2\relax .\enspace }Znajdowanie minimum funkcji}{15}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {1.2.3\relax .\enspace }Metody gradientowe}{15}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {1.2}{\ignorespaces Wizualizacja algorytmu gradientu prostego\relax }}{16}\protected@file@percent } +\newlabel{fig:gradient}{{1.2}{16}} +\@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {Wyznaczenie gradientu}}}{16}\protected@file@percent } +\@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {Iteracja kolejnych punktów}}}{16}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {1.3\relax .\enspace }Regresja liniowa jako model sieci neuronowej}{17}\protected@file@percent } +\newlabel{section:linreg}{{1.3}{17}} +\@writefile{lof}{\contentsline {figure}{\numberline {1.3}{\ignorespaces Regresja liniowa jako model sieci neuronowej\relax }}{17}\protected@file@percent } +\newlabel{fig:neural_model_one}{{1.3}{17}} +\@writefile{lof}{\contentsline {figure}{\numberline {1.4}{\ignorespaces Regresja liniowa wielu zmiennych jako model sieci nauronowej\relax }}{18}\protected@file@percent } +\newlabel{fig:neural_model_multi}{{1.4}{18}} +\@writefile{toc}{\contentsline {section}{\numberline {1.4\relax .\enspace }Funkcje aktywacji}{19}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {1.5}{\ignorespaces Funkcja logistyczna\relax }}{20}\protected@file@percent } +\newlabel{fig:sigmoid}{{1.5}{20}} +\@writefile{toc}{\contentsline {section}{\numberline {1.5\relax .\enspace }GÅ‚Ä™bokie sieci neuronowe}{20}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {1.6}{\ignorespaces PrzykÅ‚ad modelu sieci neuronowej\relax }}{21}\protected@file@percent } +\newlabel{fig:neural_net_1}{{1.6}{21}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.5.1\relax .\enspace }Jednokierunkowe sieci neuronowe}{21}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {1.5.2\relax .\enspace }Propagacja wsteczna bÅ‚Ä™du}{21}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {1.5.3\relax .\enspace }Autoencodery}{22}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {1.7}{\ignorespaces PrzykÅ‚ad modelu autoencodera\relax }}{22}\protected@file@percent } +\newlabel{fig:autoencoder}{{1.7}{22}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.5.4\relax .\enspace }Rekurencyjne sieci neuronowe}{23}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {1.5.5\relax .\enspace }DÅ‚uga pamięć krótkotrwaÅ‚a}{23}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {1.5.6\relax .\enspace }Model sieci seq2seq}{23}\protected@file@percent } +\@writefile{toc}{\contentsline {chapter}{Rozdzia\PlPrIeC {\l }\ 2\relax .\enspace Reprezentacja danych muzycznych}{25}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {2.1\relax .\enspace }Podstawowe koncepcje}{17}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.1\relax .\enspace }DźwiÄ™k muzyczny}{17}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.2\relax .\enspace }SygnaÅ‚ dźwiÄ™kowy}{17}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.3\relax .\enspace }Zapis nutowy}{17}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {2.1.}{\ignorespaces PrzykÅ‚ad przebiegu fali dźwiÄ™kowej}}{18}\protected@file@percent } -\newlabel{fig:waveform}{{2.1}{18}} -\@writefile{lof}{\contentsline {figure}{\numberline {2.2.}{\ignorespaces źródlo: https://www.infomusic.pl/poradnik/46934,poradnik-teoria-muzyki-rytm 5 kwietnia 2020 12:46}}{19}\protected@file@percent } -\newlabel{fig:waveform}{{2.2}{19}} -\@writefile{lot}{\contentsline {table}{\numberline {2.1.}{\ignorespaces DźwiÄ™ki symboliczne oraz ich czÄ™stosliwoÅ›ci}}{19}\protected@file@percent } -\newlabel{table:dzwieki}{{2.1}{19}} -\@writefile{lof}{\contentsline {figure}{\numberline {2.3.}{\ignorespaces źródlo: https://amplitudaschool.weebly.com/lekcja-11.html 5 kwietnia 2020 13:24}}{20}\protected@file@percent } -\newlabel{fig:pieciolinia}{{2.3}{20}} -\@writefile{toc}{\contentsline {section}{\numberline {2.2\relax .\enspace }Cyfrowa reprezentacja muzyki symbolicznej}{20}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.1\relax .\enspace }Standard MIDI}{20}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {2.4.}{\ignorespaces Fragment protokoÅ‚u MIDI}}{21}\protected@file@percent } -\@writefile{toc}{\contentsline {chapter}{Rozdzia\PlPrIeC {\l }\ 3\relax .\enspace Projekt}{23}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {2.1\relax .\enspace }Podstawowe koncepcje}{25}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.1\relax .\enspace }DźwiÄ™k muzyczny}{25}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.2\relax .\enspace }SygnaÅ‚ dźwiÄ™kowy}{25}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1.3\relax .\enspace }Zapis nutowy}{25}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces PrzykÅ‚ad przebiegu fali dźwiÄ™kowej\relax }}{26}\protected@file@percent } +\newlabel{fig:waveform}{{2.1}{26}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.2}{\ignorespaces źródlo: https://www.infomusic.pl/poradnik/46934,poradnik-teoria-muzyki-rytm 5 kwietnia 2020 12:46\relax }}{27}\protected@file@percent } +\newlabel{fig:waveform}{{2.2}{27}} +\@writefile{lot}{\contentsline {table}{\numberline {2.1}{\ignorespaces DźwiÄ™ki symboliczne oraz ich czÄ™stosliwoÅ›ci\relax }}{27}\protected@file@percent } +\newlabel{table:dzwieki}{{2.1}{27}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.3}{\ignorespaces źródlo: https://amplitudaschool.weebly.com/lekcja-11.html 5 kwietnia 2020 13:24\relax }}{28}\protected@file@percent } +\newlabel{fig:pieciolinia}{{2.3}{28}} +\@writefile{toc}{\contentsline {section}{\numberline {2.2\relax .\enspace }Cyfrowa reprezentacja muzyki symbolicznej}{28}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.1\relax .\enspace }Standard MIDI}{28}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {2.4}{\ignorespaces Fragment protokoÅ‚u MIDI\relax }}{29}\protected@file@percent } +\@writefile{toc}{\contentsline {chapter}{Rozdzia\PlPrIeC {\l }\ 3\relax .\enspace Projekt}{31}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {chapter}{Rozdzia\PlPrIeC {\l }\ 4\relax .\enspace Podsumowanie}{25}\protected@file@percent } +\@writefile{toc}{\contentsline {chapter}{Rozdzia\PlPrIeC {\l }\ 4\relax .\enspace Podsumowanie}{33}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \bibcite{}{1} \bibcite{}{2} \bibcite{}{3} -\@writefile{toc}{\contentsline {chapter}{Bibliografia}{27}\protected@file@percent } +\@writefile{toc}{\contentsline {chapter}{Bibliografia}{35}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} diff --git a/docs/document.fdb_latexmk b/docs/document.fdb_latexmk index fa7b8b0..0c88ef1 100644 --- a/docs/document.fdb_latexmk +++ b/docs/document.fdb_latexmk @@ -1,19 +1,34 @@ # Fdb version 3 -["makeindex document.idx"] 1586120051 "document.idx" "document.ind" "document" 1587308705 - "document.idx" 1587304814 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex" +["makeindex document.idx"] 1590408180 "document.idx" "document.ind" "document" 1590439106 + "document.idx" 1590414275 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex" (generated) - "document.ind" "document.ilg" -["pdflatex"] 1587304813 "/home/altarin/praca-magisterska/docs/document.tex" "/home/altarin/praca-magisterska/docs/document.pdf" "document" 1587308705 - "/home/altarin/praca-magisterska/docs/document.aux" 1587304814 4140 fe92d02eca12017bcd70981e9b88b107 "" - "/home/altarin/praca-magisterska/docs/document.tex" 1587308704 20948 a8e3447372cb1be2bbe8f0d022e247aa "" - "/usr/share/texmf-dist/fonts/enc/dvips/pl/plit.enc" 1572595918 1946 62ba825cda1ff16dbaa60d53ac60525a "" + "document.ind" +["pdflatex"] 1590414275 "/home/altarin/praca-magisterska/docs/document.tex" "/home/altarin/praca-magisterska/docs/document.pdf" "document" 1590439106 + "/home/altarin/praca-magisterska/docs/document.aux" 1590414275 6824 81f4ea3b9dd4f0379db0da6e0d4bdde4 "" + "/home/altarin/praca-magisterska/docs/document.tex" 1590439105 33356 4e4407cf830d411ea836363350d19007 "" + "/usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc" 1572595918 2971 def0b6c1f0b107b3b936def894055589 "" "/usr/share/texmf-dist/fonts/enc/dvips/pl/plme.enc" 1572595918 3126 59f33ff3e396436ebc36f4e7b444d5c4 "" "/usr/share/texmf-dist/fonts/enc/dvips/pl/plmi.enc" 1572595918 2005 f094775651a1386335c158fb632529f1 "" "/usr/share/texmf-dist/fonts/enc/dvips/pl/plms.enc" 1572595918 2468 3f9e2f3088bcf5b581dfc367d71e7d95 "" "/usr/share/texmf-dist/fonts/enc/dvips/pl/plrm.enc" 1572595918 1944 1845592c00bbe510359fd6887a83ff72 "" - "/usr/share/texmf-dist/fonts/enc/dvips/pl/plsc.enc" 1572595918 1970 17f08459267325f59652d212eb7ed719 "" "/usr/share/texmf-dist/fonts/map/fontname/texfonts.map" 1572595918 3332 103109f5612ad95229751940c61aada0 "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecbx1095.tfm" 1572595918 3584 21b378cca2e40816b0e6d74a4dc98f04 "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecbx1200.tfm" 1572595918 3584 402da0b29eafbad07963b1224b222f18 "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecbx1440.tfm" 1572595918 3584 13049b61b922a28b158a38aeff75ee9b "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecbx2074.tfm" 1572595918 3584 7666d038713b9e38abb5c2e0f6972188 "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecbx2488.tfm" 1572595918 3584 0181dbc4d429c3ba4e30feba37b5df96 "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/eccc1200.tfm" 1572595918 3072 1e3dcc56ea731d0f3645bbefe8c8608c "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm0600.tfm" 1572595918 3584 291a5713401683441e0a8c8f4417b17b "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm0700.tfm" 1572595918 3584 cf973739aac7ab6247f9150296af7954 "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm0800.tfm" 1572595918 3584 49064b465390a8e316a3c8417a050403 "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm" 1572595918 3584 adb004a0c8e7c46ee66cad73671f37b4 "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm1095.tfm" 1572595918 3584 929cdff2b7a8c11bd4d49fd68cb0ae70 "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm1200.tfm" 1572595918 3584 f80ddd985bd00e29e9a6047ebd9d4781 "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm1440.tfm" 1572595918 3584 3169d30142b88a27d4ab0e3468e963a2 "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm2074.tfm" 1572595918 3584 8e2870ec7aa9776f59654942b0923f51 "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm2488.tfm" 1572595918 3584 406ad7b70d9a41f7833f92b6313150c8 "" + "/usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecti1095.tfm" 1572595918 3072 b73d2778cc3af44970de4de5e032d7f6 "" "/usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm" 1572595918 916 f87d7c45f9c908e672703b83b72241a3 "" "/usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam5.tfm" 1572595918 924 9904cf1d39e9767e7a3622f2a125a565 "" "/usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm" 1572595918 928 2dc8d444221b7a635bb58038579b861a "" @@ -22,9 +37,6 @@ "/usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm" 1572595918 940 228d6584342e91276bf566bcf9716b83 "" "/usr/share/texmf-dist/fonts/tfm/public/cm/cmr10.tfm" 1572595918 1296 45809c5a464d5f32c8f98ba97c1bb47f "" "/usr/share/texmf-dist/fonts/tfm/public/cm/cmr12.tfm" 1572595918 1288 655e228510b4c2a1abe905c368440826 "" - "/usr/share/texmf-dist/fonts/tfm/public/pl/plbx10.tfm" 1572595918 2120 c2bca6a74408b1687f9d32e4fd3978fc "" - "/usr/share/texmf-dist/fonts/tfm/public/pl/plbx12.tfm" 1572595918 2112 e31d5b368c33d42906fcc26c9ca0a59c "" - "/usr/share/texmf-dist/fonts/tfm/public/pl/plcsc10.tfm" 1572595918 2140 d2ca82625bedca0b1948a5da5764d911 "" "/usr/share/texmf-dist/fonts/tfm/public/pl/plex10.tfm" 1572595918 992 93098cecc00cfdb7e881cb8983ca7545 "" "/usr/share/texmf-dist/fonts/tfm/public/pl/plmi10.tfm" 1572595918 1528 c9811a5c54036a0d60617f9ae77b990e "" "/usr/share/texmf-dist/fonts/tfm/public/pl/plmi12.tfm" 1572595918 1524 234f65aa0171d619f32097d0f9186df0 "" @@ -34,7 +46,6 @@ "/usr/share/texmf-dist/fonts/tfm/public/pl/plmi8.tfm" 1572595918 1520 1a3ee2ce8d697eaf56e43f8d2c40cb71 "" "/usr/share/texmf-dist/fonts/tfm/public/pl/plr10.tfm" 1572595918 2080 5c3eb4fec3b89def05dc3a4c6b93fb7c "" "/usr/share/texmf-dist/fonts/tfm/public/pl/plr12.tfm" 1572595918 2076 e1758d4caaf275a731cf0532450f26f0 "" - "/usr/share/texmf-dist/fonts/tfm/public/pl/plr17.tfm" 1572595918 2080 b61c70f1a22b45d92358c39b67ea9906 "" "/usr/share/texmf-dist/fonts/tfm/public/pl/plr5.tfm" 1572595918 2008 3b7792da2ec68e9d8515961176bc983d "" "/usr/share/texmf-dist/fonts/tfm/public/pl/plr6.tfm" 1572595918 2088 aa80c569a200447488b571f8bf7b132b "" "/usr/share/texmf-dist/fonts/tfm/public/pl/plr7.tfm" 1572595918 2088 3950be4df310cc88dade7a45ba964220 "" @@ -44,20 +55,28 @@ "/usr/share/texmf-dist/fonts/tfm/public/pl/plsy6.tfm" 1572595918 1300 730d55d47130c8c9a62c9e7eab4ae96a "" "/usr/share/texmf-dist/fonts/tfm/public/pl/plsy7.tfm" 1572595918 1304 a6a2c86c403d8bc56664eeac17804b8a "" "/usr/share/texmf-dist/fonts/tfm/public/pl/plsy8.tfm" 1572595918 1304 3b6e6a90176144a582c7bcae45156f9b "" - "/usr/share/texmf-dist/fonts/tfm/public/pl/plti10.tfm" 1572595918 2240 33876944658f33d5fc3eacb794ebb2f3 "" "/usr/share/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb" 1572595918 34694 ad62b13721ee8eda1dcc8993c8bd7041 "" - "/usr/share/texmf-dist/fonts/type1/public/pl/plbx10.pfb" 1572595918 27050 0da5f310861fb948b3c5e6a53aad685b "" - "/usr/share/texmf-dist/fonts/type1/public/pl/plbx12.pfb" 1572595918 26733 3fa55bab1df289b642fa8cd9e61fb25f "" - "/usr/share/texmf-dist/fonts/type1/public/pl/plcsc10.pfb" 1572595918 26854 260e35f0156087ec159362abd8f70655 "" + "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx1095.pfb" 1572595918 154600 ea54091d31de803b613ba9e80ca51709 "" + "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx1200.pfb" 1572595918 140176 d4962f948b4cc0adf4d3dde77a128c95 "" + "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx1440.pfb" 1572595918 135942 859a90cad7494a1e79c94baf546d7de5 "" + "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx2074.pfb" 1572595918 140194 627cc7f36c05b80e25d178974ccb3442 "" + "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx2488.pfb" 1572595918 135938 299ac3a69892db3b7674a8b2543b0a77 "" + "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfcc1200.pfb" 1572595918 108594 1a08a22405bc37650b977f219cc3597d "" + "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm0700.pfb" 1572595918 154599 ded6d7c21788a8930eadc7fef7518942 "" + "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm0800.pfb" 1572595918 164227 3df942b4ff2124425d8fb1b6d3e01c7a "" + "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm1000.pfb" 1572595918 138258 6525c253f16cededa14c7fd0da7f67b2 "" + "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm1095.pfb" 1572595918 145929 f25e56369a345c4ff583b067cd87ce8e "" + "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm1200.pfb" 1572595918 136101 f533469f523533d38317ab5729d00c8a "" + "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm1440.pfb" 1572595918 131078 d96015a2fa5c350129e933ca070b2484 "" + "/usr/share/texmf-dist/fonts/type1/public/cm-super/sfti1095.pfb" 1572595918 196446 8fbbe4b97b83e5182def6d29a44e57fb "" "/usr/share/texmf-dist/fonts/type1/public/pl/plex10.pfb" 1572595918 22371 094f80a5a689f2eefc72bff87ecbc407 "" "/usr/share/texmf-dist/fonts/type1/public/pl/plmi12.pfb" 1572595918 29704 5868c49c125729105d39d7e6e5638dd3 "" + "/usr/share/texmf-dist/fonts/type1/public/pl/plmi6.pfb" 1572595918 30338 4bdf6a32e66b53760b57428a52eeec91 "" "/usr/share/texmf-dist/fonts/type1/public/pl/plmi8.pfb" 1572595918 29648 f588152f66151a0a6061bdcc4f5c0f53 "" - "/usr/share/texmf-dist/fonts/type1/public/pl/plr10.pfb" 1572595918 27396 59c827d3c8566d0d9cbf81ac7c0d162a "" "/usr/share/texmf-dist/fonts/type1/public/pl/plr12.pfb" 1572595918 27754 6f5ae55af1b64df2aab0bbeada447136 "" - "/usr/share/texmf-dist/fonts/type1/public/pl/plr7.pfb" 1572595918 27523 c9185de4b4f361086bdc0d056fdd2b09 "" "/usr/share/texmf-dist/fonts/type1/public/pl/plr8.pfb" 1572595918 27613 078d72cee58a40f102986ecdd23ed1c6 "" "/usr/share/texmf-dist/fonts/type1/public/pl/plsy10.pfb" 1572595918 26714 6fe260cd3a16c4a700b121f4edac67f2 "" - "/usr/share/texmf-dist/fonts/type1/public/pl/plti10.pfb" 1572595918 32502 73b348676aac6ae1f3a22f93f5f2370b "" + "/usr/share/texmf-dist/fonts/type1/public/pl/plsy8.pfb" 1572595918 26387 98cf0141874ba26c215635f2b6f404e5 "" "/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii" 1572595918 71627 94eb9990bed73c364d7f53f960cc8c5b "" "/usr/share/texmf-dist/tex/generic/oberdiek/etexcmds.sty" 1572595918 7612 729a8cc22a1ee0029997c7f74717ae05 "" "/usr/share/texmf-dist/tex/generic/oberdiek/ifluatex.sty" 1572595918 7324 2310d1247db0114eb4726807c8837a0e "" @@ -128,9 +147,13 @@ "/usr/share/texmf-dist/tex/latex/amsmath/amsmath.sty" 1572595918 85514 eb45164c0234a1f8e9b74aa2f583bc21 "" "/usr/share/texmf-dist/tex/latex/amsmath/amsopn.sty" 1572595918 4116 32e6abd27229755a83a8b7f18e583890 "" "/usr/share/texmf-dist/tex/latex/amsmath/amstext.sty" 1572595918 2432 8ff93b1137020e8f21930562a874ae66 "" + "/usr/share/texmf-dist/tex/latex/base/fontenc.sty" 1572595918 4571 68999fcec19eaab44a6e13159b4dca8a "" "/usr/share/texmf-dist/tex/latex/base/inputenc.sty" 1572595918 5050 aae684508bdbe288a555910330f17c1b "" "/usr/share/texmf-dist/tex/latex/base/makeidx.sty" 1572595918 1940 56d7e65bf2f613c7fbe5d4befdc5fdf6 "" "/usr/share/texmf-dist/tex/latex/base/ot4enc.def" 1572595918 4740 d5944d0d1491b2196654df90ff9fd0cc "" + "/usr/share/texmf-dist/tex/latex/base/t1enc.def" 1572595918 10687 a7567925dae1870ed1d4a2e413995d60 "" + "/usr/share/texmf-dist/tex/latex/caption/caption.sty" 1572595918 68688 0117141b30e5c5fec86154f541dec0d0 "" + "/usr/share/texmf-dist/tex/latex/caption/caption3.sty" 1572595918 68575 41af57b9d23e31041c5fb63021aa6d56 "" "/usr/share/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty" 1572595918 11128 a53805799bebfed6358fc1658a18e41f "" "/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg" 1572595918 1213 620bba36b25224fa9b7e1ccb4ecb76fd "" "/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg" 1572595918 1224 978390e9c2234eab29404bc21b268d1e "" @@ -165,24 +188,32 @@ "/usr/share/texmf-dist/tex/latex/polski/omxplex.fd" 1572595918 1283 a1205ac8611390c6de04f8d76756c3c4 "" "/usr/share/texmf-dist/tex/latex/polski/ot4cmr.fd" 1572595918 2599 8c16345f9109faed2ca2ff52e16d8a6f "" "/usr/share/texmf-dist/tex/latex/polski/polski.sty" 1572595918 13310 401406f54546887504ce1857a307089b "" + "/usr/share/texmf-dist/tex/latex/subfig/subfig.sty" 1572595918 21369 9ef165ca6df8815c92e693146a376c92 "" "/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty" 1572595918 55589 34128738f682d033422ca125f82e5d62 "" "/usr/share/texmf-dist/web2c/texmf.cnf" 1572595918 33301 a3134070eacafb10b1f371612ce2650d "" - "/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1586643947 334148 1b9d30ff8c861d6082e3e9bfccd8d7eb "" - "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1586643938 8044939 a3f22fc5e900aed94fde03d7fc2cca11 "" + "/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1589405448 334148 1b9d30ff8c861d6082e3e9bfccd8d7eb "" + "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1589405429 8044939 b23304717ecc5ce8d46ad93c0d4cb929 "" "chapter-style.sty" 1585406727 376 a4a2fb4e6d39af51a43bb1e06c2593ad "" - "document.aux" 1587304814 4140 fe92d02eca12017bcd70981e9b88b107 "pdflatex" - "document.ind" 1586120051 0 d41d8cd98f00b204e9800998ecf8427e "makeindex document.idx" - "document.tex" 1587308704 20948 a8e3447372cb1be2bbe8f0d022e247aa "" - "document.toc" 1587304814 1444 0f46b0697d6212c76a3578bd8618e9a9 "pdflatex" + "document.aux" 1590414275 6824 81f4ea3b9dd4f0379db0da6e0d4bdde4 "pdflatex" + "document.ind" 1590408180 0 d41d8cd98f00b204e9800998ecf8427e "makeindex document.idx" + "document.tex" 1590439105 33356 4e4407cf830d411ea836363350d19007 "" + "document.toc" 1590414275 2369 5be341b4fcb8ccdb52a2ec5c3c8dc23d "pdflatex" + "images/autoencoder.png" 1590399556 23857 07547cd5bcc55280ad497e04dca51a4f "" + "images/gradient_descent_1_long.png" 1590334914 10075 03e26f48b0713f31b10c11831a32dc53 "" + "images/gradient_descent_2_long.png" 1590334941 8705 b70a4b02180426a4a74386cd3b33d85e "" "images/linear_reg.png" 1586114366 8534 6b02c28c696018f318c414719b10ba20 "" + "images/naural_model_multi.png" 1590348154 66955 72009d48341e9f9c82c275cdc06d2128 "" + "images/naural_model_one.png" 1590348337 22256 d18cdfcf9147acb57ba38b52c2b99f9a "" + "images/neural_net_1.png" 1590396699 53908 284ec3cd98726d30cdbeda25dd51e89a "" "images/nuty_linia.png" 1586086475 21762 16cba37ab47ffa1339da455c8de72422 "" + "images/sigmoid.png" 1590389797 9716 b83afcf14af2336533ae9a25190c325c "" "images/wartosc_nut.jpg" 1586083515 48213 d311c2cedb2ed53dcf5eff20f70eda80 "" "images/waveform.png" 1586077461 14738 0130027435b8f829d39b6afdaf56775a "" (generated) - "document.log" "/home/altarin/praca-magisterska/docs/document.pdf" "document.pdf" "document.aux" - "document.idx" - "/home/altarin/praca-magisterska/docs/document.log" "document.toc" + "document.log" + "/home/altarin/praca-magisterska/docs/document.log" + "document.idx" diff --git a/docs/document.fls b/docs/document.fls index 1a39eb0..2da4e05 100644 --- a/docs/document.fls +++ b/docs/document.fls @@ -154,6 +154,17 @@ INPUT /usr/share/texmf-dist/tex/latex/listings/lstmisc.sty INPUT /usr/share/texmf-dist/tex/latex/listings/lstmisc.sty INPUT /usr/share/texmf-dist/tex/latex/listings/listings.cfg INPUT /usr/share/texmf-dist/tex/latex/listings/listings.cfg +INPUT /usr/share/texmf-dist/tex/latex/subfig/subfig.sty +INPUT /usr/share/texmf-dist/tex/latex/subfig/subfig.sty +INPUT /usr/share/texmf-dist/tex/latex/caption/caption.sty +INPUT /usr/share/texmf-dist/tex/latex/caption/caption.sty +INPUT /usr/share/texmf-dist/tex/latex/caption/caption3.sty +INPUT /usr/share/texmf-dist/tex/latex/caption/caption3.sty +INPUT /usr/share/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/share/texmf-dist/tex/latex/base/fontenc.sty +INPUT /usr/share/texmf-dist/tex/latex/base/t1enc.def +INPUT /usr/share/texmf-dist/tex/latex/base/t1enc.def +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm1200.tfm OUTPUT /home/altarin/praca-magisterska/docs/document.idx INPUT /home/altarin/praca-magisterska/docs/document.aux INPUT /home/altarin/praca-magisterska/docs/document.aux @@ -184,13 +195,13 @@ INPUT /usr/share/texmf-dist/tex/generic/oberdiek/ifpdf.sty INPUT /usr/share/texmf-dist/tex/generic/oberdiek/ifpdf.sty INPUT /usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg INPUT /usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plcsc10.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plr17.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plbx12.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plr12.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plr17.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plbx12.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plbx12.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/eccc1200.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm2074.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecbx2074.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm1440.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm2488.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecbx2488.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecbx1440.tfm OUTPUT /home/altarin/praca-magisterska/docs/document.pdf INPUT /var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plr8.tfm @@ -218,22 +229,23 @@ INPUT /usr/share/texmf-dist/tex/latex/amsfonts/umsb.fd INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm1095.tfm INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plr10.tfm INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plmi10.tfm INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plsy10.tfm INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm -INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plbx12.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecbx1200.tfm INPUT /home/altarin/praca-magisterska/docs/document.toc INPUT /home/altarin/praca-magisterska/docs/document.toc -INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plbx10.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecbx1095.tfm OUTPUT /home/altarin/praca-magisterska/docs/document.toc INPUT /home/altarin/praca-magisterska/docs/images/linear_reg.png INPUT /home/altarin/praca-magisterska/docs/images/linear_reg.png INPUT /home/altarin/praca-magisterska/docs/images/linear_reg.png -INPUT /home/altarin/praca-magisterska/docs/images/waveform.png -INPUT /home/altarin/praca-magisterska/docs/images/waveform.png -INPUT /home/altarin/praca-magisterska/docs/images/waveform.png +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm0800.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm0600.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plr10.tfm INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plr7.tfm INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plr5.tfm @@ -249,32 +261,65 @@ INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam5.tfm INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm INPUT /usr/share/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm5.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecrm0700.tfm +INPUT /home/altarin/praca-magisterska/docs/images/gradient_descent_1_long.png +INPUT /home/altarin/praca-magisterska/docs/images/gradient_descent_1_long.png +INPUT /home/altarin/praca-magisterska/docs/images/gradient_descent_1_long.png +INPUT /home/altarin/praca-magisterska/docs/images/gradient_descent_2_long.png +INPUT /home/altarin/praca-magisterska/docs/images/gradient_descent_2_long.png +INPUT /home/altarin/praca-magisterska/docs/images/gradient_descent_2_long.png +INPUT /home/altarin/praca-magisterska/docs/images/naural_model_one.png +INPUT /home/altarin/praca-magisterska/docs/images/naural_model_one.png +INPUT /home/altarin/praca-magisterska/docs/images/naural_model_one.png +INPUT /home/altarin/praca-magisterska/docs/images/naural_model_multi.png +INPUT /home/altarin/praca-magisterska/docs/images/naural_model_multi.png +INPUT /home/altarin/praca-magisterska/docs/images/naural_model_multi.png +INPUT /home/altarin/praca-magisterska/docs/images/sigmoid.png +INPUT /home/altarin/praca-magisterska/docs/images/sigmoid.png +INPUT /home/altarin/praca-magisterska/docs/images/sigmoid.png +INPUT /home/altarin/praca-magisterska/docs/images/neural_net_1.png +INPUT /home/altarin/praca-magisterska/docs/images/neural_net_1.png +INPUT /home/altarin/praca-magisterska/docs/images/neural_net_1.png +INPUT /home/altarin/praca-magisterska/docs/images/autoencoder.png +INPUT /home/altarin/praca-magisterska/docs/images/autoencoder.png +INPUT /home/altarin/praca-magisterska/docs/images/autoencoder.png +INPUT /home/altarin/praca-magisterska/docs/images/waveform.png +INPUT /home/altarin/praca-magisterska/docs/images/waveform.png +INPUT /home/altarin/praca-magisterska/docs/images/waveform.png INPUT /home/altarin/praca-magisterska/docs/images/wartosc_nut.jpg INPUT /home/altarin/praca-magisterska/docs/images/wartosc_nut.jpg INPUT /home/altarin/praca-magisterska/docs/images/wartosc_nut.jpg INPUT /home/altarin/praca-magisterska/docs/images/nuty_linia.png INPUT /home/altarin/praca-magisterska/docs/images/nuty_linia.png INPUT /home/altarin/praca-magisterska/docs/images/nuty_linia.png -INPUT /usr/share/texmf-dist/fonts/tfm/public/pl/plti10.tfm +INPUT /usr/share/texmf-dist/fonts/tfm/jknappen/ec/ecti1095.tfm INPUT /home/altarin/praca-magisterska/docs/document.ind INPUT /home/altarin/praca-magisterska/docs/document.ind INPUT /home/altarin/praca-magisterska/docs/document.aux -INPUT /usr/share/texmf-dist/fonts/enc/dvips/pl/plit.enc -INPUT /usr/share/texmf-dist/fonts/enc/dvips/pl/plrm.enc -INPUT /usr/share/texmf-dist/fonts/enc/dvips/pl/plme.enc -INPUT /usr/share/texmf-dist/fonts/enc/dvips/pl/plms.enc +INPUT /usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc INPUT /usr/share/texmf-dist/fonts/enc/dvips/pl/plmi.enc -INPUT /usr/share/texmf-dist/fonts/enc/dvips/pl/plsc.enc +INPUT /usr/share/texmf-dist/fonts/enc/dvips/pl/plms.enc +INPUT /usr/share/texmf-dist/fonts/enc/dvips/pl/plme.enc +INPUT /usr/share/texmf-dist/fonts/enc/dvips/pl/plrm.enc INPUT /usr/share/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb -INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plbx10.pfb -INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plbx12.pfb -INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plcsc10.pfb INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plex10.pfb INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plmi12.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plmi6.pfb INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plmi8.pfb -INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plr10.pfb INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plr12.pfb -INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plr7.pfb INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plr8.pfb INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plsy10.pfb -INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plti10.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/pl/plsy8.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx1095.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx1200.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx1440.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx2074.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx2488.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfcc1200.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm0700.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm0800.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm1000.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm1095.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm1200.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfrm1440.pfb +INPUT /usr/share/texmf-dist/fonts/type1/public/cm-super/sfti1095.pfb diff --git a/docs/document.log b/docs/document.log index ae71e19..741b152 100644 --- a/docs/document.log +++ b/docs/document.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Arch Linux) (preloaded format=pdflatex 2020.4.12) 19 APR 2020 16:00 +This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Arch Linux) (preloaded format=pdflatex 2020.5.13) 25 MAY 2020 15:44 entering extended mode restricted \write18 enabled. file:line:error style messages enabled. @@ -389,8 +389,54 @@ File: lstmisc.sty 2019/09/10 1.8c (Carsten Heinz) File: listings.cfg 2019/09/10 1.8c listings configuration )) Package: listings 2019/09/10 1.8c (Carsten Heinz) -\c@de=\count130 -\c@tw=\count131 + (/usr/share/texmf-dist/tex/latex/subfig/subfig.sty +Package: subfig 2005/06/28 ver: 1.3 subfig package + (/usr/share/texmf-dist/tex/latex/caption/caption.sty +Package: caption 2019/09/01 v3.3d Customizing captions (AR) + (/usr/share/texmf-dist/tex/latex/caption/caption3.sty +Package: caption3 2019/09/01 v1.8d caption3 kernel (AR) +Package caption3 Info: TeX engine: e-TeX on input line 64. +\captionmargin=\dimen169 +\captionmargin@=\dimen170 +\captionwidth=\dimen171 +\caption@tempdima=\dimen172 +\caption@indent=\dimen173 +\caption@parindent=\dimen174 +\caption@hangindent=\dimen175 +Package caption Info: Unknown document class (or package), +(caption) standard defaults will be used. +) + +Package caption Warning: Unsupported document class (or package) detected, +(caption) usage of the caption package is not recommended. +See the caption package documentation for explanation. + +Package caption Info: \@makecaption = \long macro:#1#2->\addvspace \abovecaptionskip \bgroup \centeredlast #1.\enspace #2\par \egroup \vskip \belowcaptionskip . +\c@caption@flags=\count130 +\c@ContinuedFloat=\count131 +Package caption Info: listings package is loaded. +) +\c@KVtest=\count132 +\sf@farskip=\skip55 +\sf@captopadj=\dimen176 +\sf@capskip=\skip56 +\sf@nearskip=\skip57 +\c@subfigure=\count133 +\c@subfigure@save=\count134 +\c@lofdepth=\count135 +\c@subtable=\count136 +\c@subtable@save=\count137 +\c@lotdepth=\count138 +\sf@top=\skip58 +\sf@bottom=\skip59 +) (/usr/share/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2018/08/11 v2.0j Standard LaTeX package + (/usr/share/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2018/08/11 v2.0j Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 48. +)) +\c@de=\count139 +\c@tw=\count140 \@indexfile=\write4 \openout4 = `document.idx'. @@ -409,32 +455,32 @@ LaTeX Warning: Label `' multiply defined. ) \openout1 = `document.aux'. -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 44. -LaTeX Font Info: ... okay on input line 44. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 44. -LaTeX Font Info: ... okay on input line 44. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 44. -LaTeX Font Info: ... okay on input line 44. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 44. -LaTeX Font Info: ... okay on input line 44. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 44. -LaTeX Font Info: ... okay on input line 44. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 44. -LaTeX Font Info: ... okay on input line 44. -LaTeX Font Info: Checking defaults for OT4/cmr/m/n on input line 44. -LaTeX Font Info: ... okay on input line 44. +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 55. +LaTeX Font Info: ... okay on input line 55. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 55. +LaTeX Font Info: ... okay on input line 55. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 55. +LaTeX Font Info: ... okay on input line 55. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 55. +LaTeX Font Info: ... okay on input line 55. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 55. +LaTeX Font Info: ... okay on input line 55. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 55. +LaTeX Font Info: ... okay on input line 55. +LaTeX Font Info: Checking defaults for OT4/cmr/m/n on input line 55. +LaTeX Font Info: ... okay on input line 55. (/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii [Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count132 -\scratchdimen=\dimen169 +\scratchcounter=\count141 +\scratchdimen=\dimen177 \scratchbox=\box42 -\nofMPsegments=\count133 -\nofMParguments=\count134 +\nofMPsegments=\count142 +\nofMParguments=\count143 \everyMPshowfont=\toks35 -\MPscratchCnt=\count135 -\MPscratchDim=\dimen170 -\MPnumerator=\count136 -\makeMPintoPDFobject=\count137 +\MPscratchCnt=\count144 +\MPscratchDim=\dimen178 +\MPnumerator=\count145 +\makeMPintoPDFobject=\count146 \everyMPtoPDFconversion=\toks36 ) (/usr/share/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf @@ -472,14 +518,17 @@ Package grfext Info: Graphics extension search list: (/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live )) ABD: EveryShipout initializing macros -\c@lstlisting=\count138 +\c@lstlisting=\count147 +Package caption Info: Begin \AtBeginDocument code. +Package caption Info: subfig package v1.3 is loaded. +Package caption Info: End \AtBeginDocument code. -Underfull \hbox (badness 10000) in paragraph at lines 85--86 +Underfull \hbox (badness 10000) in paragraph at lines 96--97 [] -Underfull \hbox (badness 10000) in paragraph at lines 87--88 +Underfull \hbox (badness 10000) in paragraph at lines 98--99 [] @@ -489,34 +538,34 @@ Underfull \hbox (badness 10000) in paragraph at lines 87--88 ] -LaTeX Font Info: Trying to load font information for OML+plm on input line 125. +LaTeX Font Info: Trying to load font information for OML+plm on input line 136. (/usr/share/texmf-dist/tex/latex/polski/omlplm.fd File: omlplm.fd 2008/02/24 v1.2.1 Font defs for fonts PL (MW) ) -LaTeX Font Info: Trying to load font information for OMS+plsy on input line 125. +LaTeX Font Info: Trying to load font information for OMS+plsy on input line 136. (/usr/share/texmf-dist/tex/latex/polski/omsplsy.fd File: omsplsy.fd 2008/02/24 v1.2.1 Font defs for fonts PL (MW) ) -LaTeX Font Info: Trying to load font information for OMX+plex on input line 125. +LaTeX Font Info: Trying to load font information for OMX+plex on input line 136. (/usr/share/texmf-dist/tex/latex/polski/omxplex.fd File: omxplex.fd 2008/02/24 v1.2.1 Font defs for fonts PL (MW) ) LaTeX Font Info: External font `plex10' loaded for size -(Font) <12> on input line 125. +(Font) <12> on input line 136. LaTeX Font Info: External font `plex10' loaded for size -(Font) <8> on input line 125. +(Font) <8> on input line 136. LaTeX Font Info: External font `plex10' loaded for size -(Font) <6> on input line 125. -LaTeX Font Info: Trying to load font information for U+msa on input line 125. +(Font) <6> on input line 136. +LaTeX Font Info: Trying to load font information for U+msa on input line 136. (/usr/share/texmf-dist/tex/latex/amsfonts/umsa.fd File: umsa.fd 2013/01/14 v3.01 AMS symbols A ) -LaTeX Font Info: Trying to load font information for U+msb on input line 125. +LaTeX Font Info: Trying to load font information for U+msb on input line 136. (/usr/share/texmf-dist/tex/latex/amsfonts/umsb.fd File: umsb.fd 2013/01/14 v3.01 AMS symbols B ) LaTeX Font Info: External font `plex10' loaded for size -(Font) <10.95> on input line 133. +(Font) <10.95> on input line 144. [3] [4 @@ -536,108 +585,158 @@ LaTeX Font Info: External font `plex10' loaded for size ] -Package xcolor Warning: Incompatible color definition on input line 166. +Package xcolor Warning: Incompatible color definition on input line 177. -Overfull \vbox (16.08192pt too high) detected at line 166 +Overfull \vbox (15.92963pt too high) detected at line 177 [] Rozdzia\PlPrIeC {\l } 1. - + File: images/linear_reg.png Graphic file (type png) -Package pdftex.def Info: images/linear_reg.png used on input line 191. +Package pdftex.def Info: images/linear_reg.png used on input line 205. (pdftex.def) Requested size: 398.33858pt x 265.57306pt. -[13] -Missing character: There is no ; in font nullfont! -Missing character: There is no ; in font nullfont! -Missing character: There is no ; in font nullfont! - [14 ] [15] [16 +[13] [14 ] +LaTeX Font Info: External font `plex10' loaded for size +(Font) <10> on input line 238. +LaTeX Font Info: External font `plex10' loaded for size +(Font) <7> on input line 238. +LaTeX Font Info: External font `plex10' loaded for size +(Font) <5> on input line 238. + [15] + +File: images/gradient_descent_1_long.png Graphic file (type png) + +Package pdftex.def Info: images/gradient_descent_1_long.png used on input line 256. +(pdftex.def) Requested size: 142.26378pt x 189.69504pt. + +File: images/gradient_descent_2_long.png Graphic file (type png) + +Package pdftex.def Info: images/gradient_descent_2_long.png used on input line 258. +(pdftex.def) Requested size: 142.26378pt x 189.69504pt. + [16 ] + +File: images/naural_model_one.png Graphic file (type png) + +Package pdftex.def Info: images/naural_model_one.png used on input line 289. +(pdftex.def) Requested size: 227.62204pt x 257.2098pt. + +Underfull \vbox (badness 2142) has occurred while \output is active [] + + [17 ] + +File: images/naural_model_multi.png Graphic file (type png) + +Package pdftex.def Info: images/naural_model_multi.png used on input line 315. +(pdftex.def) Requested size: 227.62204pt x 230.82245pt. + [18 ] + +File: images/sigmoid.png Graphic file (type png) + +Package pdftex.def Info: images/sigmoid.png used on input line 362. +(pdftex.def) Requested size: 398.33858pt x 265.57306pt. + [19] + +File: images/neural_net_1.png Graphic file (type png) + +Package pdftex.def Info: images/neural_net_1.png used on input line 392. +(pdftex.def) Requested size: 227.62204pt x 148.0421pt. + +Underfull \vbox (badness 10000) has occurred while \output is active [] + + [20 ] +Underfull \vbox (badness 2818) has occurred while \output is active [] + + [21 ] + +File: images/autoencoder.png Graphic file (type png) + +Package pdftex.def Info: images/autoencoder.png used on input line 418. +(pdftex.def) Requested size: 227.62204pt x 216.12256pt. + +Underfull \vbox (badness 10000) has occurred while \output is active [] + + [22 ] [23] [24 ] -Package xcolor Warning: Incompatible color definition on input line 263. +Package xcolor Warning: Incompatible color definition on input line 440. -Overfull \vbox (16.08192pt too high) detected at line 263 +Overfull \vbox (15.92963pt too high) detected at line 440 [] Rozdzia\PlPrIeC {\l } 2. - + File: images/waveform.png Graphic file (type png) -Package pdftex.def Info: images/waveform.png used on input line 294. +Package pdftex.def Info: images/waveform.png used on input line 471. (pdftex.def) Requested size: 398.33858pt x 265.57306pt. -LaTeX Font Info: External font `plex10' loaded for size -(Font) <10> on input line 306. -LaTeX Font Info: External font `plex10' loaded for size -(Font) <7> on input line 306. -LaTeX Font Info: External font `plex10' loaded for size -(Font) <5> on input line 306. -Underfull \hbox (badness 10000) in paragraph at lines 306--306 -[][][]\OT4/cmr/m/n/10 ¹ródlo: http://www.classicalmusiccity.com/search/article.php?vars=446/ +Underfull \hbox (badness 10000) in paragraph at lines 483--483 +[][][]\T1/cmr/m/n/10 ¹ródlo: http://www.classicalmusiccity.com/search/article.php?vars=446/ [] -[17] - +[25] + File: images/wartosc_nut.jpg Graphic file (type jpg) -Package pdftex.def Info: images/wartosc_nut.jpg used on input line 314. +Package pdftex.def Info: images/wartosc_nut.jpg used on input line 491. (pdftex.def) Requested size: 398.33858pt x 207.57985pt. -Overfull \hbox (48.05707pt too wide) in paragraph at lines 315--315 - []\OT4/cmr/m/n/10.95 Rysunek 2.2.¹ródlo: https://www.infomusic.pl/poradnik/46934,poradnik-teoria-muzyki-rytm +Overfull \hbox (77.12407pt too wide) in paragraph at lines 492--492 +[]\T1/cmr/m/n/12 Rysunek 2.2: |¹ró-dlo: https://www.infomusic.pl/poradnik/46934,poradnik-teoria-muzyki-rytm [] -[18 ] - +[26 ] + File: images/nuty_linia.png Graphic file (type png) -Package pdftex.def Info: images/nuty_linia.png used on input line 352. +Package pdftex.def Info: images/nuty_linia.png used on input line 529. (pdftex.def) Requested size: 398.33858pt x 74.14209pt. - [19 ] [20 ] [21] [22] + [27 ] [28 ] [29] [30] -Package xcolor Warning: Incompatible color definition on input line 439. +Package xcolor Warning: Incompatible color definition on input line 616. -Overfull \vbox (16.08192pt too high) detected at line 439 +Overfull \vbox (15.92963pt too high) detected at line 616 [] Rozdzia\PlPrIeC {\l } 3. -[23 +[31 -] [24 +] [32 ] -Package xcolor Warning: Incompatible color definition on input line 444. +Package xcolor Warning: Incompatible color definition on input line 621. -Overfull \vbox (16.08192pt too high) detected at line 444 +Overfull \vbox (15.92963pt too high) detected at line 621 [] Rozdzia\PlPrIeC {\l } 4. -[25] [26 +[33] [34 -] (/home/altarin/praca-magisterska/docs/document.ind) [27] (/home/altarin/praca-magisterska/docs/document.aux) +] (/home/altarin/praca-magisterska/docs/document.ind) [35] (/home/altarin/praca-magisterska/docs/document.aux) LaTeX Warning: There were multiply-defined labels. ) Here is how much of TeX's memory you used: - 14866 strings out of 492167 - 280040 string characters out of 6131558 - 332873 words of memory out of 5000000 - 18912 multiletter control sequences out of 15000+600000 - 20478 words of font info for 62 fonts, out of 8000000 for 9000 + 16156 strings out of 492167 + 300928 string characters out of 6131558 + 350884 words of memory out of 5000000 + 20169 multiletter control sequences out of 15000+600000 + 27578 words of font info for 68 fonts, out of 8000000 for 9000 1141 hyphenation exceptions out of 8191 - 60i,11n,68p,817b,1116s stack positions out of 5000i,500n,10000p,200000b,80000s -{/usr/share/texmf-dist/fonts/enc/dvips/pl/plit.enc}{/usr/share/texmf-dist/fonts/enc/dvips/pl/plrm.enc}{/usr/share/texmf-dist/fonts/enc/dvips/pl/plme.enc}{/usr/share/texmf-dist/fonts/enc/dvips/pl/plms.enc}{/usr/share/texmf-dist/fonts/enc/dvips/pl/plmi.enc}{/usr/share/texmf-dist/fonts/enc/dvips/pl/plsc.enc} -Output written on /home/altarin/praca-magisterska/docs/document.pdf (27 pages, 213966 bytes). + 60i,12n,54p,816b,1094s stack positions out of 5000i,500n,10000p,200000b,80000s +{/usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc}{/usr/share/texmf-dist/fonts/enc/dvips/pl/plmi.enc}{/usr/share/texmf-dist/fonts/enc/dvips/pl/plms.enc}{/usr/share/texmf-dist/fonts/enc/dvips/pl/plme.enc}{/usr/share/texmf-dist/fonts/enc/dvips/pl/plrm.enc} +Output written on /home/altarin/praca-magisterska/docs/document.pdf (35 pages, 618938 bytes). PDF statistics: - 160 PDF objects out of 1000 (max. 8388607) - 110 compressed objects within 2 object streams + 230 PDF objects out of 1000 (max. 8388607) + 153 compressed objects within 2 object streams 0 named destinations out of 1000 (max. 500000) - 33 words of extra memory for PDF output out of 10000 (max. 10000000) + 68 words of extra memory for PDF output out of 10000 (max. 10000000) diff --git a/docs/document.pdf b/docs/document.pdf index 128b7f5..29f6e29 100644 Binary files a/docs/document.pdf and b/docs/document.pdf differ diff --git a/docs/document.synctex.gz b/docs/document.synctex.gz index 28750b0..98c3ddb 100644 Binary files a/docs/document.synctex.gz and b/docs/document.synctex.gz differ diff --git a/docs/document.tex b/docs/document.tex index e11c5c7..65ed363 100644 --- a/docs/document.tex +++ b/docs/document.tex @@ -9,6 +9,17 @@ \usepackage{chapter-style} \usepackage{tikz} \usepackage{listings} +\usepackage{subfig} + +\usepackage[T1]{fontenc} +% \usepackage[utf8]{inputenc} + +% \usepackage{amsmath} + +\newcommand{\textoperatorname}[1]{% + \operatorname{\textnormal{#1}}% +} + \textheight 21.1 cm @@ -165,25 +176,28 @@ JednoczeÅ›nie przyjmujÄ™ do wiadomoÅ›ci, że przypisanie sobie, w pracy dyplomow \chapter{Wprowadzenie do sieci neuronowych} - W tym rozdziale przedstawiÄ™ podstawy dziaÅ‚ania sieci neuronowych, opiszÄ™ dziaÅ‚anie autoencoderów oraz modelu Seq2Seq, ponieważ tych modeli użyÅ‚em do skonstruowania architektury generujÄ…cej muzykÄ™. + Aby lepiej zrozumieć, w jaki sposób odpowiednio skonstruowane sieci neuronowe potrafiÄ… sprostać takiemu zadaniu jak generowanie muzyki, w tym rozdziale przedstawiÄ™ od podstaw zasady dziaÅ‚ania sieci neuronowych. OpiszÄ™ w jaki sposób można od regresji liniowej przejść do prostych sieci oraz w jaki sposób uczy siÄ™ sieci neuronowe. Ostatecznie przedstawiÄ™ architektury które wykorzystaÅ‚em w projekcie. \section{Regresja liniowa} - PodstawÄ… wszystkich sieci neuronowych, jest regresja liniowa. W statystyce wykorzystywana aby wyjaÅ›nić liniowe zaleznoÅ›ci miÄ™dzy zmiennymi. + PodstawÄ… wszystkich sieci neuronowych, jest regresja liniowa. W statystyce wykorzystywana aby wyjaÅ›nić liniowe zaleznoÅ›ci miÄ™dzy zmiennymi. Wyróżnia siÄ™ dwa rodzaje Prosty model regresji liniowej dla jednej zmiennej można opisać wzorem. - \[\hat{y} = ax+b\] + \[y = ax+b+\epsilon\] gdzie, \begin{itemize} - \item $\hat{y}$ jest to estymacja zmiennej objaÅ›nianej, + \item $y$ jest zmiennÄ… objaÅ›nianÄ…, \item $x$ jest to zmienna objaÅ›niajÄ…ca, \item $a$ jest parametrem modelu, - \item $b$ jest wyrazem wolnym. + \item $b$ jest wyrazem wolnym modelu. + \item $\epsilon$ jest skÅ‚adnikiem losowym. \end{itemize} \medskip - Zadaniem jest znalezienie takiego parametru $a\in \mathbb{R}$ oraz wyrazu wolnego $b \in \mathbb{R}$, aby dla znanych wartoÅ›ci $x \in \mathbb{R}$ estymacja zmiennej objasnianej $\hat{y} \in \mathbb{R}$ najlepiej opisywaÅ‚a zmiennÄ… objasnanÄ… $y \in \mathbb{R}$ + + + Zadaniem jest znalezienie takiego parametru $a\in \mathbb{R}$ oraz wyrazu wolnego $b \in \mathbb{R}$, aby dla znanych wartoÅ›ci $x \in \mathbb{R}$ estymacja zmiennej objasnianej $\hat{y} \in \mathbb{R}$ najlepiej opisywaÅ‚a zmiennÄ… objasnanÄ… $y \in \mathbb{R}$. Tak zdefiniowany model, opisuje zmiennÄ… $y$ z dokÅ‚adnoÅ›ciÄ… do skÅ‚adnika losowego. W praktyce oznacza to że szacowane modele bÄ™dÄ… przybliżeniem opisywanych zależnoÅ›ci. \medskip \begin{figure}[!htb] @@ -195,71 +209,234 @@ JednoczeÅ›nie przyjmujÄ™ do wiadomoÅ›ci, że przypisanie sobie, w pracy dyplomow Wartość zmiennej objaÅ›nianej $y$ można również opisać za pomocÄ… wielu zmiennych objaÅ›niajÄ…ych. Wtedy dla zmiennych objaÅ›niajÄ…cej $x_1, x_2, ... , x_n \in \mathbb{R}$ szukamy parametrów $\theta_1, \theta_2, ... ,\theta_n \in \mathbb{R}$. Otrzymany w ten sposób model nazywany jest również hipotezÄ… i oznaczamy go $h(x)$. - \[h(x) = b + \theta_1x_2 + \theta_2x_2 + ... + \theta_nx_n = b + \sum_{i=1}^{n} \theta_ix_i\] + \[h(x) = b + \theta_1x_2 + \theta_2x_2 + ... + \theta_nx_n + \epsilon = b + \sum_{i=1}^{n} \theta_ix_i + \epsilon\] - \section{Funkcja kosztu oraz metody gradientowe} + Rysunek~\ref{fig:linreg} przedstawia przykÅ‚adowy model regresji liniowej jednej zmiennej, dopasowany do zbioru. + \section{Uczenie modelu} - Celem uczenia modelu jest znalezienie ogólnych parametrów, aby model dla każdej pary $x, y$ zwracaÅ‚ wartoÅ›ci $\hat{y}$ najlepiej opisujÄ…ce caÅ‚e zjawisko wedÅ‚ug pewnego kryterium. W ten sposób jesteÅ›my wstanie znaleźć przybliżenie funkcji $h(x)$. + Celem uczenia modelu jest znalezienie ogólnych parametrów, aby model dla wartoÅ›ci wejÅ›ciowych $x$ zwracaÅ‚ wartoÅ›ci predykcji $\hat{y}$ najlepiej opisujÄ…ce caÅ‚e zjawisko wedÅ‚ug pewnego kryterium. Formalnie, aby suma wszystkich różnic miÄ™dzy predykcjÄ… a rzeczywistoÅ›ciÄ… byÅ‚a najmniejsza. + + \[ + \textoperatorname{bÅ‚Ä…d} = \sum_{i=1}^m | \textoperatorname{predykcja} - \textoperatorname{rzeczywistość} | + \] , gdzie $m \in \mathbb{N}$ jest wielkoÅ›ciÄ… zbioru danych jakim dysponujemy. MinimalizujÄ…c bÅ‚ad dla modelu jesteÅ›my wstanie znaleźć przybliżenie funkcji $h(x)$. \subsection{Funkcja kosztu} - W tym celu używa siÄ™ funcji $J_\theta(h)$, która zwraca wartość bÅ‚Ä™du miÄ™dzy wartoÅ›ciami $h(x)$ oraz $y$ dla wszystkich obserwacji. Taka funckcja nazywana jest funkcjÄ… kosztu. + W tym celu używa siÄ™ funkcji $J_\theta(h)$, która zwraca wartość bÅ‚Ä™du miÄ™dzy wartoÅ›ciami $h(x)$ oraz $y$ dla wszystkich obserwacji. Taka funkcja nazywana jest funkcjÄ… kosztu (cost function). - Dla przykÅ‚adu regresji liniowej funkcjÄ… kosztu może być odchylenie Å›rednio kwadratowe. Wtedy funkcja kosztu przyjmuje postać: - \[ J_\theta(h) = \frac{1}{m}\sum_{i=1}^{m}(y_i-h(x_i))^2 \] - gdzie $m \in \mathbb{N}$ jest liczbÄ… obserwacji. + Dla przykÅ‚adu regresji liniowej funkcjÄ… kosztu może być bÅ‚Ä…d Å›redniokwadratowy (mean squared error). Wtedy funkcja kosztu przyjmuje postać: + \[ J_\theta(h) = \frac{1}{m}\sum_{i=1}^{m}(y_i-h(x_i))^2 \]. - Przy zdefiniowanej funkcji kosztu, proces uczenia sprowadza siÄ™ do znalezienia takich parametrów funckji $h(x)$ aby funkcja kosztu byÅ‚a najmniejsza. Jest to problem optymalizacyjny sprowadzajÄ…cy siÄ™ do znalezienia globalnego minimum funkcji. + Przy zdefiniowanej funkcji kosztu proces uczenia sprowadza siÄ™ do znalezienia takich parametrów funkcji $h(x)$, aby funkcja kosztu byÅ‚a najmniejsza. Jest to problem optymalizacyjny sprowadzajÄ…cy siÄ™ do znalezienia globalnego minimum funkcji. - \subsection{Metoda gradientu prostego} - Jednym z algorytmów stosowanych do rozwiÄ…zania powyższego problemu optymalizacji jest metoda gradientu prostego (ang. gradient descent). + \subsection{Znajdowanie minimum funkcji} + + Aby znaleźć minimum funkcji $f$ możemy skorzystać z analizy matematycznej. Wiemy, że jeÅ›li funkcja $f$ jest różniczkowalna to funkcja może przyjmować minimum lokalne, gdy $f'(x_0) = 0$ dla pewnego $x_0$ z dzieniny funkcji $f$. Dodatkowo jeÅ›li istanieje otoczenie punktu $x_0$, że dla wszystkich punktów z tego otoczenia speÅ‚niona jest nierówność: + \[ f(x)>f(x_0) \] + to znaleziony punkt $x_0$ jest minimum lokalnym. + W teorii, należaÅ‚oby zatem wybrać takÄ… funkcjÄ™ kosztu, aby byÅ‚a różniczkowalna. Obliczyć równanie $J_\theta'(h)=0$, nastÄ™pnie dla otrzymanych wyników sprawdzić powyższÄ… nierówność oraz wybrać najmniejszy wynik ze wszystkich\footnote{źródlo: Analiza matematyczna, Krysicki WÅ‚odarski, s.187 }. W praktyce rozwiÄ…zanie takie równania ze wzglÄ™du na jego zÅ‚ożoność może siÄ™ okazać niewykonalne. Aby rozwiÄ…zać ten problem powstaÅ‚y inne metody, które pozwalajÄ… szukać ekstremów funkcji, jednak nigdy nie bÄ™dziemy mieli pewnoÅ›ci że otrzymany wynik jest minimum globalnym funkcji kosztu. + + \subsection{Metody gradientowe} + + Metody gradientowe sÄ… to iteracyjne algorytmy sÅ‚użące do znajdowania minimum funkcji. Aby móc skorzystać z metod gradientowych analizowana funkcja musi być ciÄ…gÅ‚a oraz różniczkowalna. Sposób dziaÅ‚ania ich można intuicyjnie opisać w nastepujÄ…cych krokach. + 1. Wybierz punkt poczÄ…tkowy. + + 2. Oblicz kierunek, w którym funkcja maleje. + + 3. Przejdź do kolejnego punktu zgodnie obliczonym kierunkiem o pewnÄ… maÅ‚Ä… odlegÅ‚ość. + + 4. Powtarzamy, aż osiÄ…gniemy minimum funkcji. + + WizualizacjÄ™ algorytmu zostaÅ‚a przedstawiona na rysunku~\ref{fig:gradient}. \begin{figure}[!htb] \centering - \def\layersep{2.5cm} - \begin{tikzpicture}[shorten >=1pt,->,draw=black!50, node distance=\layersep] + \subfloat[Wyznaczenie gradientu]{{\includegraphics[width=5cm]{images/gradient_descent_1_long.png} }}% + \qquad + \subfloat[Iteracja kolejnych punktów]{{\includegraphics[width=5cm]{images/gradient_descent_2_long.png} }}% + \caption{Wizualizacja algorytmu gradientu prostego}% + \label{fig:gradient} + \end{figure} + \medskip - \tikzstyle{every pin edge}=[<-,shorten <=1pt] - \tikzstyle{neuron}=[circle,fill=black!25,minimum size=17pt,inner sep=0pt] - \tikzstyle{input neuron}=[neuron, fill=black!50]; - \tikzstyle{output neuron}=[neuron, fill=black!50]; - \tikzstyle{hidden neuron}=[neuron, fill=black!50]; - \tikzstyle{annot} = [text width=4em, text centered] + Dla funkcji $h(x)$ należy ustalić wartość poczÄ…tkowÄ… $\Theta_0$, dla wszystkich parametrów $\theta_1$ ... $\theta_n$. - % Draw the input layer nodes - \foreach \name / \y in {1,...,4} - % This is the same as writing \foreach \name / \y in {1/1,2/2,3/3,4/4} - \node[input neuron, pin=left:Input \#\y] (I-\name) at (0,-\y) {}; + \[ \Theta_0 = \left[ \theta_1, \theta_2, ... ,\theta_n \right] \] - % Draw the hidden layer nodes - \foreach \name / \y in {1,...,5} - \path[yshift=0.5cm] - node[hidden neuron] (H-\name) at (\layersep,-\y cm) {}; + NastÄ™pnie policzyć wszystkie pochodne czeÅ›ciowe $\frac{\partial J_\theta(h)}{\partial \theta_i}$. Otrzymamy w ten sposób gradient $\nabla J_\theta(h)$, gdzie + \[ + \nabla J_\theta(h) = \left[ \frac{\partial J_\theta(h)}{\partial \theta_1}, \frac{\partial J_\theta(h)}{\partial \theta_2}, ... , \frac{\partial J_\theta(h)}{\partial \theta_n} \right] + \] + + NastÄ™pnie obliczyć element $\Theta_{k+1}$, ze wzoru + + \[ + \Theta_{k+1} = \Theta_{k} - \alpha\nabla J_\theta(h) + \] + gdzie $\alpha \in \mathbb{R}$ jest współczynnikiem uczenia (learning rate). Proces ten należy powtarzać do pewnego momentu. Najczęśćiej z góry okreÅ›lonÄ… liczbÄ™ razy lub do momentu, gdy uzysk funkcji kosztu spowodowany nastepnÄ… iteracjÄ… jest mniejszy niż ustalona wartość. Otrzymany w ten sposób wektor parametrów $\Theta_k$ jest wynikiem algorytmu.\footnote{Deep Learning techniques for music geneation - A survay s.44} + + WykorzystujÄ…c metody gradientowe, otrzymujemy wyuczony model. Parametry $\theta_i$ modelu $h(x)$, zostaÅ‚y ustalone w taki sposób, aby bÅ‚Ä…d miÄ™dzy predykcjÄ…, a rzeczywistoÅ›ciÄ… byÅ‚ najmniejszy. + + \section{Regresja liniowa jako model sieci neuronowej} + \label{section:linreg} + + Omawiany model regresji, możemy zapisać w sposób graficzny, tak jak przedstawiono na rysunku ~\ref{fig:neural_model_one}. - % Draw the output layer node - \node[output neuron,pin={[pin edge={->}]right:Output}, right of=H-3] (O) {}; - - % Connect every node in the input layer with every node in the - % hidden layer. - \foreach \source in {1,...,4} - \foreach \dest in {1,...,5} - \path (I-\source) edge (H-\dest); - - % Connect every node in the hidden layer with the output layer - \foreach \source in {1,...,5} - \path (H-\source) edge (O); - - % Annotate the layers - \node[annot,above of=H-1, node distance=1cm] (hl) {Hidden layer}; - \node[annot,left of=hl] {Input layer}; - \node[annot,right of=hl] {Output layer}; - \end{tikzpicture} - \caption{źródlo: PrzykÅ‚ad sieci neuronowej} - \label{fig:neuralnet1} + \begin{figure}[!htb] + \centering + \includegraphics[width=8cm]{images/naural_model_one.png} + \caption{Regresja liniowa jako model sieci neuronowej} + \label{fig:neural_model_one} \end{figure} + Każdy wÄ™zeÅ‚ z lewej strony reprezentuje zmiennÄ… objaÅ›niajÄ…cÄ… $x_i$. PoÅ‚Ä…czenia nazywane sÄ… wagami i reprezentujÄ… one parametry $\theta_i$. WÄ™zeÅ‚ z prawej strony oznaczony jako $\hat{y}$, jest sumÄ… iloczynów wag oraz wartoÅ›ci wÄ™złów z prawej strony. Wtedy + + \[ + \hat{y} = + \begin{bmatrix} + 1 \\ x_1 \\ x_2 \\ \vdots \\ x_n + \end{bmatrix} + \begin{bmatrix} + b & \theta_1 & \theta_2 & \dots & \theta_n + \end{bmatrix} + = + b + x_1\theta_1 + x_2\theta_2 + \dots + x_n\theta_n = + b + \sum_{i=1}^n x_i\theta_i + \] + + co jest równoważne omawianemu modelowi regresji liniowej. WÄ™zÅ‚y sieci nazywane sÄ… neuronami a wyraz wolny modelu $b$, nazywany jest biasem (bias). + + W Å‚atwy sposób możemy rozbudować ten model, do regresji liniowej wielu zmiennych. PredykcjÄ… modelu nie bÄ™dzie jak do tej pory jedna wartość $\hat{y}$ tylko wektor wartoÅ›ci $\hat{y_1}, \hat{y_2}, \dots , \hat{y_m}$, który oznaczać bedziemy jako $\hat{Y}$. Model ten zostal przedstawiony na rysunku~\ref{fig:neural_model_multi}. + + \begin{figure}[!htb] + \centering + \includegraphics[width=8cm]{images/naural_model_multi.png} + \caption{Regresja liniowa wielu zmiennych jako model sieci nauronowej} + \label{fig:neural_model_multi} + \end{figure} + + Dla uogólnienia, pojedyncze wagi modelu zapisywać bÄ™dÄ™ jako $w_{nm}$, natomiast macierz wag jako $W$. Algebricznie zapisalibyÅ›my ten model jako + + \[ + \begin{bmatrix} + 1 & 1 & \dots & 1\\ + x_{11} & x_{12} & \dots & x_{1m} \\ + x_{21} & x_{22} & \dots & x_{2m} \\ + \vdots & \vdots & \ddots & \vdots \\ + x_{n1} & x_{12} & \dots & x_{nm} \\ + \end{bmatrix} + \begin{bmatrix} + b_1 & w_{11} & w_{12} & \dots & w_{1n} \\ + b_2 & w_{21} & w_{22} & \dots & w_{2n} \\ + \vdots & \vdots & \vdots & \ddots & \vdots \\ + b_m & w_{m1} & w_{m2} & \dots & w_{mn} \\ + \end{bmatrix} + = + \begin{bmatrix} + h_1(x) \\ h_2(x) \\ \vdots \\ h_m(x) + \end{bmatrix} + = + \begin{bmatrix} + \hat{y_1} \\ \hat{y_2} \\ \vdots \\ \hat{y_m} + \end{bmatrix} + \] + + \[ + b+XW = \hat{Y} + \] + + Gdzie, $n$ jest liczbÄ… zmiennych niezależnych, $m$ jest liczbÄ… zmiennych zaleznych, $X$ jest rozszerzonym do macierzy o rozmiarach $m$ x $n$ wektorem zmiennych objaÅ›niajÄ…cych w taki sposób, że $x_{i1} = x_{i2} = \dots = x_{in}$ dla $i = 1, 2, ..., m$, $W$ jest macierzÄ… wag o rozmiarach $n$ x $m$ natomiast $b$ jest sumÄ… wyrazów wolnych $b_1, ... ,b_m$ nazywanÄ… biasem (bias). Możemy zauważyć, że model dla wielu zmiennych, jest wieloma modelami dla jednej zmiennej, gdzie każdy model operuje na tych samych danych wejÅ›ciowych. Taki model może być uznany na sieć neuronowÄ… i nazywany jest perceptronem. + + \section{Funkcje aktywacji} + + Omawiany model sÅ‚uży rozwiÄ…zywaniu problemu regresji. Ponieważ wartoÅ›ci predykcji nie sÄ… uregulowane, moga przyjmować wartoÅ›ci z $\mathbb{R}$. Aby przeksztaÅ‚cić ten model aby móc go wykorzystać do rozwiÄ…zania problemu klasifikacji, należy dodatkowo na otrzymanym wektorze $\hat{Y}$ wykonać pewnÄ… funkcjÄ™, która przeksztaÅ‚ci wynik. W tym celu uzywamy funkcji aktywacji (activation function). Istnieje wiele rodzaji funkcji aktywacji, każda posiada inny wpÅ‚yw na model. NajpopularnijeszÄ… grupÄ… fukcji sÄ… funkcje sigmoidalne (sigmoid functions). JednÄ… z nich jest funkcja logistyczna (logistic curve) o wzrorze + \[ + \sigma(x) = \frac{1}{1+e^{-x}} + \] + oraz wykresie przedstawionym na rysunku~\ref{fig:sigmoid} + + \begin{figure}[!htb] + \centering + \includegraphics[width=\linewidth]{images/sigmoid.png} + \caption{Funkcja logistyczna} + \label{fig:sigmoid} + \end{figure} + + Funkcja logistyczna, ma pewne użyteczne wÅ‚aÅ›ciwoÅ›ci, które pozwolÄ… kontrolować wartoÅ›ci wÄ™złów, oraz zamienić wartoÅ›ci z caÅ‚ego $\mathbb{R}$ do wartoÅ›ci z przedziaÅ‚u $(0,1)$. DziÄ™ki tej wÅ‚asciwoÅ›ci, funkcja logistyczna jest czÄ™sto uzywana aby otrzymać prawdopodobieÅ„stwo wystÄ…pienia pewnego zdarzenia. Dodatkowo funkcja logistyczna szybko przyjmuje wartoÅ›ci skrajne, co oznacza że dla bardzo dużych wartoÅ›ci ujemnych i bardzo dużych wartoÅ›ci dodatnich, funkcja staje siÄ™ maÅ‚o wrażliwa na zmiany wartoÅ›ci, wraz ze zmianÄ… wartoÅ›ci argumentu. \footnote{Deep Learning Book, s.66} + + W ten sposób, możemy w Å‚atwy sposób zmienić model regresji liniowej, na model regresji logistycznej. + + \[ + \sigma(b+XW) = \hat{Y} + \] + + W dalszych czeÅ›ciach pracy, kiedy bedÄ™ używaÅ‚ funcji aktywacji, nie wskazujÄ…c na konkretnÄ… funckcjÄ™ bÄ™de wykorzystywaÅ‚ oznaczenie $AF(x)$. + + \section{GÅ‚Ä™bokie sieci neuronowe} + + Model omawiany wczeÅ›niej może posÅ‚użyć jako podstawowy element do budowania bardziej skomplikowanych modeli. Aby to zrobić, należy potraktować otrzymany wektor $\hat{Y}$ jako wektor wejÅ›ciowy do nastÄ™pngo podstawowego modelu. SkÅ‚adajÄ…c ze sobÄ… wiele modeli, mówimy o warstwach (layers) modelu sieci neuronowej. + + Wyróżniamy trzy rodzaje warstw: + \begin{itemize} + \item warstwa wejÅ›ciowa (input layer) jest pierwszÄ… warstwÄ… modelu, + \item warstwa wyjÅ›ciowa (output layer) jest ostatniÄ… wartstwÄ… modelu + \item wartwa ukryta (hidden layer) jest warswÄ… pomiÄ™dzy warstwÄ… wejsciowÄ… oraz wyjÅ›ciowÄ…. + \end{itemize} + + Na rysunku~\ref{fig:neural_net_1} przedstawiono przykÅ‚ad posiadajÄ…cy warswÄ™ wejÅ›ciowÄ…, dwie wartswy ukryte oraz wartswÄ™ wyjsciowÄ…. + + \begin{figure}[!htb] + \centering + \includegraphics[width=8cm]{images/neural_net_1.png} + \caption{PrzykÅ‚ad modelu sieci neuronowej} + \label{fig:neural_net_1} + \end{figure} + + Tego typu modele sÄ… gÅ‚Ä™bokimi sieciami neuronowymi (deep neural networks). Istnieje wiele różnich architektur gÅ‚Ä™bokich sieci neuronowych, które wykorzystujÄ… te podstawowe koncepcje i rozszerzajÄ… je o dodatkowe warstwy, poÅ‚Ä…cznia, funkcje aktywacji czy specjalne komórki (wÄ™zÅ‚y). + + \subsection{Jednokierunkowe sieci neuronowe} + + Jednokierunkowe sieci neuronowe (feedforward neural networks) sÄ… to najprostrze sieci neuronowe, które wprost czerpiÄ… z omówionych wczeÅ›niej podstawowych wartsw. Możemy siÄ™ również spotkać z nazwÄ… wielowarstwowy perceptron (multi layer perceptron - MLP) ze wzglÄ™du na fakt, że jest zbudowany z wielu perceptronów zaprezentoanych w części~\ref{section:linreg}. DziaÅ‚ajÄ… one w taki sposób, że zasila siÄ™ je danymi do warstwy wejÅ›ciowej, nastÄ™pnie sukcesywnie wykonuje siÄ™ obliczenia do momentu dotarcia do koÅ„ca sieci. + Każdy krok z warstwy $k-1$ do warstwy $k$ obliczany jest zgodnie ze wzorem \footnote{Deep Learning techniques for music geneation - A survay s.63} + + \[ + X_k = AF(b_k + W_kX_{k-1}) + \] + + \subsection{Propagacja wsteczna bÅ‚Ä™du} + + Kiedy uzywamy jednokierunkowych sieci neuronowych, zasilamy je danymi wejÅ›ciowymi $x$ ostatecznie otrzymujÄ…c predykcjÄ™ $\hat(y)$. Taki sposób dziaÅ‚ania nazywa siÄ™ propagcjÄ… wprzód (foreward propagation). Podczas uczenia sieci kontynuuje siÄ™ ten proces obliczajÄ…c koszt $J(h)$. Propagacja wsteczna (back-propagation), pozwala na przepÅ‚yw informacji od funkcji kosztu wstecz sieci neuronowej aby ostatecznie obliczyć gradient. Zasada dziaÅ‚ania algorytmu propagacji wsteczniej bÅ‚Ä™du, polega na sukcesywnym aktualizowaniu wag i biasów, oraz przesyÅ‚aniu wstecz po warstwach sieci. DziÄ™ki temu jesteÅ›my wstanie wyuczyć sieć oraz obliczyć optymalne wagi i biasy dla caÅ‚ej sieci. + + \subsection{Autoencodery} + + Autoencoder jest to rodzaj gÅ‚Ä™bokiej sieci neuronowej, zbudowany z jednej warstwy ukrytej. Dodatkowo rozmiar wartwy wejÅ›ciowej musi być równy rozmiarowi wartwy wyjÅ›ciowej, tworzÄ…c w ten sposób symetrycznÄ… sieć, której ksztaÅ‚t przypomina klepsydrÄ™. PrzykÅ‚ad autoencodera przedstawiono na rysunku ~\ref{fig:autoencoder}. + + \begin{figure}[!htb] + \centering + \includegraphics[width=8cm]{images/autoencoder.png} + \caption{PrzykÅ‚ad modelu autoencodera} + \label{fig:autoencoder} + \end{figure} + + Podczas uczenia autoencodera, przedstawia siÄ™ dane wejÅ›ciowe jako cel. W ten sposób ta architektura stara siÄ™ odtworzyć funckje identycznoÅ›ci. Zadanie nie jest trywialne jak mogÅ‚o by siÄ™ zdawać ponieważ zazwyczaj ukryta warstwa jest mniejszego rozmiaru niż dane wejÅ›ciowe. Przez to autoencoder jest zmuszony do wydobycia istotnych cech danych wejÅ›ciowych, skompresowania a nastÄ™pnie jak najwierniejszego ich odtworzenia. Część kompresujÄ…ca dane nazywana jest encoderem, natomiast część dekompresujÄ…ca decoderem. + Wektor cech, które zostaÅ‚y odkryte przez autoencoder nazywane sÄ… zmiennymi utajnionymi (latent variables). Zarówno encoder jak i dekoder można wyodrÄ™bnić z autoencodera i wykorzystywać go jako osobnÄ… sieć neuronowÄ…. + CiekawÄ… cechÄ… decodera, jest jego generatywny charakter, ponieważ dostarczajÄ…c zupeÅ‚nie nowe informacje jako zmienne wejÅ›ciowe, decoder odtworzy je na podobieÅ„stwo danych, na których zostaÅ‚ nauczony. + + \subsection{Rekurencyjne sieci neuronowe} + + Rekurencyjne sieci neuronowe (recurrent neural networks - RNN) w uproszczeniu, sÄ… to MLP posiadajÄ…ce pamięć. Neurony tego typu sieci, różniÄ… siÄ™ od zwykÅ‚ych neuronów ponieważ posiadajÄ… one dwa parametry zmiast jednego, obecny stan oraz poprzedniÄ… predycjÄ™. + + \subsection{DÅ‚uga pamięć krótkotrwaÅ‚a} + + LSTM + + \subsection{Model sieci seq2seq} + + Seq2Seq + + \chapter{Reprezentacja danych muzycznych} W tym rozdziale przedstawiÄ™ podstawowe koncepcje muzyczne, sposoby reprezentacji muzyki oraz omówiÄ™ podstawy dziaÅ‚ania protokoÅ‚u MIDI. diff --git a/docs/document.toc b/docs/document.toc index 8d8aa11..f59901e 100644 --- a/docs/document.toc +++ b/docs/document.toc @@ -3,16 +3,26 @@ \contentsline {chapter}{WstÄ™p}{11}% \contentsline {chapter}{Rozdzia\PlPrIeC {\l }\ 1\relax .\enspace Wprowadzenie do sieci neuronowych}{13}% \contentsline {section}{\numberline {1.1\relax .\enspace }Regresja liniowa}{13}% -\contentsline {section}{\numberline {1.2\relax .\enspace }Funkcja kosztu oraz metody gradientowe}{13}% -\contentsline {subsection}{\numberline {1.2.1\relax .\enspace }Funkcja kosztu}{14}% -\contentsline {subsection}{\numberline {1.2.2\relax .\enspace }Metoda gradientu prostego}{15}% -\contentsline {chapter}{Rozdzia\PlPrIeC {\l }\ 2\relax .\enspace Reprezentacja danych muzycznych}{17}% -\contentsline {section}{\numberline {2.1\relax .\enspace }Podstawowe koncepcje}{17}% -\contentsline {subsection}{\numberline {2.1.1\relax .\enspace }DźwiÄ™k muzyczny}{17}% -\contentsline {subsection}{\numberline {2.1.2\relax .\enspace }SygnaÅ‚ dźwiÄ™kowy}{17}% -\contentsline {subsection}{\numberline {2.1.3\relax .\enspace }Zapis nutowy}{17}% -\contentsline {section}{\numberline {2.2\relax .\enspace }Cyfrowa reprezentacja muzyki symbolicznej}{20}% -\contentsline {subsection}{\numberline {2.2.1\relax .\enspace }Standard MIDI}{20}% -\contentsline {chapter}{Rozdzia\PlPrIeC {\l }\ 3\relax .\enspace Projekt}{23}% -\contentsline {chapter}{Rozdzia\PlPrIeC {\l }\ 4\relax .\enspace Podsumowanie}{25}% -\contentsline {chapter}{Bibliografia}{27}% +\contentsline {section}{\numberline {1.2\relax .\enspace }Uczenie modelu}{14}% +\contentsline {subsection}{\numberline {1.2.1\relax .\enspace }Funkcja kosztu}{15}% +\contentsline {subsection}{\numberline {1.2.2\relax .\enspace }Znajdowanie minimum funkcji}{15}% +\contentsline {subsection}{\numberline {1.2.3\relax .\enspace }Metody gradientowe}{15}% +\contentsline {section}{\numberline {1.3\relax .\enspace }Regresja liniowa jako model sieci neuronowej}{17}% +\contentsline {section}{\numberline {1.4\relax .\enspace }Funkcje aktywacji}{19}% +\contentsline {section}{\numberline {1.5\relax .\enspace }GÅ‚Ä™bokie sieci neuronowe}{20}% +\contentsline {subsection}{\numberline {1.5.1\relax .\enspace }Jednokierunkowe sieci neuronowe}{21}% +\contentsline {subsection}{\numberline {1.5.2\relax .\enspace }Propagacja wsteczna bÅ‚Ä™du}{21}% +\contentsline {subsection}{\numberline {1.5.3\relax .\enspace }Autoencodery}{22}% +\contentsline {subsection}{\numberline {1.5.4\relax .\enspace }Rekurencyjne sieci neuronowe}{23}% +\contentsline {subsection}{\numberline {1.5.5\relax .\enspace }DÅ‚uga pamięć krótkotrwaÅ‚a}{23}% +\contentsline {subsection}{\numberline {1.5.6\relax .\enspace }Model sieci seq2seq}{23}% +\contentsline {chapter}{Rozdzia\PlPrIeC {\l }\ 2\relax .\enspace Reprezentacja danych muzycznych}{25}% +\contentsline {section}{\numberline {2.1\relax .\enspace }Podstawowe koncepcje}{25}% +\contentsline {subsection}{\numberline {2.1.1\relax .\enspace }DźwiÄ™k muzyczny}{25}% +\contentsline {subsection}{\numberline {2.1.2\relax .\enspace }SygnaÅ‚ dźwiÄ™kowy}{25}% +\contentsline {subsection}{\numberline {2.1.3\relax .\enspace }Zapis nutowy}{25}% +\contentsline {section}{\numberline {2.2\relax .\enspace }Cyfrowa reprezentacja muzyki symbolicznej}{28}% +\contentsline {subsection}{\numberline {2.2.1\relax .\enspace }Standard MIDI}{28}% +\contentsline {chapter}{Rozdzia\PlPrIeC {\l }\ 3\relax .\enspace Projekt}{31}% +\contentsline {chapter}{Rozdzia\PlPrIeC {\l }\ 4\relax .\enspace Podsumowanie}{33}% +\contentsline {chapter}{Bibliografia}{35}% diff --git a/docs/images/autoencoder.png b/docs/images/autoencoder.png new file mode 100644 index 0000000..ad1861c Binary files /dev/null and b/docs/images/autoencoder.png differ diff --git a/docs/images/gradient_descent.png b/docs/images/gradient_descent.png new file mode 100644 index 0000000..b47b4b3 Binary files /dev/null and b/docs/images/gradient_descent.png differ diff --git a/docs/images/gradient_descent_1.png b/docs/images/gradient_descent_1.png new file mode 100644 index 0000000..b47b4b3 Binary files /dev/null and b/docs/images/gradient_descent_1.png differ diff --git a/docs/images/gradient_descent_1_long.png b/docs/images/gradient_descent_1_long.png new file mode 100644 index 0000000..16498a8 Binary files /dev/null and b/docs/images/gradient_descent_1_long.png differ diff --git a/docs/images/gradient_descent_2.png b/docs/images/gradient_descent_2.png new file mode 100644 index 0000000..1314a4e Binary files /dev/null and b/docs/images/gradient_descent_2.png differ diff --git a/docs/images/gradient_descent_2_long.png b/docs/images/gradient_descent_2_long.png new file mode 100644 index 0000000..24aa7bb Binary files /dev/null and b/docs/images/gradient_descent_2_long.png differ diff --git a/docs/images/naural_model_multi.png b/docs/images/naural_model_multi.png new file mode 100644 index 0000000..32402fe Binary files /dev/null and b/docs/images/naural_model_multi.png differ diff --git a/docs/images/naural_model_one.png b/docs/images/naural_model_one.png new file mode 100644 index 0000000..5b92922 Binary files /dev/null and b/docs/images/naural_model_one.png differ diff --git a/docs/images/neural_net_1.png b/docs/images/neural_net_1.png new file mode 100644 index 0000000..505b4c1 Binary files /dev/null and b/docs/images/neural_net_1.png differ diff --git a/docs/images/plots.ipynb b/docs/images/plots.ipynb index 7f5b62c..eed03a0 100644 --- a/docs/images/plots.ipynb +++ b/docs/images/plots.ipynb @@ -1,73 +1,24 @@ { - "nbformat": 4, - "nbformat_minor": 2, - "metadata": { - "language_info": { - "name": "python", - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "version": "3.8.2-final" - }, - "orig_nbformat": 2, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "npconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": 3, - "kernelspec": { - "name": "python38264bit90963b6dfcff4977b23d3abddad7c054", - "display_name": "Python 3.8.2 64-bit" - } - }, "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "import music21\n", - "from music21.midi import MidiFile" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "mf = MidiFile()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "filepath = '/home/altarin/praca-magisterska/docs/images/seq2seq_generated_midi_7.mid'\n" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ + "from music21.midi import MidiFile\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", "import mido" ] }, { - "cell_type": "code", - "execution_count": 21, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt" + "# midi messages" ] }, { @@ -82,6 +33,7 @@ } ], "source": [ + "filepath = '/home/altarin/praca-magisterska/docs/images/seq2seq_generated_midi_7.mid'\n", "mid = mido.MidiFile(filepath)\n", "for i, track in enumerate(mid.tracks):\n", " for msg in track:\n", @@ -89,22 +41,30 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], - "source": [] + "source": [ + "# Regresja liniowa" + ] }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 7, "metadata": {}, "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "[]" + }, + "metadata": {}, + "execution_count": 7 + }, { "output_type": "display_data", "data": { "text/plain": "
", - "image/png": "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\n" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtUAAAHwCAYAAABpOpNzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeZid8/3/8ed9skhCJnZqr6UkkxSltOhMOTq+SqlWS5X6yWTGvm+xZDCxrxGCZDKpapUWpbXV1CkZW1GUOlFLUfteBklkOffvjzvpPUcySWbmzNznnHk+rivXZN733Od+Xy3y8vG+P58gDEMkSZIkdV0q6QYkSZKkUmeoliRJkrrJUC1JkiR1k6FakiRJ6iZDtSRJktRNhmpJkiSpmwzVkiRJUjcZqiVJkqRuMlRLkiRJ3WSoliRJkrrJUC1JkiR1k6FakiRJ6qb+STewNEEQvAJUAK8m3IokSZLK2wZAWxiGX+3sjUUfqoGKwYMHrzx8+PCVk25EkiRJ5eu5555j1qxZXbq3FEL1q8OHD1/5iSeeSLoPSZIklbGtttqKJ5988tWu3OtMtSRJktRNhmpJkiSpmwzVkiRJUjcZqiVJkqRuMlRLkiRJ3WSoliRJkrrJUC1JkiR1k6FakiRJ6iZDtSRJktRNhmpJkiSpmwzVkiRJUjcZqiVJkqRuMlRLkiRJ3WSoliRJkrrJUC1JkiR1k6FakiRJxSOXg+uvh3nzku6kUwzVkiRJKg7/+hdUVcH++8NllyXdTacYqiVJkpSsuXPh3HNh883hoYeiWkMDvPRSsn11Qv+kG5AkSVIf9uSTUFsL//hHXOvfH046CdZdN7m+OslQLUmSpN43axY0NsJFF8H8+XF9662huRm+/vXkeusCQ7UkSZJ614MPRqvTL7wQ1wYNgrPPhqOPjlaqS0zpdSxJkqTS9OmncMopMGlSfr26GqZOhY03TqavAjBUS5IkqefdfTccfDC8/npcGzoULr4YxoyBVGnvn2GoliRJUs/58EM49lj49a/z67vtBtdcA+usk0xfBWaoliRJUuGFIdx8MxxxBLz3XlxfdVWYOBH23ReCILn+CsxQLUmSpMJ6+2047DC47bb8+n77wYQJsNpqi70tm82SyWRoa2ujoqKCdDpNZWVlLzTcfYZqSZIkFUYYwi9/CccdB598EtfXXhuuvhp+8IPF3pbJZGhsbKS1tXWRa1VVVTQ0NJBOp3uq64Io7YlwSZIkFYeXX4bvfS/aKq99oD74YMhmOwzUzc3N1NTULDZQA7S2tlJTU8O0adN6ouuCMVRLkiSp6+bPj0Y6Ro2CTCaub7QR/PWv0cuIw4Yt9tZMJkN9fT25XG6Jj8jlctTV1ZFp//lFxlAtSZKkrpkxA3bYIdrdY+bMqJZKwQknwDPPwI47LvH2xsbGpQbqhXK5HOPHj+9uxz3GUC1JkqTOmTMHxo+HLbeEv/0tro8cCY88Eh09PmTIEj8im812OPLRkenTp5PNZrvScY8zVEuSJGnZ/f3v8M1vQkNDFK4BBgyAs86CJ56AbbZZpo/p6ihHsY6AuPuHJEmSlm7mTDjzTLjkEmg/srHtttDcDJ3c+q6tra1LbXT1vp5mqJYkSdKSTZ8eHSX+0ktxbfBgOOccOOoo6Nev0x9ZUVHRpVa6el9PM1RLkiRp8dra4OSTox082ttpJ2hqgg037PJHd3Xf6WLdr9qZakmSJC3qzjujkY72gbqiIgrT997brUANUFlZSVVVVafuqa6uLtoTFg3VkiRJin3wAey/P+y+O7zxRlzfY49oC70xYyAICvKohoYGUqlli6OpVIpx48YV5Lk9wVAtSZKk6IjxG2+E4cPh+uvj+mqrwe9+B7fdFh03XkDpdJopU6YsNVinUimampqKdvQDDNWSJEl6803Yc0/42c+ileqF9t8fnnsOfvrTgq1Of1ltbS0tLS1UV1cv9np1dTUtLS2MHj26R55fKL6oKEmS1FeFIUydGp2A2H6runXWgcmT4fvf75U20uk06XSabDZLJpOhra2NiooK0ul00c5Qf5mhWpIkqS/697+hrg7uuy+/fuihcP750UuJvayysrJkQvSXGaolSZL6kvnz4fLL4fTTYdasuL7JJtGqdSd35FDEUC1JktRXPPss1NbCY4/FtVQqGv8488zoQBd1iaFakiSp3M2ZA+eeG/2aOzeuf/3r0RHjW2+dXG9lwlAtSZKUoB5/Oe+xx2D0aMhm49rAgdDQACedBAMGFO5ZfZihWpIkKQGZTIbGxkZaW1sXuVZVVUVDQ0P39mWeORPGjYMJEyCXi+vf/na0Oj18eNc/W4twn2pJkqRe1tzcTE1NzWIDNUBrays1NTVMmzataw+47z4YNQouvTQO1EOGRC8oPvCAgboHGKolSZJ6USaTob6+nlz71ePFyOVy1NXVkclklv3DP/4Y6uthp53g5Zfj+s47Ry8pHnUU9OvXxc61JIZqSZKkXtTY2LjUQL1QLpdj/Pjxy/bBf/oTVFZCU1NcW3FFmDYNWlrgq1/tQrdaVoZqSZKkXpLNZjsc+ejI9OnTybZ/yfDL3nsP9t03Omb8rbfi+l57wYwZcNBBPXbEuGKGakmSpF7SqVGOpd0XhnD99TBiBPzud3F9jTXg5pvhD3+Ar3yli52qs9z9Q5IkqZe0tbUV5r7XX4+OE7/zzvz6gQdGLyeuvHIXO1RXGaolSZJ6SUVFRffuy+VgypRof+lPP41/YL31ovouuxSgS3WFoVqSJKmXdHXf6XQ6DS++CGPGwJdnso84IjopcejQAnSornKmWpIkqZdUVlZSVVXVqXt2qqqi8s47oyPF2wfqTTeN9py+4goDdREwVEuSJPWihoYGUqlli2BbBAG3vvMOnHwyzJ4dFfv1g1NOgX/8A3bYoQc7VWcULFQHQbBbEAQtQRC8EQTBrCAIXg6C4KYgCL5dqGdIkiSVunQ6zZQpU5YYrAcC44EnUikqXnghvrDFFvD449G4x6BBPd6rll1BQnUQBBcAdwDfAP4MXA48CewJPBQEwf6FeI4kSVI5qK2tpaWlherq6kWufQt4fsgQTgdS8+dHxeWWi4L0Y4/Bllv2aq9aNt1+UTEIgjWBE4B3ga+HYfheu2s7An8FGoHfdPdZkiRJ5SKdTpNOp8lms2QyGWa9/z41DzzAFq2tBDNnxj+4/fYwdSpstllyzWqpCrH7x/pEK96Ptg/UAGEY3hcEwafAagV4jiRJUtmprKyk8q234LLL4NVX4wvLLw/nnw+HHQbLOIOt5BQiVL8IzAG2CYJg1TAMP1h4IQiCKmAocNvSPiQIgic6uOS/lkmSpPL03//CCSfAtGn59V12gcmTYf31k+lLndbtUB2G4UdBEJwMXArMCILgNuBDYCNgD+AvwMHdfY4kSVJZufXWaBX6nXfi2korwYQJcMABEATJ9aZOK8jhL2EYTgiC4FVgGlDX7tJLwLVfHgvp4DO2Wlx9wQr2NwrRpyRJUuLefReOPBJuuim/vvfecOWVsMYayfSlbinU7h8nATcD1xKtUC8PbAW8DFwfBMGFhXiOJElSyQpDuO46GD48P1CvuSbccktUM1CXrG6H6iAIvgtcAPwpDMPjwjB8OQzDmWEYPgnsBbwJHB8EwYbdfZYkSVJJ+s9/YNdd4cADoznqhQ46CGbMgB/9KLneVBCFWKnefcHX+758IQzDmcBjC57jpoqSJKlvyeVg0iQYORLuuSeub7ABtLRELyiutFJi7alwCjFTvdyCrx1tm7ewPqcAz5IkSSoNzz8PY8bAgw/GtSCI5qnPOQdWWCG53lRwhVipfmDB1/ogCNZufyEIgl2B7YHZwMMFeJYkSVJxmzs32l96883zA/Vmm0XfX365gboMFWKl+mbgXmBn4LkgCG4F3gGGE42GBMDYMAw/LMCzJEmSitdTT0FtbfR1of79YexYOP306LhxlaVC7FOdC4Lg+8DhwL5ELycOAT4C7gImhmHY0t3nSJIkFa3Zs6GxES68EObPj+tbbQXNzdGqtcpaofapngtMWPBLkiSp73jooWh1+vnn49qgQXDWWXDccdFKtcqe/y9LkiR1xaefwqmnRrt7hGFc/853YOpU+NrXkutNvc5QLUmS1Fn33AP19fDaa3FthRWi8Y+DD4ZUQc7XUwkxVEuSJC2rjz6KRjp+9av8+q67wjXXwHrrJdOXEmeoliRJWhY33wyHHw7vvRfXVlkl2iJvv/2iPajVZxmqJUmSluTtt+GII+APf8iv77MPTJwIq6+eTF8qKoZqSZKkxQlDuPbaaNzj44/j+le+AldfDXvumVhrKj6GakmSpC979dXoRcS//CW/PmYMXHQRrLhiIm2pePlqqiRJ0kLz50cjHSNH5gfqr34V7r0XmpoM1FosV6olSZIAnnsuOsTlkUfiWhDAMcfA+PGw/PLJ9aaiZ6iWJEl929y50f7SjY0wZ05cHzEiOmL8W99KrjeVDEO1JEnqu554AkaPhmeeiWv9+8Npp8Epp8ByyyXXm0qKoVqSJPU9s2bBWWfBxRdHc9QLbb01TJsGo0Yl15tKkqFakiT1La2t0S4eL74Y1wYNgrPPhqOPjlaqpU7yrxpJktSrstksmUyGtrY2KioqSKfTVFZW9vyD29pg7Nhoj+n2qqth6lTYeOOe70Fly1AtSZJ6RSaTobGxkdbW1kWuVVVV0dDQQDqd7pmH33UXHHIIvP56XBs6NBr/GDMGUu4yrO7xryBJktTjmpubqampWWygBmhtbaWmpoZp06YV9sEffAAHHAC77ZYfqHfbDWbMiA54MVCrAPyrSJIk9ahMJkN9fT25XG6JP5fL5airqyOTyXT/oWEIv/99tC3eb34T11ddFX77W7j9dlhnne4/R1rAUC1JknpUY2PjUgP1QrlcjvHjx3fvgW+9BXvtBfvsA++/H9f32y9anf7Zz6JDXaQCMlRLkqQek81mOxz56Mj06dPJZrOdf1gYRi8cjhgBf/xjXF97bfjTn+D662G11Tr/udIyMFRLkqQe09VRjk7f9/LLsPPOUFcHn3wS1w8+GLJZ+MEPutSHtKwM1ZIkqce0tbX17H3z58Nll8HIkfDXv8b1jTaKvr/mGhg2rEs9SJ3hlnqSJKnHVFRU9Nx92SzU1sKjj8a1VAqOOy46LXHIkC49W+oKQ7UkSeoxXd13eon3zZkD558fnYA4d25cHzUKmpvhm9/s0jOl7nD8Q5Ik9ZjKykqqqqo6dU91dXXHJyw+/jhsvTWccUYcqAcMiFam//53A7USY6iWJEk9qqGhgdQyHrCSSqUYN27cohdmzoQTT4RvfQv++c+4vu228NRT0NAAAwcWqGOp8wzVkiSpR6XTaaZMmbLUYJ1KpWhqalp09OP+++HrX4+OFF+43/XgwXDppfDQQ9DRqrbUiwzVkiSpx9XW1tLS0kJ1dfVir1dXV9PS0sLo0aPj4iefRFvi7bgj/PvfcX2nneDZZ+HYY6Ffvx7uXFo2vqgoSZJ6RTqdJp1Ok81myWQytLW1UVFRQTqdXnSG+o474JBD4M0341pFBVxySbTjhyciqsgYqiVJUq+qrKzs+EXE99+Ho4+GG27Ir++xB1x1VXQ6olSEDNWSJCl5YQg33ghHHQUffBDXV1sNrrwSfvITV6dV1AzVkiQpWW+8AYceGo18tLf//jBhAqyySjJ9SZ3gi4qSJCkZuRxMngwjRuQH6nXWgTvvhF//2kCtkuFKtSRJ6n0vvQR1ddF2ee0demh0WmIXjzeXkmKoliRJvWfePLj8chg3DmbNiuubbAJTp0InT1+UioWhWpIk9Y5//jPaDu/xx+NaKgUnnABnnhkd6CKVKEO1JEnqWV98AeeeG/2aNy+uf/3r0NwMW2+dXG9SgRiqJUlSz/nb36LV6Rkz4trAgdDQACedBAMGJNebVECGakmSVHiffx7NTU+YEO1BvdC3vx2tTg8fnlxvUg8wVEuSpMLKZKKdPV55Ja4NGQLnnQeHHw79+iXXm9RDDNWSJKkwPv4YTjwx2sWjvZ13hilT4KtfTaYvqRcYqiVJUvf98Y/RHtNvvx3XVlwRLr0U/t//84hxlT1DtSRJ6rr33oOjjoLf/S6/vtdeMGkSfOUryfQl9TJDtSRJ6rwwhOuvh6OPho8+iutrrBGF6R//OLnepAQYqiVJUue89hoccgjcfXd+/cADo3GPlVdOpi8pQYZqSZK0bHI5mDw52l/6s8/i+nrrRS8i7rJLcr1JCTNUS5KkpXvhBRgzBh54IL9+xBHRSYlDhybTl1QkUkk3IEmSiti8eXDhhbD55vmBetNNo++vuMJALeFKtSRJ6sjTT8Po0fDkk3GtX79o/KOhAQYNSq43qcgYqiVJUr4vvoCzz4bzz49WqhfaYguYNg223DK53qQiZaiWJEmxhx+G2lr417/i2nLLwRlnwAknwIAByfUmFTFDtSRJinbzOO20aEY6DOP69ttHx45vtllyvUklwFAtSVJf95e/QH09vPpqXFthhWj849BDIeW+BtLSGKolSeqr/vtfOP54+OUv8+u77BLtR73++sn0JZUgQ7UkSX3RrbfCYYfBO+/EtZVWggkT4IADIAiS600qQYZqSZL6knfegSOPhJtvzq/vvTdceSWssUYyfUklziEpSZL6gjCEX/0KRozID9Rrrgm33AI33WSglrrBlWpJksrdf/4DBx8M99yTXz/oILjkkmjsQ1K3uFItSVK5yuWikY7KyvxAvcEG0NISHeRioJYKwpVqSZLK0fPPR4e4PPRQXAsCOOqo6LTEFVZIrjepDBmqJUkqJ3PnwsUXw1lnRceNLzR8ODQ3w7e/nVxvUhkzVEuSVC6eeipanX7qqbjWvz+MHQunnx4dNy6pRxiqJUkqdbNnQ2MjXHghzJ8f17faKlqd3nzz5HqT+ghDtSRJpezBB6PV6RdeiGuDBkUh+9hjo5VqST3Ov9MkSSpFn34Kp5wCkybl16uqoKkJvva1ZPqS+ihDtSRJpeaee6C+Hl57La4NHRqNf9TXQ8odc6XeZqiWJKlUfPRRNNJx3XX59V13hcmTYd11k+lLkoe/SJJUEm6+OdoWr32gXmUV+M1v4M47DdRSwlypliSpmL39Nhx+ONx6a359333h8sth9dWT6UtSHkO1JEnFKAzh2mvhuOPg44/j+lprwdVXwx57JNaapEUZqiVJKjavvBK9cHjvvfn1urroZcQVV0ymL0kdMlRLklQs5s+Ptsg75RSYOTOub7hhtE3eTjsl15ukJTJUS5JUDJ57LjrE5ZFH4loqBcccEx3ksvzyyfUmaakKuvtHEATfCYLgliAI3g6C4IsFX1uCIPh+IZ8jSVLZmDsXzjkHttgiP1BXVsLDD8MllxiopRJQsJXqIAhOB8YDHwB3AG8DqwJbAt8F7irUsyRJKgtPPAGjR8Mzz8S1AQPg1FOjXwMHJtebpE4pSKgOguAnRIH6XuBHYRh++qXrAwrxHEmSysKsWXDmmdEq9Pz5cf2b34TmZhg1KrHWJHVNt0N1EAQp4AJgJrDflwM1QBiGc7v7HEmSykJrK4wZAy++GNcGD4bx46P56X79kutNUpcVYqV6O+CrwM3Af4Mg2A0YCcwGHgvD8JEl3SxJUp/Q1gZjx0Z7TLf33e9GO3tsvHEibUkqjEKE6m8u+Pou8CSQ99+sgiBoBfYOw/D9JX1IEARPdHBps253KElSku66Cw45BF5/Pa5VVMBFF0Wr1qmC7hsgKQGF+Lt44fmohwCDgZ2BoUSr1fcAVcBNBXiOJEml5YMP4IADYLfd8gP17rtDNhsd8GKglspCIVaqFw5/BUQr0k8v+D4bBMFewAtAdRAE317SKEgYhlstrr5gBfsbBehTkqTeEYZw001wxBHwfrv/ULvqqjBxIuy7LwRBcv1JKrhC/Ovxfxd8fbldoAYgDMNZRKvVANsU4FmSJBW3t96CvfaCffbJD9T77Rcd8PKznxmopTJUiFD9/IKvH3dwfWHoHlyAZ0mSVJzCEKZOhREj4I9/jOtrrw233w7XXx+tVEsqS4UI1a3APGCTIAgWt0v9yAVfXy3AsyRJKj4vvww77wx1dfDJJ3H94IOj2endd0+uN0m9otuhOgzDD4DfAcOAhvbXgiD4HrAL8Anw5+4+S5KkojJ/Plx2GYwcCX/9a1zfeGO47z645hoYNiy5/iT1mkIdU34csC1wWhAEVcBjwPrAXsB8oC4Mw47GQyRJKj3ZLNTWwqOPxrVUCo4/PjotcciQxFqT1PsKEqrDMHwvCIJtgdOJgvS3gE+BO4HzwjD8WyGeI0lS4ubMgfPPh7PPhrntDgweNQqmTYOtt06uN0mJKdRKNWEYfkS0Yn1coT5TkqSi8vjjMHo0PPtsXBswAMaNg5NPhoGLe7VIUl9QsFAtSVLZmjkTGhqi+elcLq5vuy00N0NlZXK9SSoKhmpJkpbk/vujo8T//e+4NmQInHMOHHkk9OvX4a2S+g5DtSRJi/PJJ3DSSTBlSn49nY5qG26YTF+SipKhWpKkL7vjDjjkEHjzzbg2bBhceikcdFCnT0TMZrNkMhna2tqoqKggnU5T6ciIVFYM1ZIkLfT++3D00XDDDfn1PfeEq66Ctdbq1MdlMhkaGxtpbW1d5FpVVRUNDQ2k0+nudCypSBTiREVJkkpbGEZBesSI/EC9+urw+9/Drbd2OlA3NzdTU1Oz2EAN0NraSk1NDdOmTetO55KKhKFaktS3vfEG7LEH7LcffPBBXD/gAJgxA37yk06Pe2QyGerr68m13ylkMXK5HHV1dWQyma50LqmIGKolSX1TLgeTJ0er03fcEdfXXRfuuguuuw5WWaVLH93Y2LjUQB23kWP8+PFdeo6k4mGoliT1PS+9FO3iccgh8Omncf3ww6Pjx3fdtcsfnc1mOxz56Mj06dPJZrNdfqak5BmqJUl9x7x5cPHF0ZHi998f1zfZBFpb4corYejQbj2iq6McjoBIpc3dPyRJfcM//wm1tdFR4wv16wcnnhidljh4cEEe09bW1qv3SSoOhmpJUnn74gs499zo17x5cX3zzaMjxrfaqqCPq6io6NX7JBUHQ7UkqXz97W/R6vSMGXFt4EA444xohXrAgII/sqv7TrtftVTanKmWJJWfzz+H446D7bbLD9TbbQdPPw2nntojgRqgsrKSqqqqTt1TXV3tCYtSiTNUS5LKSyYTvYh42WXRoS4Ayy8PEyfCAw/AZpv1eAsNDQ2kUsv2R2wqlWLcuHE93JGknmaoliSVh48/hro62HlneOWVuP6978Gzz8KRR8IyBt3uSqfTTJkyZanBOpVK0dTU5OiHVAYM1ZKk0vfHP0aHuEydGtdWXBF++Uu45x7YYINeb6m2tpaWlhaqq6sXe726upqWlhZGjx7dy51J6gm+qChJKl3vvQdHHQW/+11+/cc/jvacXnPNZPpaIJ1Ok06nyWazZDIZ2traqKioIJ1OO0MtlRlDtSSp9IQhXH89HH00fPRRXF9jDZg0KQrVRaSystIQLZU5Q7UkqbS89lp0vPjdd+fX/9//g0sugZVXTqQtSX2boVqSVBpyOZg8GU46CT77LK6vvz5MmQI1Ncn1JqnPM1RLkorfCy/AmDHRlngLBQEccUR0UuIKKyTXmyRhqJYkFbN58+DSS6MTEGfPjuubbhodMb799sn1JkntGKolST2i2ztePP00jB4NTz4Z1/r1g7Fj4fTTYdCgwjctSV1kqJYkFVQmk6GxsZHW1tZFrlVVVdHQ0LDkw06++ALOPhvOPz9aqV5oyy1h2jTYYose6FqSusfDXyRJBdPc3ExNTc1iAzVAa2srNTU1TJs2bfEf8PDDUWg+++w4UC+3XBSwH3vMQC2paBmqJUkFkclkqK+vJ5fLLfHncrkcdXV1ZDKZuPjZZ9Ge0zvsAP/6V1zfYYdoDOTkk6G//3FVUvEyVEuSCqKxsXGpgXqhXC7H+PHjo2/+8hcYNQomTowOdYFoN49Jk2D69OilREkqcv5rvySp27LZbIcjHx15evp0/rvXXqx02235F/7v/6L9qNdbr4AdSlLPcqVaktRteaMcy+CHwAzID9QrrwzXXQd33WWgllRyXKmWJHVbW1vbMv3cGsAVwE++fOGnP43GP9ZYo8CdSVLvMFRLkrqtoqJiqT/zC+AyYOV2tc8rKlj+V7+CH/6wp1qTpF7h+IckqduWtO/0esDdwK/ID9RTgdfuvttALaksGKolSd1WWVlJVVVVXi0ADgeywP+1q78M7Az8prqa4dtt12s9SlJPMlRLkgqioaGBVCr6Y+VrQCtwJbDCgus5ovGPUcB9qRTjxo1Lok1J6hGGaklSQaTTaZquuopTgoCngR3aXcsC2wHHAbNTKZqampZ8VLkklRhfVJQkFcZTTzH6mmviA1yAucB5wDnAHKC6uppx48YZqCWVHUO1JKl7Zs+Gs86Ciy6C+fP/V541YgR/2H13UkOHclFFBel0msrKygQblaSeY6iWJHXdgw9CbS288EJcGzQIGhsZfOyx/Ly/f8xI6hv8p50kqfM+/RROOQUmTcqvV1dDUxNsskkyfUlSQgzVkqTOueceqK+H116La0OHRuMfdXWQ8h14SX2PoVqStGw++giOPRauuy6/vttucM01sM46yfQlSUXAUC1JWrIwhFtugcMPh/fei+urrAITJ8LPfgZBkFx/klQEDNWSpI69/XYUpm+9Nb++775RoF5ttWT6kqQi4+CbJGlRYQi//CWMGJEfqNdaC/74R7jhBgO1JLXjSrUkKd8rr0QvIt57b369ri56GXHYsGT6kqQiZqiWJEXmz4+2yDvlFJg5M65vuGG0Td5OOyXXmyQVOUO1JAmeey46xOWRR+JaKhXt9tHYCEOGJNebJJUAQ7Uk9WVz58KFF0bBec6cuD5yJDQ3wzbbJNebJJUQQ7Uk9VVPPAGjR8Mzz8S1AQPgtNOiEZCBA5PrTZJKjKFakvqaWbPgzDPh4oshl4vr22wTrU6PHJlYa5JUqgzVktSXtLbCmDHw4otxbfBgOPtsOPpo6Ncvud4kqYQZqiWpL2hrg7Fj4eqr8+s77hjt7LHRRsn0JUllwlAtSeXurrvgkEPg9RZrGoMAACAASURBVNfjWkVFNP4xZoxHjEtSARiqJalcffBBtCXeb36TX//BD6IV67XXTqYvSSpDhmpJKjdhCDfdBEccAe+/H9dXWw2uuAJ++lNXpyWpwAzVklRO3noLDjsM/vjH/PrPfw4TJsCqqybTlySVuVTSDUiSCiAMYepUGDEiP1Cvsw7ccUc0AmKglqQe40q1JJW6l1+Gujr461/z64ccAhdcEL2UKEnqUYZqSSpV8+fDxInRCYizZsX1jTeOVq2rq5PrTZL6GEO1JJWibBZqa+HRR+NaKgUnnBCdljh4cGKtSVJfZKiWpFIyZw6cf350AuLcuXF91CiYNg223jq53iSpDzNUS1KpePxxGD0ann02rg0cCOPGwUknRb+XJCXCUC1JxW7mTGhogMsug1wurn/rW9DcHO34IUlKlKFakorZ/fdHR4n/+99xbcgQOPfc6HCXfv0Sa02SFDNUS1Ix+uSTaKRjypT8ejod1TbcMJm+JEmLZaiWpGJzxx3RHtNvvhnXhg2DSy+Fgw7yiHFJKkKGakkqFu+/D0cfDTfckF//4Q9h0iRYa61k+pIkLZWhWpKSFoZw441w1FHwwQdxffXV4corYe+9XZ2WpCJnqJakJL3xBhx6aDTy0d4vfhGNe6yySjJ9SZI6xVAtSUnI5aCpCU48ET79NK6vuy5Mngy77ppcb5KkTjNUS1KBZLNZMpkMbW1tVFRUkE6nqaysXPQHX3oJ6uqi7fLaO/xwOO88GDq0V/qVJBWOoVqSuimTydDY2Ehra+si16qqqmhoaCCdTsO8eTBhQnQC4uzZ8Q997WswdSp85zu92LUkqZBSPfGhQRAcEARBuODXmJ54hiQVg+bmZmpqahYbqAFaW1upqanh1sZG2G67aNxjYaDu1w/GjoWnnzZQS1KJK/hKdRAE6wJXAJ8BKxT68yWpWGQyGerr68m1Pzr8SwYCp+Zy7H7GGfkXttgiOmL8G9/o2SYlSb2ioCvVQRAEwC+BD4FrCvnZklRsGhsblxiotwGeAM4ABiwsDhwI55wDjz1moJakMlLoleqjgJ2A7y74KkllKZvNdjjyMQQYDxxD/srFQ8DqN9/MJj/4Qc83KEnqVQVbqQ6CYDhwPnB5GIaL/5NGkspEJpNZbH0n4J/AccT/gP0MOBL4DnD3K6/0RnuSpF5WkJXqIAj6A78GXgNO7eJnPNHBpc262pck9ZS2tra874cBFwNffjO7BagH/tPBfZKk8lCo8Y8GYEtghzAMZxXoMyWpaFVUVPzv93sAVwNrtbv+EXAscN0S7pMklY9uh+ogCLYhWp2+JAzDR7r6OWEYbtXB5z8B+DaPpKKSTqdZHZgI7POla7cAhwPvdnCfJKn8dCtUtxv7eAEYV5COJKnYhSGVTz3FC/37M2zevP+V3yEK03/o4Lbq6urFn7AoSSp53X1RcQXga8BwYHa7A19Col2kAJoW1CZ081mSlLzXXoPddoMDDsgL1L8ERtBxoE6lUowb59qDJJWr7o5/fAE0d3DtG0Rz1g8CzwNdHg2RpMTlcnDNNXDyyfDZZ/8rf7rKKvzko4+4Jww7vDWVStHU1OTohySVsW6F6gUvJS72GPIgCM4kCtW/CsNwaneeI0mJeuEFGDMGHnggrgUBHHkkQ885hxMffZTZ48czffr0RW6trq5m3LhxBmpJKnMFP6ZcksrGvHlwySVwxhnwxRdxfbPNYOpU2H57IHr5MJ1Ok81myWQytLW1UVFRQTqddoZakvoIQ7UkLc7TT8Po0fDkk3GtXz8YOxZOPx0GDVrklsrKSkO0JPVRPRaqwzA8Ezizpz5fknrE7Nlw9tlwwQXRSvVCW24J06bBFlsk15skqWi5Ui1JCz38MNTWwr/+FdeWWw7OOguOPx76+49MSdLi+SeEJH32GZx6Klx5JbTfxWOHHaLZ6U03Ta43SVJJMFRL6ttaWqC+Hv7zn7i2wgrR+Mchh0Cqu9v5S5L6AkO1pL7pv/+F446Da6/Nr//f/8HkybDeeom0JUkqTS7BSOp7/vAHGDEiP1CvvDJcdx3cdZeBWpLUaa5US+o73nkHjjgCbrklv/7Tn8LEibDGGsn0JUkqeYZqSeUvDOFXv4rGPf7737i+5ppw9dXwwx8m15skqSwYqiWVt1dfhYMPjl5IbK+2Fi66CFZaKZG2JEnlxVAtqTzlcjBpEpxyCnz+eVz/6lehqQnS6eR6kySVHUO1pPLzr3/BmDHw0ENxLQjg6KOj0xKXXz653iRJZclQLal8zJ0bjXScdRbMmRPXR4yA5mb41reS602SVNYM1ZLKw5NPRnPS//hHXOvfPxr/OO206LhxSZJ6iKFaUmmbNQsaG6MV6vnz4/rWW0er01//enK9SZL6DEO1pNL14IPR6vQLL8S1QYNg/Hg45phopVqSpF7gnziSSs+nn0ZjHZMm5derq2HqVNh442T6kiT1WYZqSaXlz3+O9p1+7bW4NnRoNP5RVwepVHK9SZL6LEO1pNLw4YfRiYjXXZdf3203uOYaWGedZPqSJAlDtaRiF4Zw881wxBHw3ntxfZVVYOJE+NnPoj2oJUlKkKFaUvF6+2047DC47bb8+s9+BpdfDqutlkxfkiR9icOHkopPGMK0aTB8eH6gXntt+NOf4Le/NVBLkoqKK9WSissrr0B9Pdx7b369vh4uvBCGDUumL0mSlsBQLak4zJ8PV14Jp54KM2fG9Y02gqYm2HHH5HqTJGkpDNWSkjdjRnSIy9/+FtdSKTj22Oi0xCFDkutNkqRlYKiWlJw5c+CCC+Dss6PfLzRyZHTE+DbbJNebJEmdYKiWlIy//z1anX7mmbg2YACcfjqMHQsDBybXmyRJnWSoltS7Zs2CM86ASy6BXC6ub7NNtDo9cmRyvUmS1EWGakm9Z/p0GDMGXnoprg0eDOecA0cdBf36JdebJEndYKiW1PPa2uDkk6PjxNvbccdoZ4+NNkqmL0mSCsRQLanLstksmUyGtrY2KioqSKfTVFZW5v/QnXfCIYfAG2/EtYqKaPyjttYjxiVJZcFQLanTMpkMjY2NtLa2LnKtqqqKhoYG0ptvDsccA9dfn/8De+wBV10VnY4oSVKZMFRL6pTm5mbq6+vJtX/JsJ3W1laav/c9tlt+eQZ/9ll8YbXV4Ior4Kc/dXVaklR2Ukk3IKl0ZDKZJQbqtYDbgN+GYX6g3n//6ICXffYxUEuSypIr1ZKWWWNjY4eBegxwMTCsXe295ZZj9Vtugd126432JElKjCvVkpZJNptd7Az1hkAGaCI/UF8FbPzFF2Q32KBX+pMkKUmGaknLJJPJ5H2fAo4F/gns1K7+AlANHA58upj7JEkqR45/SFombW1t//t9JdAMbNvu+nyi8Y8zgdkd3CdJUrkyVEtaJhUVFQwATgFOAwa2u/Y0UAs80cF9kiSVO0O1pGWy++qrsyMwql3tC2A8cAEwr4P70ul0T7cmSVLiDNWSlmzmTGhoYMPLLssrP0K0Ov3cEm6trq5e9IRFSZLKkKFaUsfuuw/GjIGXX/5f6XOiEZBJwOI314ukUinGjRvXww1KklQc3P1D0qI++QTq62GnnfICNTvvzB3nncekVGqpgbqpqcnRD0lSn2GolpTv9tthxAhoaoprK64I06ZBSwv7jB1LS0sL1dXVi729urqalpYWRo8e3UsNS5KUPMc/JEXefx+OOgpuvDG/vtdeMGkSfOUr/yul02nS6TTZbJZMJkNbWxsVFRWk02lnqCVJfZKhWurrwhBuuCEK1B9+GNdXXz0K0z/+MQTBYm+trKw0REuShOMfUt/2+uvwgx/Az3+eH6gPPBBmzIC99+4wUEuSpJgr1VJflMvBlClw0knw6adxfb31ovouuyTXmyRJJciVaqmvefHFaFePQw/ND9RHHAHPPmugliSpC1yplvqKefPgssugoQFmz47rm24KU6fCDjsk15skSSXOUC31Bc88A7W18Pe/x7V+/aLxj4YGGDQoud4kSSoDhmqpnH3xBZxzDpx3XrRSvdAWW0BzM3zjG8n1JklSGTFUS+XqkUei1ennnotryy0HZ5wBJ5wAAwYk15skSWXGUC2Vm88/h9NOg4kToz2oF9p++2h2erPNkutNkqQyZaiWysm990JdHbz6alxbfnk4/3w47DBIueGPJEk9wVAtlYOPP4bjj4dp0/Lru+wCkyfD+usn05ckSX2EoVoqdbfdFq1Cv/12XFtppWj7vF/8whMRJUnqBYZqqVS9+y4ceSTcdFN+fe+94YorYM01k+lLkqQ+yFAtlZowhN/8Bo45Bj76KK6vuSZMmgQ/+lFyvUmS1EcZqqVS8tprcPDB8Oc/59cPOgguuSQa+5AkSb3OrQCkUpDLRavQlZX5gXqDDaClJXpB0UAtSVJiXKmWit3zz8OYMfDgg3EtCKJ56nPOgRVWSK43SZIEGKql4jVvHlx8MZx5ZnTc+EKbbRYdMb7ddom1JkmS8hmqpWL0j39ER4w/+WRc698fxo6F00+PjhuXJElFw1AtFZPZs2H8eLjgApg/P65vtVW0Or355sn1JkmSOmSoljopm82SyWRoa2ujoqKCdDpNZWVl9z/4oYei1ennn49rgwbBWWfBccdFK9WSJKko+ae0tIwymQyNjY20trYucq2qqoqGhgbS6XTnP/izz+DUU+HKK6M9qBf6zndg6lT42te60bUkSeoNbqknLYPm5mZqamoWG6gBWltbqampYdq0aZ374JYWGDkyOgFxYaBeYQW46iq4/34DtSRJJcJQLS1FJpOhvr6eXC63xJ/L5XLU1dWRyWSW/qEffRQd2LLLLvCf/8T1XXeFbBYOPRRS/u0pSVKp8E9taSkaGxuXGqgXyuVyjB8/fsk/dMstMGIEXHttXFtllejo8TvvhPXW63qzkiQpEYZqaQmy2WyHIx8dmT59OtlsdtELb78NP/4x7L03vPtuXN9nH5gxA37+8+hQF0mSVHIM1dISLNMox9LuC8NoVXrECPjDH+L6V74Ct90GN94Iq6/evUYlSVKi3P1DWoK2trbu3ffqq1BfD3/5S/4PjBkDF10EK67YvQYlSVJRcKVaWoKKioqu3bfCCtGOHiNH5gfqDTeEe++FpiYDtSRJZcSVamkJurLv9GbAmF/9KjpqfKFUCo45BhobYfnlC9egJEkqCt1eqQ6CYJUgCMYEQXBrEAQvBUEwKwiCT4IgeDAIgtogCFwNV8mqrKykqqpqmX62P3AK8HQQMKR9oB4xAh5+GC65xEAtSVKZKkTg/QnQBGwLPApMAG4BRgJTgd8HgVsaqHQ1NDSQWsqe0VsCjwPnAgMXHuLSvz+ccQY8+SRsu21PtylJkhJUiFD9ArAHsE4Yhj8Pw/CUMAxHE/1X8NeBHwM/KsBzpESk02mmTJmy2GA9CDgPeAzYov2FrbeOwvSZZ8Jyy/VKn5IkKTndDtVhGP41DMPbwzDMfan+DnDNgm+/293nSEmqra2lpaWF6urq/9V2AP4BjKXdywmDB8PFF8Mjj8CoUb3fqCRJSkRPzzvPXfB1Xg8/R+px6XSa+++/nxmPPsrTO+zAA8Cm7X/gu9+FZ56B44+PRj8kSVKf0WN/8gdB0B/4xYJv/7wMP/9EB5c2K1hTUnfdfTfDDz4YXn89rlVURHtOjxkT7fIhSZL6nJ5cTjuf6GXFu8IwvKcHnyP1vA8/hGOPhV//Or++++5w9dWwzjrJ9CVJkopCj4TqIAiOAo4H/gUcsCz3hGG4VQef9QTwjcJ1J3VCGMJNN8ERR8D778f1VVeFiRNh333BzW0kSerzCh6qgyA4HLgcmAGkwzD8qNDPkHrFW2/B4YfDbbfl1/fbDyZMgNVWS6YvSZJUdAo6ABoEwTHAlcCzwI4LdgCRSksYQnNzdGhL+0C99tpw++1w/fUGakmSlKdgoToIgpOBy4h2GdsxDMP3CvXZUq95+WX43veilw4/+SSuH3wwZLPRDLUkSdKXFCRUB0EwjujFxCeIRj4+KMTnSr1m/vxopGPUKMhk4vpGG8F998E118CwYcn1J0mSilq3Z6qDIDgQaATmAw8ARy3mVPJXwzC8trvPknrEjBlQWwt/+1tcS6XguOPgrLNgyJDkepMkSSWhEC8qfnXB137AMR38zHTg2gI8SyqcOXPgggtg/HiYOzeujxoVzVR/85vJ9SZJkkpKt0N1GIZnAmd2uxOpNz3+eLQ6/c9/xrUBA+D002HsWBg4MLneJElSyfEsZfUtM2fCmWfCJZdALhfXt902Wp2urEysNUmSVLoM1eo7pk+PdvV46aW4NmQInHMOHHkk9OuXXG+SJKmkGapV/tra4OSTox082kunYcoU2HDDZPqSJEllw1Ct8nbnnXDIIfDGG3Ft2LBo/GP0aI8YlyRJBWGoVnl6/3045hj47W/z63vuCVddBWutlUxfkiSpLBmqVV7CEH73u2hG+oN2ZxCtthpceSX85CeuTkuSpIIzVKt8vPkmHHoo3H57fn3//aPTEldZJZm+JElS2SvIMeVSosIQmppgxIj8QL3uutFM9a9/baCWJEk9ylCt0vbvf0e7eNTXR7t8LHTYYfDss/D97yfXmyRJ6jMc/1Bpmj8fLr88OgFx1qy4vskmMHUqVFUl15skSepzDNUqPc8+Gx0x/thjca1fPzjhBDjjDBg8OLneJElSn2SoVumYMwfOPTf6NXduXN988+iI8a22Sq43SZLUpxmqVRoeeyw6rCWbjWsDB0JDA5x0EgwYkFxvkiSpzzNUq7jNnAnjxkVb4uVycf3b345Wp4cPT643SZKkBQzVKl733QdjxsDLL8e1IUPgvPPg8MOjOWpJkqQiYKhW8fnkEzjxxGjv6fa+9z2YMgU22CCRtiRJkjpiqFZxuf12OOQQeOutuLbiinDZZXDggR4xLkmSipKhWsXhvffg6KPhxhvz63vtBZMmwVe+kkxfkiRJy8BQrWSFIfz2t1Gg/vDDuL7GGlGY/vGPk+tNkiRpGRmqlZzXX4dDD4U778yvH3ggXHoprLxyMn1JkiR1kqFavS+Xi144POkk+PTTuL7eelF9l12S602SJKkLDNXqXS++CHV1MH16XAuCaIu8c8+FoUOT602SJKmLDNXqHfPmRTt4NDTA7NlxfdNNYepU2GGH5HqTJEnqJkO1et7TT0NtLTzxRFzr1y8a/2hogEGDkutNkiSpAAzV6jlffAFnnw3nnx+tVC+0xRYwbRpsuWVyvUmSJBWQoVo945FHotXp556La8stB2ecASecAAMGJNebJElSgRmqVViffw6nnQYTJ0Z7UC+0/fbR7PRmmyXXmyRJUg8xVKtw7r032tnj1Vfj2gorROMfhx4KqVRirUmSJPUkQ7W67+OP4fjjoznp9nbZBSZPhvXXT6YvSZKkXmKoVvfcdhscdhi8/XZcW2klmDABDjgg2oNakiSpzBmq1TXvvgtHHgk33ZRf33tvuPJKWGONZPqSJElKgEOu6pwwhOuug+HD8wP1mmvCLbdENQO1JEnqY1yp1rJ77TU4+GD485/z6wcdBJdcEo19SJIk9UGuVGvpcjm46iqorMwP1BtsAC0t0QuKBmpJktSHuVKtJXv+eRgzBh58MK4FARx1VHRa4gorJNebJElSkTBUa/HmzYOLL4Yzz4yOG19o+HBoboZvfzux1iRJkoqNoVqL+sc/oiPGn3wyrvXvD2PHRqclDhqUXG+SJElFyFCt2OzZMH48XHABzJ8f17faKlqd3nzz5HqTJEkqYoZqRR56KFqdfv75uDZoEJx1Fhx3XLRSLUmSpMUyKfV1n30Gp54aHdgShnG9qgqamuBrX0uuN0mSpBJhqO7LWlqgvh7+85+4NnQoXHhhVE+546IkSdKyMFT3RR99BMcfD9dem1/fdVeYPBnWXTeRtiRJkkqVobqvueUWOPxwePfduLbKKnD55bDfftEe1F+SzWbJZDK0tbVRUVFBOp2msrKyF5uWJEkqbobqvuLtt+GII+APf8iv77MPTJwIq6++yC2ZTIbGxkZaW1sXuVZVVUVDQwPpdLqnOpYkSSoZDs2WuzCMxjxGjMgP1GutBbfdBjfeuNhA3dzcTE1NzWIDNUBrays1NTVMmzathxqXJEkqHYbqcvbqq7DLLnDQQfDxx3G9rg6yWdhzz8XelslkqK+vJ5fLLfHjc7kcdXV1ZDKZAjYtSZJUegzV5Wj+fLjiChg5Ev7yl7i+4YaQycCUKbDiih3e3tjYuNRAvVAul2P8+PHd7ViSJKmkGarLzXPPRXtMH3UUfP55VEulogNcnnkGdtppibdns9kORz46Mn36dLLZbFc7liRJKnmG6nIxdy6ccw5ssQU8/HBcHzEi+v6SS2D55Zf6MV0d5XAERJIk9WXu/lEOnnwSRo+Gp5+OawMGRCclnnIKLLfcMn9UW1tbl1ro6n2SJEnlwFBdymbNgrPOgosvjuaoF/rmN6G5GUaN6vRHVlRUdKmVrt4nSZJUDgzVpeqBB2DMGHjhhbg2eDCMHw/HHAP9+nXpY7u677T7VUuSpL7MmepS09YWnYhYVZUfqL/73ehFxOOP73KgBqisrKSqqqpT91RXV3vCoiRJ6tMM1aXk7rujbfKuuiquVVTA5MnRVnkbb1yQxzQ0NJBKLdtfGqlUinHjxhXkuZIkSaXKUF0KPvwQfvEL+P734fXX4/ruu0eHuNTXR9vmFUg6nWbKlClLDdapVIqmpiZHPyRJUp9nqC5mYQi//z0MHw6//nVcX3VVuOEG+NOfYJ11euTRtbW1tLS0UF1dvdjr1dXVtLS0MHr06B55viRJUinxRcVi9dZb0ez0bbfl1/fbDy6/PArWPSydTpNOp8lms2QyGdra2qioqCCdTjtDLUmS1I6hugOJBckwhGnTohcOP/kkrq+9NlxzTTTy0csqKysN0ZIkSUtgqP6STCZDY2PjYo/qrqqqoqGhoedmiF9+Gerq4K9/za8ffDBccAEMG9Yzz5UkSVK3OFPdTnNzMzU1NYsN1ACtra3U1NQwbdq0wj54/nyYMCE6rKV9oN5oI7jvvmiF2kAtSZJUtAzVC2QyGerr68nlckv8uVwuR11dHZlMpjAPzmZh++3h2GNh5syolkrBiSdG+05/97uFeY4kSZJ6jKF6gcbGxqUG6oVyuRzjx4/v3gPnzIlOP9xyS3j00bg+alT0/YUXwpAh3XuGJEmSeoWhmuilxI5GPjoyffp0stls1x74+OOw9dbQ0ABz50a1AQOgsRH+/vfomiRJkkqGoRq6PMrR6ftmzozGOr71LfjnP+P6ttvCU0/BuHEwcGCXepEkSVJy3P0DaGtr6/n77r8/2tnjpZfi2pAhcM45cOSR0K9fl3qQJElS8gzVQEVFRc/d98kncPLJMHlyfj2dhilTYMMNu/RsSZIkFQ9DNXR53+ml3nfnndEe02++GdeGDYNLL4WDDoIg6NJzJUmSVFycqSY6MbCqqqpT91RXV3d8yuD778PPfx6dftg+UO+5J8yYAaNHG6glSZLKiKF6gYaGBlKpZfufI5VKMW7cuEUvhCHccAOMGAG//W1cX311+P3v4dZbYa21CtSxJEmSioWheoF0Os2UKVOWGqxTqRRNTU2Ljn688QbssQfstx988EFcP+CAaHX6Jz9xdVqSJKlMGarbqa2tpaWlherq6sVer66upqWlhdGjR8fFXC564bCyEu64I66vuy7cdRdcdx2sskoPdy5JkqQk+aLil6TTadLpNNlslkwmQ1tbGxUVFaTT6UVnqF96Kdom7/778+uHHw7nnQdDh/Za35IkSUqOoboDlZWVHb+IOG8eXH55dFjLrFlxfZNNoLkZvvOd3mlSkiT9//buNVauqozD+PO2gCkFWgSRRIiFyqUJQqRYaOulLVARiQlEEmNSDAG0gaRAuYZbQSOCCVCKeIkKiBqCgFwUYou0kZuUBAJBKJTbiQJFoMVaSykirx/2PuGcsdPksCez5nCeX3Ky6F7Ts98PuzN/1rx7bakndKz9IyJ2iYhrIuKViNgYEX0RsTAitu/UOXrCE0/AtGlw+unvB+rRo+Hss+Hxxw3UkiRJI1BHVqojYiLwILATcDvwNDAFOBk4LCKmZ+bqTpyrmI0b4eKLq593333/+H77VavTkyeXq02SJElFdar940dUgXpeZl7VfzAiLgdOBb4HzO3Qubpv+XI47jh48sn3j221FSxYAGecAVtuWa42SZIkFde4/SMidgdmA33A1S3TC4D1wJyIGNv0XF23fj3Mnw9Tpw4O1NOmwWOPwTnnGKglSZLUkZ7qWfW4JDPfGziRmeuAB4CtgYM6cK7uWboU9t0XrriieqgLwNixsGgR3HcfTJpUtj5JkiT1jE60f+xVjyvbzD9LtZK9J3BPu18SEY+0mdr7g5f2AS1dCq0Pdzn00Go/6gkTul6OJEmSelsnVqrH1ePaNvP9x8d34FzdMWMGTJ9e/ff48XDttbB4sYFakiRJm9SNfar7n82dm3tRZm5y+4x6BXv/The1WaNGVTt6XHhh1f6x885dPb0kSZKGl06E6v6V6HFt5rdred3wsNdecMMNpauQJEnSMNCJ9o9n6nHPNvN71GO7nmtJkiRpWOtEqF5Wj7MjYtDvi4htgenABuChDpxLkiRJ6jmNQ3VmPg8sASYAJ7VMXwSMBa7PzPVNzyVJkiT1ok7dqHgi1WPKF0XEwcAK4EBgJlXbx7kdOo8kSZLUczrR/tG/Wn0AcB1VmD4NmAgsAqZm5upOnEeSJEnqRR3bUi8z/w4c26nfJ0mSJA0XHVmpliRJkkYyQ7UkSZLUkKFakiRJashQLUmSJDVkqJYkSZIaMlRLkiRJDRmqJUmSpIYM1ZIkSVJDhmpJkiSpIUO1JEmS1FBkZukaNisiVo8ZM+ajkyZNKl2KJEmSPsRWrFjBhg0b1mTmDkP9u8MhVL8IbAf0FTj93vX4s/J80wAABl1JREFUdIFzq7d5bagdrw2147WhzfH66A0TgH9l5m5D/Ys9H6pLiohHADJzcula1Fu8NtSO14ba8drQ5nh9DH/2VEuSJEkNGaolSZKkhgzVkiRJUkOGakmSJKkhQ7UkSZLUkLt/SJIkSQ25Ui1JkiQ1ZKiWJEmSGjJUS5IkSQ0ZqiVJkqSGDNWSJElSQ4ZqSZIkqSFDtSRJktSQoXoTImKXiLgmIl6JiI0R0RcRCyNi+9K1qYyI2CEijo+IWyPiuYjYEBFrI+L+iDguIvy3pEEiYk5EZP1zfOl6VFZEfD4ibomIVfXnyqqIWBIRh5euTWVFxFfqa+Gl+rPlhYi4KSKmlq5NQ+PDX1pExETgQWAn4HbgaWAKMBN4BpiemavLVagSImIu8GNgFbAM+BvwceAoYBxwC3B0+g9KQETsCjwBjAa2AU7IzJ+XrUqlRMR5wHeBN4A/UL2P7Ah8BliWmWcWLE8FRcSlwJnAauA2qmvkU8BXgS2AYzLz1+Uq1FAYqltExGJgNjAvM68acPxy4FTgp5k5t1R9KiMiZgFjgTsz870Bx3cGHgZ2Bb6WmbcUKlE9IiICuBvYDfgdcDqG6hErIo4Gfgv8CTgqM9e1zG+Zmf8pUpyKqj8/XgZeB/bNzNcGzM0ElgIvZubuhUrUEPmV9QARsTtVoO4Drm6ZXgCsB+ZExNgul6bCMnNpZv5+YKCuj78K/KT+44yuF6ZeNA+YBRxL9Z6hEapuC7sUeAv4RmugBjBQj2ifpMphywcGaoDMXAasAz5WojB9MIbqwWbV45JNhKd1wAPA1sBB3S5MPa3/Q/HdolWouIiYBFwCXJmZ95auR8VNo/rG4i7gzbp39qyIONl+WQHPAu8AUyJix4ETEfEFYFuqbzg0TGxRuoAes1c9rmwz/yzVSvaewD1dqUg9LSK2AI6p//jHkrWorPpa+BVVv/05hctRb/hsPf4DeBT49MDJiLiXqm3s9W4XpvIyc01EnAVcDjwVEbdR9VZPpOqpvhv4dsESNUSG6sHG1ePaNvP9x8d3oRYND5cA+wB3Zebi0sWoqAuobjz7XGZuKF2MesJO9TgXeBE4BFhO9bX/ZcCXgJuwdWzEysyFEdEHXAOcMGDqOeC61rYQ9TbbP4Ym6tG7O0VEzANOo9ohZk7hclRQREyhWp2+LDP/Uroe9YzR9RhUK9L3ZOa/M/NJ4EjgJeCLtoKMXBFxJnAzcB3VCvVYYDLwAvCbiPhBueo0VIbqwfpXose1md+u5XUaoSLiJOBK4ClgZmauKVySChnQ9rESOL9wOeotb9bjC5n5+MCJ+tuM/m+3pnS1KvWEiJhBdSPrHZk5PzNfyMy3MvNRqv/pehk4rd5EQcOAoXqwZ+pxzzbze9Rju55rjQARcQrwQ+CvVIH61cIlqaxtqN4zJgFvD3jgS1LtGgTws/rYwmJVqoT+z5R/tpnvD91julCLes8R9bisdSIz36LarnUUVVuZhgF7qgfrv7BnR8Solv2ItwWmAxuAh0oUp/Lqm0ouAR4DDs3MNwqXpPI2Ar9oM7c/1Qfi/VQBy9aQkeVeql2B9oiIrTLznZb5feqxr6tVqVd8pB7bbZvXf7z1ulGPcqV6gMx8HlgCTABOapm+iKrX6frMdO/ZESgizqcK1I8ABxuoBdXX+Jl5/KZ+gDvql/2yPnZjyVrVXfV7xI1ULYUXDJyLiEOpblRcizsHjVT31eO3IuITAyci4stUC3lvUz3lWcOAK9X/70SqC3hRRBwMrAAOpHpM+Urg3IK1qZCI+CbwHeC/VG+E86oH5w3Sl5nXdbk0Sb1tPtVnyLn13sMPU+3+cSTV+8kJmdmuPUQfbjdT7UN9CLAiIm4FXqVqJTuC6gbXszNzdbkSNRSG6haZ+XxEHEAVoA4DDgdWAYuAi7whbcTarR5HA6e0ec2fqe7gliQAMvO1iDgQOI8qSB9E9aS8O4HvZ6bthCNUZr4XEYdTfTP+darrY2tgDdUDgxZl5pKCJWqIItPd4SRJkqQm7KmWJEmSGjJUS5IkSQ0ZqiVJkqSGDNWSJElSQ4ZqSZIkqSFDtSRJktSQoVqSJElqyFAtSZIkNWSoliRJkhoyVEuSJEkNGaolSZKkhgzVkiRJUkOGakmSJKkhQ7UkSZLUkKFakiRJashQLUmSJDVkqJYkSZIa+h98gCF/wMF2qAAAAABJRU5ErkJggg==\n" }, "metadata": { "image/png": { @@ -121,7 +81,7 @@ "y_hat = np.arange(0,10)\n", "plt.scatter(x, y, c='k')\n", "plt.plot(x,y_hat, c='r')\n", - "plt.labels\n", + "# plt.labels\n", "# plt.savefig('linear_reg.png')" ] }, @@ -130,7 +90,76 @@ "execution_count": 20, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "# Gradient descent\n", + "\n", + "fx = x^2\n", + "dx = 2x + c\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/png": "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zj1XOvXUwHjXLmn6dEnSzTffrJo1a0qSNmzYoLfffttRgYgGTz/9tHbt2iVJ+s1vfqNLL73UcUUAUBjhHwBKw5hfbfglSVWrVtUdd9zhHf773/+unJycSFeHKLBnzx79+9//9ub33nuvUlJSHFYEAL9G+AeA0vKH//HjpdxcSdKtt96qtLQ0SdK6des0evRoF9XBseeee047duyQJNWvX1+XX36544oA4NcI/wBQWh06SLVrB8Zbtkhz5kiSqlWrpttvv9077aGHHlJu8BcDJIa9e/dq5MiR3vzee+9VuXLlHFYEAMUj/ANAaSUnSwMHFsyDq/5I0vDhw1W9enVJ0urVq/Xuu+9Gujo49Oyzz2rbtm2SpNNOO01XXnml44oAoHiEfwA4FpmZBeMPP5SslSSlpaXptttu85564IEHWPknQezevVuPPPKIN7/nnnuUmprqsCIAKBnhHwCORdeuUrC/X999Jy1e7D11++23q0aNGpKk9evXa9SoUQ4KRKT9+9//1s6dOyVJZ5xxhq6++mrHFQFAyQj/AHAsUlOl/v0L5r7Wn+rVq+tPf/qTN3/wwQd18ODBSFaHCNu2bVuhFX7+8pe/0OsPIKoR/gHgWBWz22++3//+96pTp44k6YcfftALL7wQycoQYY888oj27t0rSWrSpAnr+gOIeoR/ADhWF1wgVaoUGK9aFfgIqly5su69915v/o9//MMLh4gvP/30k5555hlv/uCDD7KbL4CoR/gHgGNVqZLUp0/BvMjV/xtuuEGnBncD3rp1q5544olIVocIeeihh7y2rlatWmnQoEGOKwKAoyP8A8DxOELrT/ny5XX//fd780cffVS//PJLpCpDBKxevVovvfSSN3/ooYdkjHFYEQCUDuEfAI5H375S/o2dixZJGzcWevq3v/2tGjduLEnas2eP/va3v0W4QITT3Xff7W3k1rVrV/Xu3dtxRQBQOoR/ADge1atLvXoVzMeNK/R0SkpKobXfX3zxRa1ZsyZS1SGMZs2apXG+/94jR47kqj+AmEH4B4DjdYTWH0nq16+funTpIknKycnR3XffHanKECbWWt11113e/LLLLlOrVq0cVgQAx4bwDwDHa8AAKSn4bXT2bOnnnws9bYzRyJEjvfmHH36o2bNnR7JChNjYsWM1d+5cSVJqaqr+/ve/O64IAI4N4R8AjletWlLn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\n" + }, + "metadata": { + "image/png": { + "width": 383, + "height": 252 + }, + "needs_background": "light" + } + } + ], + "source": [ + "func = lambda x: x**2\n", + "func_dx = lambda x:2*x\n", + "\n", + "x = np.arange(-20,20,0.1)\n", + "y = func(x)\n", + "\n", + "point_x = -6\n", + "point_y = func(point_x)\n", + "\n", + "\n", + "\n", + "dx = styczna(x)\n", + "\n", + "learning_points_xs = np.arange(point_x, 0, 0.8)\n", + "learning_points_ys = func(learning_points_xs)\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.plot(x, y, c='k')\n", + "\n", + "for px in learning_points_xs[0:1]:\n", + " slope = func_dx(px)\n", + " intercept = -px**2\n", + " styczna = lambda x: slope*x + intercept\n", + " dx = styczna(x)\n", + " ax.plot(x, dx, c='r', zorder=1)\n", + "\n", + "ax.scatter(x=point_x, y=point_y, c='r', zorder=6) #start\n", + "# ax.scatter(x=0, y=0, c='g', zorder=6) #min\n", + "# ax.scatter(x=learning_points_xs, y=learning_points_ys, c='y', zorder=5)\n", + "plt.ylim((-20,80))\n", + "plt.xlim((-20,20))\n", + "# plt.xlabel('x')\n", + "# plt.ylabel('f(x) = x^2')\n", + "\n", + "plt.savefig('gradient_descent_1.png')\n", + "\n", + "# https://towardsdatascience.com/understanding-the-mathematics-behind-gradient-descent-dde5dc9be06e?\n", + "# https://medium.com/code-heroku/gradient-descent-for-machine-learning-3d871fa48b4c" + ] }, { "cell_type": "code", @@ -139,5 +168,28 @@ "outputs": [], "source": [] } - ] + ], + "metadata": { + "language_info": { + "name": "python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "version": "3.8.3-final" + }, + "orig_nbformat": 2, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "npconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3, + "kernelspec": { + "name": "python38264bit90963b6dfcff4977b23d3abddad7c054", + "display_name": "Python 3.8.2 64-bit" + } + }, + "nbformat": 4, + "nbformat_minor": 2 } \ No newline at end of file diff --git a/docs/images/sigmoid.png b/docs/images/sigmoid.png new file mode 100644 index 0000000..493fae6 Binary files /dev/null and b/docs/images/sigmoid.png differ diff --git a/docs/sources/Krysicki Wlodarski - Analiza matematyczna w zadaniach (I).pdf b/docs/sources/Krysicki Wlodarski - Analiza matematyczna w zadaniach (I).pdf new file mode 100644 index 0000000..f00b04c Binary files /dev/null and b/docs/sources/Krysicki Wlodarski - Analiza matematyczna w zadaniach (I).pdf differ diff --git a/docs/sources/Statystyka - Mieczysław Sobczyk.pdf b/docs/sources/Statystyka - Mieczysław Sobczyk.pdf new file mode 100644 index 0000000..9f6e858 Binary files /dev/null and b/docs/sources/Statystyka - Mieczysław Sobczyk.pdf differ