From 215305e7e277071903466ff0d3961bb840ae89f1 Mon Sep 17 00:00:00 2001
From: joshuaroschlaub <joshuaroschlaub1999@googlemail.com>
Date: Sat, 13 Nov 2021 15:25:47 +0100
Subject: [PATCH] =?UTF-8?q?python=20scripts=20hinzugef=C3=BCgt?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../accuracy_graph_v1.png                     | Bin 13441 -> 0 bytes
 .../accuracy_graph_v2.png                     | Bin 18689 -> 0 bytes
 .../download_fits.ipynb                       |   2 +-
 .../spectral_classifier_big/loss_graph_v1.png | Bin 12306 -> 0 bytes
 .../spectral_classifier_big/loss_graph_v2.png | Bin 16777 -> 0 bytes
 .../spectral_classifier_from_npy.ipynb        |  45 +--------
 scripts/create_modell.py                      |   6 --
 .../mnist_conv_example.py}                    |   0
 .../mnist_example.py}                         |   0
 scripts/main.py                               |  45 ---------
 .../__pycache__/benchmark.cpython-38.pyc      | Bin 0 -> 1863 bytes
 .../__pycache__/plots.cpython-38.pyc          | Bin 0 -> 988 bytes
 .../__pycache__/rechnen.cpython-38.pyc        | Bin 0 -> 402 bytes
 scripts/spectral_classifier/benchmark.py      |  38 ++++++++
 .../download_fits_from_sdss.py}               |  16 +++-
 scripts/spectral_classifier/fits_to_npy.py    |  76 +++++++++++++++
 scripts/spectral_classifier/plots.py          |  23 +++++
 .../spectral_classifier.py                    |  89 ++++++++++++++++++
 scripts/test_modell.py                        |   0
 scripts/train_modell.py                       |   0
 20 files changed, 242 insertions(+), 98 deletions(-)
 delete mode 100644 notebooks/spectral_classifier_big/accuracy_graph_v1.png
 delete mode 100644 notebooks/spectral_classifier_big/accuracy_graph_v2.png
 delete mode 100644 notebooks/spectral_classifier_big/loss_graph_v1.png
 delete mode 100644 notebooks/spectral_classifier_big/loss_graph_v2.png
 delete mode 100644 scripts/create_modell.py
 rename scripts/{conv_network.py => digit_recognizer/mnist_conv_example.py} (100%)
 rename scripts/{run_example.py => digit_recognizer/mnist_example.py} (100%)
 delete mode 100644 scripts/main.py
 create mode 100644 scripts/spectral_classifier/__pycache__/benchmark.cpython-38.pyc
 create mode 100644 scripts/spectral_classifier/__pycache__/plots.cpython-38.pyc
 create mode 100644 scripts/spectral_classifier/__pycache__/rechnen.cpython-38.pyc
 create mode 100644 scripts/spectral_classifier/benchmark.py
 rename scripts/{download_sdss_fits.py => spectral_classifier/download_fits_from_sdss.py} (55%)
 create mode 100644 scripts/spectral_classifier/fits_to_npy.py
 create mode 100644 scripts/spectral_classifier/plots.py
 create mode 100644 scripts/spectral_classifier/spectral_classifier.py
 delete mode 100644 scripts/test_modell.py
 delete mode 100644 scripts/train_modell.py

diff --git a/notebooks/spectral_classifier_big/accuracy_graph_v1.png b/notebooks/spectral_classifier_big/accuracy_graph_v1.png
deleted file mode 100644
index f8a4df3979eabd5703067bcb92ee451d6c58a24a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13441
zcmeAS@N?(olHy`uVBq!ia0y~yVBEmKz^K5%#=yXERYNV4fq}uY#5JNMI6tkVJh3R1
z!8fs_ASb^hCo@T*EVZaOGe6H*&qU8yM<Ju6q@dVJUq2VFKrg>2UH{BHm-7q^44efX
zk;M!Q+`=Ht$S`Y;1OtQdJ5LwKkcv5P@0QnGz54g~$LsBH926Q2gxwsLZ8{t<<)K!d
zYj&Y>XpHWo^=lV<=jLWdZ^_fuTDL2pFic>j!h#b)DetEm9Ohv0a60z$@5j9dd^rRj
zOsdX*_xoqX9ro|{-v4^S^nGsezUS5Zp3QM~aZ$N*g`<p7NlEFrGozZ4QlcmA$sk7K
z>Z@nuRzBI4edf)b$+43=rYvO;7M!?Y34`#;V`p@%ZkTq=(cv=SjNZ3y_x%|+ZH#Xx
zr|Hj*bT*bwPpeEbyLcw(&$azm&WO#5TsPC#Z1cCe)4OKf{J!t)J=RC3WnU*5&whRT
zTeR`(kdspSMw{i&<V>HLI`gLU(`oZx-i}|F|5M=pZ_c!DGiI(e-8?tV?CkfrdgIgU
z9u!+#|NckOxcdH?f5~aP8x+&7T|Tqyci+Z~XXY7hj@bX!-*mJ7*__=obIms2pB1TW
zd^<bs>z`|{^U^HS#DZtekA0F7+~B!mw~z&Y26GHk4|5&&l1G1k%kd?o<u+_@6m+P4
zQ2Zd+xch7E%zBnRj8|CieSRx`f7{)LiwANYY#-b|pq?fc-udergE`a51Fi>T)5><{
z?>}4f)$Z-;mD~o`x8L<xU|rC*epz+nC9gWQ>5T7x_x)50V7k-%edZj#Im~xnu2$rn
z!O_D$i(xs#|KfAGOlr*Gzu$hZdLa8eCQ$XYfaOY&1fh5H%FgAMom<PkjLCRTvAxA}
zu15aGb^E^7vHiJj`F-ho?h2I&4dMcO8zmlaK98AL{H``(+I_=3)_-s3%zijWyYSpz
zHj!W3td*YMNqK&!=6TG@;yk&yj&GlJ_wmhmF{k==`JLQzJ9nmqF-vgWc{?Ziz4f#0
z`{u7ST4w#+?vt$XeM|G>mfz<Vue)KnolU>t`}G3D4JR$X&nRAZz;gQYIkO)|f0K&K
zNK6YnU|ON5FC+wVu-R|h^Xng!>fZmXcHq`u?m5Lv9mFO)i{5t6^7)@_v9G`HvHYMN
zFCMdQ=2Ir$+S{@dXMQ!>?745<_PGb%R_H3${Emn`n6|Pac7~|#>Yg=4rdtd*pFfi`
zd42T9^;1_cK1g2BJag-j?5FQa&YiV6H_L^|k5O%65_6mYV?tWn_osX1Zg4F5dGGf6
znfE{IJkUS4GiAT~qT+XNy=1=YJ`i58vUnZe2c`}GEg~IOb8WlHB_fk{Q%>RH`{x~p
zUe|qjerj)>Tm;jWvU69Dy-u=?;<b3r)nHhmdsI5$wYO6blaJC-i3du?*2m2`9)?%k
zZMe^LxiKkW$4uARHx(8vzrRhNY5VV};IuT;+GgWPT7`F15_T7_J8-6o>H06-YGI4(
zXV!g_-9B$->Bp^n?#%tOBZZB-jW%DdeST*e<HvoEk2CCN?<>>O<GjK8#%y!h0ol6K
zcFa;UZ*mxS8*f%Ie*JX&pV9=50?iNez5eV`3Uy;t6Fg|SUF3buxyu#0bG#e8=M?{*
zQ~bNZu_FG8^@nrQd%xZ;GrL#0A-(2w_>XIAd#oGnXGY3>aNnbFcmMs;1FaQ_yJYhj
z+|%zrif8`(@!Zi|_J4d=3eLU#^7gapo@<Zg7MxjegzJx#zQyMchknHFm-_T!7rQ>A
z8RO|j#=6t{4@%p7+WY>`Opg;AHr@TFq?9`IX83{Vb33Ou#ddetv(D&{nKtt)!@eWd
z?bF5IRJr_F$sOpTm6EppVXU&5(?ivT9=ZmCf}Gxt`HeGgW*Fa2O5^6+eCNy?P2=dq
zds7_muG-}$D9CB+$Zzl<G~t2Zw0MRs-)!3+#$HxZQWDgAVH|4xeA$f1Zsj#ak{@>E
zPiuL9M(5@kDeLEEa+&*Au3Wj!wOjdZn2XD)*~aPT!k)+c?0)PVbb)z|&?OCPQ@?HR
z_bRhRbc^ZEu&w@fa*emkl3RwGx4Oq`o3uEIKe`yf`aaa+(~&c6GjHY?&z?JZa`B|o
zLV^<$xY`*`ADg{7Z-2?2%C~$E=SV-DbGqbQ>b3RqV!8=}f|h;{1rp{nnE!H9{&sA(
z;O~yR?Mg~Pe_8*^%$T{C_X~SaZTYNPf%o@(ES|?5*!}TAYsKgDZ&~x~?j?(gicXw6
z*VobUVCOVlhngCjmoHx)Ir4&SuTs$0Cb@)jJG1*X-C-<eeH3x?=1mn<)r*T<xli4*
zbncs4+?RWM8%VF4o7;xdf)hDJ_+mR4g98E__EvoriDOJiyRtgme{G~7=d2Dc1BZvA
z4!?9<Rc0vZ9ca=tH=q7|UiG^f+joCB#C`JYS=&ce^?x4A&$K9fR2ZhFBvdDo5c;Bk
zF)S#k=*U~U|9^@nO`hDp<J|mzU)0ape!nBE>F=VlhNV`(U1jJ0f4?Jl7OBSWDp6EZ
zYm3^Nb#X^w^0RYuPcL%q-tp(t>652UEn2XkVfXuevl9=uF|wzN-rQSlE*?|Bm_Dyk
z?S9>F-OS9)nm-?ptEi|Lq?{1Y+xH`B-L6+!QCl(&`kLQ8vV4A>S74yv`@P@g-rm}(
ztghaky?*bs+}qnOE_UZX)-Qj4j%BfjuP^T>b!8zrt}d?|TQ)cF?)<styRF%iXPXtb
zH}qP6?(AIUIJZS&l5nzzUx%utVVhOm`N_gb9)4eJ{d*J@)x2Uqsw*Thzj^2{zA5AI
zx`ua~ohRS2sW`c^J@(&=#r>NS4l;p!^yK8^oi7%3M{Gzq*ce!|*u8&Q-rZeKo<G05
z*qwjfo=;w{uC5MGlRrIO|M}bP_n#dVkAL!N_4;Sc{B{q1y<TtsBx2>tl{NqWez*C4
zr?^MPa?<p;s?K)#x*40#+s$T|t7!Q6__%S_l@$&D{wO^>V|l!9uj`uo59NJ+=G>V1
zzIuJb+TGmzH`h4^$@oqZ&bVyQIVs3JuTC&~+dEZr`{}aP-8aHxs%|77bG!P1b&hyO
z=_!_2o>HM?&yW1h_kVAFv`DnZrJ$j;X`XHMG|8raSAzXNK5Um~nlN?h(N9lL^K)+K
z>EYQ`@{-Bn`@6f5o6~$-f6JL<Txcvk)+ft-U`ys@zBly`4m2)VvV`T+aY4?^-(B7}
zcNEuKh{|wi{GS%$7<h9-Xa7pa$xm1=O%l$yzr)OTl5kCb1&9-(K5xg170Pnk7p!Qx
zv)A>>v-ioz=P8vvd;fW_o>KYx`>*%9t~q};{bAeOC+~EX_P_YBTx?O6#7R!Wx`*P`
z4@$j~bj0Ue>$t`{nd#Hc)=eF}8<e+BS><(hmMOo@e49!mVRgThUteCTsHt7rU;m%0
zeZ}#kM`bJIL`7Ze>grm5-`gJ-5+ZW+=+TDn(#t$bpUklqVEA`%i{kbN2dXW1b8G&O
zU$Afe*DLD+h0?d@7AP#Z6uieiSSZ<V$5LT=Vb{f0fhMbj>wRvEicH<0{XgNt(|32D
zSJxRZl>cff{Jf57THdMT^g6-a+})X%4Llju8mCT~;u05kv^?$p&SG^<O-&UwwM{7}
zh4%e^x4S|9{~6=+DQ9LF-YLId>odckQP#SQ<&T7tdT{1S<?Q2eAj5u6yQ_0|%JEHS
zE7#oKH+}E#Q`;gQEy|wojC;wy+}D$*&8b-M^vaRzRbBm-MXxnyJW5{F(cihq@oh5q
zzS^TpUA*2eVp_v>b#-{ZUG1-eTbauzPMF|uxQ&-zN7|x5L4VH&rny$7i*j#o`||Ft
z^@HQ}9}cqbd^Rh);``n5m)F<J_ez_qX|DYBf129E<Ce$O;#Vi#d}cE(@7CE*x|KTj
z_w4q$9#z#<{_bT@*vchKRVGZ6saII>>RM0liO((@FHSVxac5Qb_Mo)1W!m-j8;*91
zU*1>yTOm}WrnR-z#nn|%R`%?dmzQ@w?z5g@UH*>qt??!MV9Ubja`8<$!E)Z_&o}0L
z&YPBdF8Ss%n@?Qb{A(^NX!dREodiniX1v+5FO*h`F28?}`Rtiz7SD~EW8G6<<l8r`
ziQe9~di}mxmo5b*B_~&YJSyHCJIQ6j+@G#G_up`9#V6?A-!nV6`kQQox}{;88SmsB
zd$Of+rBp9o6OTCAxzTY=jMG#mou(~$cW24h{ZPD->S4OQJl^oM`FlHokki}Vq}^O*
zWA@g{LStoGj!3SQYGGV^+m^f++^gKSu87yxQ`-Ia$q$VKE>CudOr5eR>2%(GORf7m
zSDmd)$+fpIGBex7wpRMeqn@y@8JAxqe2<SRYHITGo5AGcqLq7k9g~{=>BLW$bbVsC
zeLYaQ>V=fs>0hQVr_4L!zuSDN?_rf&W?qXT@476?(pd52NkBvAiNvW>te&MkHL83m
zrlx!MP}A3YZ%lc!j~50mKQ`yyD!I2(SJjlarn&UiO}?;zL3pCkw)Z!WPf4}(iQ3h=
ze)`i1ySH~pvE7}${KM?|TT&fvvu(+rvqaB<(~32MV|D0ivEAkG(+;=s^2poG`F_9t
z|Af+C-`}4<F;V&C8Jj;VuB*?hXi7ZXHgU!bj*9K+m9N)s@3T6**QM=J(D6gOyJtMf
zPCa|})KSY7;l|T8-!@HfxXtz@H+H^Nr{O`p&?P*q5fT}fmUy;442|@+`N(oTzW#3`
z!|y+z&ohV4YFRn=r>jr&zNwzx+YKr+`J&6kli227n!NM(oNGK8w;TF0OIIxX94>T7
zBq8+0zTfW_SAKqWr}Ft+2AeMzoM%V|FY`$}-X|*}D*Ew+a(}_i)ag@i=AE5o8dLM}
zs7}O&hChF5^7j2q6Vr`y`Tgzf=`*br$7Rb6vajiU`uut4t5vHjemrcie6@1<jSY#+
z%xpXgrlwOpC#%Wsu=UQ$((1SWXR+A5pY6f4=)A-u9fE5jH$U63J$K@VCv%cdF0;|!
zFzty!`dvORFWFL|q!-th*)iX`x;+2&uPduX%fHO+Z0R_`yP@#=;blJ?@1`&AD>%5g
zJ=Uh;LxNk6M4`fgV?C0Ge|&tr^ZC5$6|uX`qPOQQEq{M6rt0O=cH8|Q{(L?^dB%(r
zdn!NAFwd8}yQ|cC!yEnjpWLOduPt4&q^0<rWqal4XNEOD3gqhl6sq~oDmhWR|Jj+D
zhqc%5In*O*TyXB<>TvyEUtha>d3i0(zpb<|yFAhG{+b)Fcn?HODt=(KCV2LhXMJ^R
zB`&P9n|pb3XWyj<+?@Usr4t-4Y|ReemUHt^8?W?<lP48bRa=ksN*ABE{cezYN+j#b
zii5wtzP`Dq(zsX3bX9>oC<1<bc*s!l>Pn~ITr1fKv$Qi3ZoN{jg@uOF=6NX>7rCZR
zn{J+a%Vgb-M_tUDAMs0>bgT?sUi5P5^srysbcL+u6t6jRvpC_%gELoeYibo<>FR#A
z=Gsb7+}Gv4zWhN#y<L<ubfR>Edxqv*pYYgH(f9lR+s!u1P5SWQ;GUn)W<PoI#322g
zOj1%(#>GXht=j`Xh6ldR`TFWAsFsb~oHlXNq(c)Fo%?ppS3cVudGq!*kAkP~wIA*d
zz0JpS;6}Y*;q11p61UWw|K&<gxT(}Cv31iDsjfQ=+>;JAvlqW!yM0sX>#%+Qeq|r)
zk#ufm<L&6|OuV$jb4~2-ZymS4zr8)({C>@3MrO7Rpk~6^+3W|_#qM4axmm6B)s@80
z&(8KpoA>?u`<t0P|8dYh?v45P_wh&?wfug+U;eoasLaXV^YNJH&z-6TMc>~&e!Nq9
z#+DN9%i(#8H|&_wGDG9noJptN{*Ai0KbQH^q|$vstL#}LM6JJG2|juHw6d;lFDPd2
zmR>JBsXBea%$c6k^<p!wue&R_egES=>m5Iz&3<`hrEu)7l7;E#=P{JLyEAiL?Czph
zE0<r|l<NKK%gf>fP@}ByAglO=9firDMD*Zq-rZe>DJLc{|K9O*TJ(!sTUYPmb`FVi
z6x8>RK6^Sid~$e%&*>|(Vy>^Y1SNL&?p=zt`PvgFJ8lo2D7@(WmnWz1haY-<`TB=L
z*R^kM+}_c+-0ac2;^@o!3g0G7SGzhPZ@H3^`kD<pTFTSXKAu@3`s9h|rS-nGb+vWT
zR?Dt)mSrj_Ix?yWC3SgwN&fy@HSf>;qHE8eT{d2<cRu!dubl2Hw%sNZCoEzR<`i7I
zwD0`0{3o6I(>G?lma|%Z{ozGz>!N3xD`%AlEMXE9PdH~;E6L(fYFi(5bxv{3&J5%J
z`kg(hvp;2A*XRs1FL}O)kN0bS=o1bltpkr9KfbvwSNiL#tCz(Oa~7T3n0wpo(c{v<
zHy?}68J7MGlbgL^iu~sCNfV<cFJJfa)KOXKY(A%nUL7kKy#4*vt*vLznKLJ0dXVms
z<Hsk@n<w|i=+LD#rni4S7x$jIv&uU2B<G*Ur~G(cO<R^Z*QL+Vg*C#*heuLU@}Qox
z(v3ZDV&rCT=vhDgX@I?EU%S5T)PuIOg~Zop?{Mi0bzz<1u|endoa4#D(>@(NbXG<E
z*oOnGZ+CqBBBpXgYlll;xChIOnY=9XSQa%*pHtjFEjo_<2mb}0_0J}r+Zn!UPr$_F
zEorai=FQmA(_eqb;p~kJw>h_G&7VKhF=$U7pJvgbCb@((F;*MyIqWISo6o!vett)3
z|J8R)VwTVK3^)He5M*3^*>bx+hibRX)n9jN=KZ^0bZ_=#U!N(4Yx2GG-rw$;GHc^O
zJ>Mm_II0>LZ5u_;?F?l|`^Hxw`9MB_&%-GHMS^aEbwJG3)-D-ezc|J7eo+Ubjju5l
zIKO{($8v!v?<A9`V3i9_iU%$==<L6K(_wwlYa8YorW}Sz4f8FZd#zq(GjZ|hySw|v
z_r)E}zP~Op-cvKY)I0sh&b6l6dro+Ya508mWYvGVe!^c)191!K4Az>=wBWhLyHCA2
zkt1QivmkPFTI2eVC3E&PDY^MaANCFo-&h@QIK3?IP)G6Y2@|7?Z!GN$sa`0MaMK}p
z|Miy@y1Mn|%>7pRui8b^wn=5MpZOAh($btug7sd`7xlGCofS{hJM8y6JO6wC$81aX
z63IudtGqN=Zs;u7Iy05wb>qPUTc2KwWS_(AW4gJ`Avz&+YM5q|x$~dhn>STFTP>P%
zQhQ1M>|cLg?J+CKn<ew+l8chx1?DrB;W=sh8TK8JcC)`_x&6YKyzjd8j6aM&teScD
z`0JuQ=PkFJX1IF0{4&&@zWd&<d2eKYe#r@(zI^>lul3WuHpNc!IKoxcz-aN@j@?fG
z`#tWu^X3fC!%Jh8e)~r4YPJ6V*><Jp#yw_R)N7-&+bSj|aCb5YbEdvOd+yP{jh{2`
zTXcrEeOXc$6tlrwNKhm}sr~7k$2UE-B`gyq)3^FP{rP%#u(sd-R2Qe#f972w3zl5@
zctM@J^6~DiG53~o{@=06c;m%cnsF*qG!D3&($vsOJYroexxYYo``6r)wam9){)<sk
z^k7tbl>YplQeJJX+2(6`&-=y86JE^R^|x=zW0^O1`EG~*v<*AdXDSdb{c3B|E?s`R
zNwb}|JUd_`DUzUMCtdVe^3y4wYdLpM2RH97@_ep#P|vgJsO62#SGkuNId0|Jwzlce
z+&XP(74xr6S?|qG%wuh>o6Hi)yW;YeoE2AdU$Vv)6?a^;nR(osQLU+b|2paTc_-%`
zN{W-c)odKKlx??)<;^+GcW3`?I%&Tq?C`!l&99?)J@THh`Y&I7nk~?)xT8;d_x-)M
zweG!d`o3^M%#W*{?YkuFet+5eASlWqCn>a63N#QanE&k6+dH3b={!naRPlY=<(C&+
zE<1*vTE}}&*@|zG@SbTdB}_+D97=4ia5OsVFI_re`^O7mSN^$Qyx08tTF192m(pmb
z&6oMNO?tKMOH{zrw`?ZOvsT_)oO#}Py8NZTFRFEZv3%M-J=T0>=lZ^)wcDrgbgVA@
zGvC{EA;aVjv$}(BZTpR<f0@D(Cx2`57m>fmq8DBgy0J%KQ(8rTsd2*dUCQ~wqR+*%
zrv5aROA_iYl)gXz=T7$Xu5a@l-~Qih@jt=WG-=N?-@DT$T)ZyMvG1Dy+%$nu*7(lO
z(!K6g&laBkRQ}`YyYCTJeBYi-iQOKiyg%Tyg~Sd`NdbAu{VkdYRFd}E)$;P!ZJMyo
zcXH*=WpcZ2F4=#`=ES_W+^gU3dH#F%l`PYyw7m<y%ia@DD`XTAt#AxnY0teNL0lxi
zaZ%0vZ`J(kiWe<<#8<a)yVdRW)$68Sj}2FTb)>&=lgbi@D6S=?)+Lb#*A*Syc8mLs
zXna-d!hh>(B(35?O-<P+GWjU=757aPp7!a@lBsiU?_>0jzuen$L*QS~YObA;?1!~p
zTd&{x)QhpXZF$x6+F4(}?K(1PcJ<v9_2%M$n24PMHUf1&<H~RSD|X*HyQR!ScKwfA
z7nXE?*H~X*{wAXK!<^{J>q28=12hh(EE1VI<<sqrpDXkI%&vdQIW=G3y7$Ej0gLe9
zsa{=)pKDIcdda;;azpms?K;cUmXx<|u6w(6)1_*Mnz^f1pFQ(hsHc<tF87vCkFp#W
z_uW%&(m0@!^yY5(nYsCO=btRK?6KHxT0Z}>m66&L-5W1?-^Q6A&W=qz-?+&3-lkib
z7q(1aUwV~WYF?P>^F|jYhyOvUN;$V<Ph1F3H?05b_s?vF^7SukmX*IL<14x@$FsWB
zIN`L?flB9t((~A2*MB~=DpUXcFV%?#OBp6-<=@@5_l`vsn{>I@hxgJ(mg}7lCrlTy
zP<7o<I4{3sf&PZF{7=)4s#PlAwTgMw8d{}xM3r@W+(d?;2G6bA68`$N?J??pbSdcG
zuC3yCXJ6+n^K94B{mQ01MSe!X4*Tv;djr!WjT8UQX;%LJ%A~nxGvBs#QuCs0*^N7X
zXdGB_Yt}BC_S^SoI2R@9yytm)R+HE7!=dv{u^Te&-rSD;_~HGjo@t-?7yf-cMMSPz
zSM2HB4e#qNA1sd8YWj7mix}&S5O4W^6VB$}n|)l9H|yiA3-e6Y)XIE5EBfY(+sm~x
zxw7{)_S!dTTYfTg-}S(3<GS}rcUzk4kEzJ~cHMoE^WF;M|1Y~;lqN9wtP*`Lqwg1c
zG~Pbm>HV})$<k!Ct&fwnwio{6i?EixR>z#Z?BKG>ds_nnH%^$wnf`bF^;@1RUYi%U
z#B;bFpS$PvVwWcZTm~!6yu4-m|CAdp-XD3^b*|LsA6MsgcH14YT(I|c;@j=}4$R`3
zEyi$e_DRLP>|geZM}7G?@A!*FDiZ@1Gfd7}xM4?2eDBYR=bz<1d1j~k<FKnN-(JqA
z^VaU$@ax#`;?GR)|GucmZ|nTW@6c_mxOR75p`s9*NP^I}GEtGj+pmjf?8}nokGas7
zSQ}j>uJQg{<JQZ24n!IA7Kv3$A5p1lEdBO=;m?`(_7q#qR}m@`Nf5eb_Fn73vWv!%
z8&l2C$6jmUp8V`k{rrzk*{_50m(G}VPh+p2eXCfy<72&D&g(o(7cflTu(j%HQC#(J
z-?n$Nk01RSHu1;NtbE6uN#YT)>%Q({kuGmr;l=kvVB&^_43j@>G`@XZ)?#XtXz<As
z(TANKJY#YfNzG^6+g{apb;aaopM^Uae#Pr8JZl;8%hIQYW1AlH0*!5am${-htGvru
zx93ro)b_V4CDp;v<8=L7sKGnC2s_4C+uIxajq1K@-ub$p$<N#S;ZsFhkF`q=iYra@
zVpLnWTtj}@U+!hL4`W^aOy2*f>dvXjldpd`a^&fk{M!@K*S~c;Yw`E9XlKeVwh0$D
zmB{q$7B9N)czph$%KBvr3mN%q_e>~HOD#;@ULv=5ld|E&GGQ-4%N8adr^DZ_8vLt^
zFq3<=y?M4>bI;}(yKLI;*IKle-u_;6y&>$+uRq%+7J^i3vCd!#545ZKtm0F9NBULW
zKjjOr%eFn6{^^9Z{fCQpcvF^Kd$KmVy3lR)m4t9@B}ErTwS${W_N?DspgX5bb<Ted
zy_JUV&z^g>{;}BR<r`)^OrL*fF0-Gao!ep_*CjfvGeY*tW+&YFyCFwr$+lK$`^IU1
zBW7-%eShCyS>v$$<?h`g|EgTwqs*_!wzw`y;xbri<;ogY{&36jz0yYWzN^0|Wp8!)
z_~%Hfjd`Z(M?=$!k^uL0=W?oEr0h{rs&i60a3)9LgNgv_o+opvw=|XhV)kb+JP`Ig
zX1|tBpx>2EoN?t3`>qzeQg|N|KG!5|&8=hk_H)jknqwPtYbR&@jvdTjCzs?-?~sYT
zz<lP+qK5Rw&kZ>V(`ME_niKtGyPweq8G{R!+s~bmVp$qtS!R9h&=2;6m-UKUdGGu%
z-15f%-M!jBZ~s>Av9|7BRw`Wa^_kq4{MGxz1Xu1^z%Fq?IO5@)Xx4<Z_YBh+yZ>C<
zDJJoHPBi<2Ik$tJhMwA}snw7_zip-R!K?#2`5oWyE(kQNF)FvM|Cb|Z{Y|VedjGT@
zi{-qW8>N;gDjio7Vbb9}@u_+)?-#A@e$ooZ&Zsea9+-S?=k?XgY%J4Gs~_5NzarSN
zbcamcC-D`N&+W>s{(0Bk-k|hnn3cKjv#$$fUtU;JwqdpCL<7+a491)J8!jHOcpj6P
zYQFk`ZTP!VlMAvI>>douX5TD7w=?x=pFNKR+l4ieo0BzTnH0<CUXR`J#CSzH*PRcF
zTdZa;niLc_YtJP0|J!?BNSRjrxD>o|UwQE&6Axz>KZga;3Fn#3nf+(ptUj>%+)h>Z
zn`+V-ufAK!-Uv8o6+O4Oy1_QhjP(W26i$QZcQg`29MaO#ehN&PymZHf*Lrh|gw8ye
z!~XEgZUw78`D<?<G;aJHxk<Bs{+wGA+VyOw9xD}Uirv@|!pz8P@cfQT!lId18P_rH
zGuf>3!1aOsxt)u+%x1H0G26_OU~3@pe$Mp${f+5obfh|tzE1iRu8=+b@s=c|nmYZQ
zc+R)_t@HngPMW=G^@5Ix|6>nG-(R~lG00|d-ivcTmz!~wZB+{DW%(mBW9C)nb?kWz
zbqx1d&avb%{hA(sA6t9(pyl=(XO1y{ZV1}5@EbQ%>~5LnJ32oeZQt-ic*Sk5b^jUs
zEXAM8Jbs@4WTC(KCe`&5X8YwITwi}_TGTAdI2WcfbGT#tXV2_qy~UXSpj1BZOSIW-
z%juFEnq^(n(w5D(tu70d)hiNt-~96YfhqM>=Cj}Y&bD|wT|oAD+nt(!KRz<4>D_Z`
zKeqMf?FD_{rg@j^6Nwo&=dAj(&Q7rL-_{?J&+mkb>T*oycj-%b8Xi~vaNE-h?~){b
zn0w^8d9HkXHFI@k&Y_?=&G+MO^ewD4>bR!s@A5>2tE6G8`R4a?i+3`lO=F6AJf~Xk
z!10Nzwiw@jtrzpf@JcS{^}YOS&od_+{599cpv>;`_4iBaZ~yx9bJOLFD09OTtlb_e
z93>5RU(Km5`_KLS4xjOE(R?vpPV=Rz27e=G{4p<BYVhEDTzR68O*L2d&+F4qOZ+{X
z_3B#B<CodHiVBw>+Z8^&BV?undjzks@pJ2q&t|J>nH@MjVbz9O(V7bDl(P-n#19>C
zS6phz5U+dljJ#dciC=eW*1f#h^P7F!V!tGx3EW~6J%nE{{AQ9!PSbx7+f!q0V0Ym7
zgvlo@XMEPG`DndDkheLmrO%$#c-tGT2M_(lKi>Z-oq2bG*!#P6R<==Bc*~9|2`yxj
zP592Zow5AE*$sw_6`CLeRP%*vK6yvjF&h0k`1HKv+!8Nu+5EE+r|%!vU$|k%l=%7g
z+Y)P|1*O+IN+}81H13<QQzYN4?>Y0%_?1lD_ATe%eN=n6_rd%NkHuC5HmA=1T#@jm
z=GmIN2PN0O`Z!(NY7(e#ceSg7rAF__wFCDX_#FQH`#!f=m$_1gbHN|kdl!EEOkUt=
zE@8qI6wPc<TFG}fZoYGk53k(s%yhO=@5>6jf}E0#@0@B_D+KaqEoZFwtn^A+KV<D3
z7WuoJyUm^d-#-+&ze(f${3APlN=yDb$3N$iLg)3iZwnlQ{sfk(DFtn1sufZ`X!+fK
zkEGo-tLJh|=lDJtK5=<_`}Njc_jbrU$~vekyzqZ5`=RVJYjoaKy{@)euKxMlhI?H4
zf}Ea>d5xkoB6$;b=GPtm+K{(d+H2GE1MS-@H)np?Cw%Uw@)4Oivj3K@TwU>GfA`DV
z%k1=H?)M&vIGd=Uv{3WHeLv*}mjsIs>3i~y%x0?Lv6NGFz4xaz*v%;@dB;cLjGONd
zBt4e_4Tdb=A9c`GR{Hb$`K1>%oCP^E8MzJayPgiWeqP7?=9u+=)rAV_nmw{?($Afq
zXYc8rBs_^<M^CrZ=F3Z`xcU309kiYGX}Y%6tF*~VLZ6t#63*=uGJgHeUbvklGE?)+
zA9J4?jwGRnudXjVoSGV@sipb!-uLGpAM(H6xi;VX-Tno0-K4raA~;IKAMqbJzHhhT
z`<wrl73bwN^eekhp3N$MpL6wchuMt<Cxa(k*>FaS)m8P+qqXm6?x^72|I;)2-JAPf
z4^@>Cl`k-ciQjO$IkBBDpdnQB`Ge!-33vA1W7#v^jyE>Hq3Gb0@PH$_>(8b=oAvh3
z&rg?kEG+-5AgZHORKsK|+<vZ__42&6A8v9){LwVAmes45dzB`$>DD*f-x8lr`H1D-
zI4W%a`cP`@rB(aF1SblMyqIYbcQCtf>cctGQYRjJuukjy{>)J4MC<2&EX)5hWx2?1
zx^-;s&pRJJ`E1(uKJ`lPUCZ6Ehn>HxDhaVM-EI9b^Zw_G2V4ox4gHG$xIXWh?OXTX
z%EX2@?}vcY+^~nMvbVi^xNCaa2IKu5*W11=DL-8m8ndRu;{nSq?vKp>ucv)8GccTR
zT);ki|JQdnw;FSw`(yv2-rnVS=#E#9dUx-5_;ltJtK+w~e_NJZHCIb7%td8`-!~KP
zwT)@&KP4tE-yyKCie+Ezt=%V|oPE3?^8Mj;cIj{V^6FC6Odl_*eEfW`<x<DBS~_7a
zPo8jmvD{#DY990LmhyfB&MCg1_jXU(uG93+{P55IiqDdA$EKuO-uZS+M(S$k^WOR2
zRcuu^a&?OeT2?aMZJi-<;&12tOF}=MdCvF}?y-jZ`absDbM}wa=AXZR;_g1lr}6T)
zCjasjE!XerXj$yA{lGegeMRTqe%b5C_RIRY9oLgWrE}jx@9kW-M)JbLq8&ft<2qyy
z&WMb>V_znBch=GmpC-s%@$6VRE6UYnmB)hg?An6*3Py|PMIYbss~taVIpZ&vO}*L^
zokmCfgZ}ZhSrvOtN=3id8T4<Cy8is@{O=(ZogQ07UO38#vMzdeywIjBx5dBx@F&g-
zo9tu0$y~Ag#CrUkC1^Y@T`kkCQgG!zCRx4BXWtY)h}?5fW<Sd_mLC#VqwlHxc&0hS
z_EvT6LHmWrbpsxsa9kq!)K%pYi`9WT&OeM5*S}XWefZ5FzqsnwR>6IhOwabby1RSz
z<?{>f=P$@Ry*Mu_B<NKBz26i2pXFWX`J^Od$Yje^$X`&e@ICVF+nD#<>#i@@BC#um
zIsNadpo6Tb=~MQXCq%z{Q-A8@+He;Y7nUlKN7E1Z*EX9QY!-PS`}~eSQ{|j2MRV?D
zf4S=_4$n5-cY14F!O|@&zUY}O-qYc-$)Q|v**kuH22c%>E$|?@W&52{gRg}@9@^h~
zz3%$qncpjnvt*dhYUnFX)VshKmX&sPPVsAoGiz8y&-lqtEL+pKvj5<n?FX_PwoC7Q
z;FVW(X7{C@PfALS{2T5wUOw|C`~K^F2R1OsEAPpPf698j|9yk2<FkMl#*bDwKjJ@L
z@AmV0`?n?2)24_|<Pd$~DD(KNj<EigXH4?UKO1e_Zrs==w5+G4^1V|?kGaUc^LGPw
zpDcV|bg?b=jzyI5sqPMk2keD+nC|c{dCVG-pI}w+EpVGOhYhC-qrT;HIomT;whiw=
zgN66_W1cc@Dcva^^ZB?#h|HH=vcGuRm$<2Kxow%fz4){CW>8Rc_%GNk@Sd%T;lAZ_
zwi%Ju4<0J#CZq*ch}+GF4}dP>y7t@pgKI-JU(cMS22ba2c)+Z`qv}3qI#2r&VSD?f
zl22V-_(WeYXcwFlogtYf_IyrsQd(~RCSU)A*5W+ThM9YrW7u@Gw%^ll<p02ARFV_P
z6#S2o`<Rmt)0}_Y`a80&@}GETx_D2A$5AHPgq!;$U)VG4GubSAplxx^WVV!_@0njb
z-QP5GDP#D9Qr9-OhTJ%g`2WmewLBY5AD$76tGMdJdqeTw+^v1=$Ie{`MT02E7ll6U
z8h?4C&7Kaj34a33R%e`B{K@(Ke1><$=cdYJcBvRkx8+|+-khfX((S@*u>;rZ+mFt7
z$Pt?JwLY#uHnr_X^2YLb!}GpTCyghEU0Cm18@FShHRr}a#@qWlJW2~LrFE5`tF8UA
zm0|tSr}c&*R_)tv88w#IJe<lElaY4x>3id6bEH{&m`<EI!}I2Ax^(@Qs2Fd%<{h^#
ze2;rk>+aCJddHF}hMPB6COtCR_C(ZZMYL2u-z!j-anTas+HN%y-sIeIt)BIH%&~vZ
z)4pkah@5&?rT8#^T!HRinMbc2_Wxe^{q2MaLK~bdp8rUCnD+1EQK7J>Zx&X67MZtu
zo%BpyCh<NcrK`TM5!D0Iu@bC3W#@EFHs7v29nayF`1<*QC;Jb7(pRvPWc$Ncb(ig9
z<KAys-)6o2lY2+#*_ykKtACmP{LXvVa=)|lSv7s7A`wS^1BT~!o*#Jr^xkTN9dnAE
z{jv;i7AJhVpKx?~oc8NC_npt*R@hhOz`r@kTduz^`qYu5voj}%9KX+2`egat%bk5e
z<qJDJQd?XaTBoEw-h1u3CBM`8Xhl8E1-tL>S=~@yyR*k|^Jb5p-e=dJZ%=$NQ&Q#F
ztMyJUPa<AKZ{A~fc(3OCM@-h2kFIM{`uF#%SKPd9vnB-{_f6mOV0!xYWqD_BG|0KT
zs03*oIK^Giy?Vormj5-|`_lJCo$K4{3hJNjx7)9K_En}Cui!-Cg$&l7Uf#0v&)q(7
zg46rtt$F_QgI^W?Kk#i<L%55IgGhq<!7WdtD@*<)iLJTs`uo_{%GwO~b6Im&O>9+C
zVqC(&y`WXP?9+=Ksy?y%rfzw{^6%^Bb1~N}d!<Z8Vw98`moacRta)1vY6aWP+THl%
zh(uj|VD-B9cjx?&@cpl%RJ2LsfZu^W+us#wm$>fD*e7PZV{g3nyBGJpCco?I2w`Ns
zQF!8h_@Nj1VV@5@nfm5t_?ghVmv=tjV`j2$vcQ{5E-p%KOm8Garce2F@cYd_uTMYC
zxfOcA@~u?C`vYZLaz$<|{H~-_RKm5vtKi(n{YRsJ{QjY;bAQupJ>SWdMFrwjTi1w#
z4VlLDMq^+6_GWkc_(Nw*Z=dv7d-C)3(&Pu3y(TJgE-EKP652N!rJMhk*+1nYxB0{<
z?LPbXI;rMr6IHj#Z@W5LSXd)0qd##~6g?`sH*>0MO$qNi%k8||=S+1xYf&4bq_oiG
z{;8)nzprxLn>+Pr>E2l%Pj8M6w%63Vq1xHu!77sQ^v|O=*LYq|c67@+n=oBTNy&Wy
zgZA>epgB>oN=k_i%0ezKDmt16XiK)bG|ar|U>u#5rhVqkKdx!<>1m&9`t#4ODK>Z|
zA~^Aa;1>qt%^D9PA22OoF6f<Es<Hi6)`I!P>x4g~Cxl!L(^OJgsP=-9?F&no#q%)B
z=ieCLGfe-v{=uBz*DSXm{{G2YVQ*Kqh~Pv4VJ^mLY$-qYp8K}9+`^vy*xV~!E-orh
zT-kRs9MGybAG%}FO@=)T)}IYdw=*7Qm}QzRw&ItIiwaAt6Soem&s(Qz{F-GCOU$!5
zx5F;>%_&|yr+DVMoo9Z1eLa6llB<h~NsCj%S*EDjk!>@NGBr2){|PtPoOU4M0o(IC
zn-s2SC@Cqby@>5Nw=>E3H|qyh0i*(f;UC8p=6S}(4N1>q(l%s?2~K=q{9McCuE;kd
zW8=GTZf<UlZR_xeFx+hU@R9>ZtDcLX;Kbx*u*J`iCD22Z6cJ)fOJhEpvvTHIgU!FS
zBl6O|P09ahWBgjI$I8`3rG&-yz!@E`3b7pwFBoEy(_~MrEn~cJ>$?P-P5e^Vt`3hA
zoK>*tzH>Wk4_F^aeR^#tPsQEJeaw^2t|<%^*HThis0<r&d0YKH;<}*VL=GX@H%ttx
zAJ~@5yiQ0v{9%^_W7+JRmmaUt6unV3=XRL;FB`r~>4DSi`ZujQ{QRQL4c3q_4VDPA
z3s>HkT5Wh}aqS>zDz0=9>&%-u&tsl-zFWTQ!t=rjcHNu4R8CoXesNZ-llUX>RNRb6
z9RrCUOYT@fS7ox5Sv@xkD_y9hBxKcekE!^a=<J*N4f+il30sQu7S6o;F8UwS2g?G*
z4NNz<@5rpF0;MY!+XD=9iswIWo$|k0|A%e)f!NT9OPuA-Va5n&eyI#m{JhE0#YJUL
z%OOhxNCMG*o^d(KmCHCgD{b<boQ*SeO*Zdtjt$l@*sNjv``{Tn?lRqjX=x|ZzU`Z-
z`|+=}rR@z<*6x{iAOEi3bl}WAv&}yeu8VMrB-CkHt_@wH!B+QlPB#A+ws&0*&L6se
z_rRkBaY3bdEXS;$-(sBGdExxgGnX13IxH)GXR_yDMsss?Xi7lC)X<rkYn7Uc^A;Ds
ztG@r)W{>{zj(LBNoVnE4-7vi=)_cRu$lL|`AB-A`^X3=pnXhnV4L6yPkap2QNi=4;
zR^xI8ZSUZ)&;w_p7-AbG9raXi%wu@R>eU?Mu93m{gkk-UT_N#Cn`a%=(~_7|{JL@C
z0jmV%d!?&{o1m7j)LgC9IrA!$9fO<2^D@@m^AZd<cQ@*u+i7`lovMoq^WBE$bBkje
zZ5>?Z8Jleu*)wkz&jQYX%V*Z{=Y>vmWDE;ix@=9CNSau)cwD~K^J8qg=PA5qj>$^P
z{;+G>d9%&`S+*}(aEfiy+~VKSPv1XgjZ(1^k9a%hbm2Ks#^grhrkG$Cco58#y!W&B
z=((N8n`8YqSU#64IJeaLdDMfyyMLUr6yLZ%)%v*^V`SR3Yu~R~9$2I>O~mJQ!@aa=
zFMih-^9folSh}k9h>y&|M+KLoSa+^Tc*%T+;f(p_o%_Dmy`F9A%JN|Pf!X`wzl8}d
z4Blh;JZ;9!-v_=|EH1BiFfIz=JbOeDv_m7dLrF<!nn(gpQt`x@U)jg1Cn^Uwbar?|
z1T}QdVKCl(?@ZdPn=!_}x4*AT+<o?qq4Do~Xa1$9eXV_6X1MwNnVfkuYhTQE<~O!J
zdPZ&5&HjD4Q9sM#Prt8=&i|EGDIh4%I^#s4(dKUl&NtYd+o|WkSs)uA{NtYGb>1IR
z6&JRje0`wy+)lp(HT%EcXPH-euJqV!=lsR*|E@d0v8Vd-)+4iJU0rHSrcOEW(VG1Q
z-<eOQeL@Yo72BgLuWvtB->@+)jNPN`T<zQH|E3RYjlG#J%_){=vUtwLQ1g5C%Q>gN
z?VZQHg<;v;FY~=rd^8TY^v!2nZ~0tK<MXnc@~768FZp?^?}~23i|>0_{??0XI>&Y>
z9e-bcAT;e7!+|reW<?h7`5zws^V&|a8PDe2=6qwYd2`MC`wTU2cOQ@1HZ%6!ZTC4d
zRl}b0D+;aqB0cv+VbM8Vqs{l3h0m;E3t+j^T3&oS_-qc}2I2QMk_UVbaPMpQG=J}3
zwg>mqzNz20tBY#2Z}YfuDd&q4V_Mqoxy4(XV%t4RmxIc7PVcNna13z!xVRje#Dq>>
c`p^9MBKKy4J4!nk7#J8lUHx3vIVCg!0H2!%VE_OC

diff --git a/notebooks/spectral_classifier_big/accuracy_graph_v2.png b/notebooks/spectral_classifier_big/accuracy_graph_v2.png
deleted file mode 100644
index e081d540383484039d2517929a176e8d39428dfe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18689
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
X?PTaS)n!f$3=9mOu6{1-oD!M<#ITYa

diff --git a/notebooks/spectral_classifier_big/download_fits.ipynb b/notebooks/spectral_classifier_big/download_fits.ipynb
index 6489a78..4719a56 100644
--- a/notebooks/spectral_classifier_big/download_fits.ipynb
+++ b/notebooks/spectral_classifier_big/download_fits.ipynb
@@ -24,8 +24,8 @@
     "########## Input ##########\n",
     "\n",
     "targer_directory = 'F:\\data\\spectral_fits_big\\\\'\n",
-    "\n",
     "class_names = ['star','galaxy', 'QSO', 'AGN'] \n",
+    "samples_per_class = 11000\n",
     "\n",
     "## Queries für star, galaxy, quasar und AGN\n",
     "query1 = \"SELECT top 11000 plate, mjd, min(fiberid) as fiberid, class FROM SpecObj WHERE class = 'star' GROUP BY plate, mjd, class ORDER BY plate, mjd, class\"\n",
diff --git a/notebooks/spectral_classifier_big/loss_graph_v1.png b/notebooks/spectral_classifier_big/loss_graph_v1.png
deleted file mode 100644
index 0af9ab32631701553ce63952bc1faeacfa4a8968..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12306
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
W>7{jPp$Y>71B0ilpUXO@geCw4B#H_E

diff --git a/notebooks/spectral_classifier_big/loss_graph_v2.png b/notebooks/spectral_classifier_big/loss_graph_v2.png
deleted file mode 100644
index 34d1ef9218ae02b756df163da6b880ff6c39cc4b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16777
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
NgQu&X%Q~loCICf$x4-}Z

diff --git a/notebooks/spectral_classifier_big/spectral_classifier_from_npy.ipynb b/notebooks/spectral_classifier_big/spectral_classifier_from_npy.ipynb
index 4995e52..96242ec 100644
--- a/notebooks/spectral_classifier_big/spectral_classifier_from_npy.ipynb
+++ b/notebooks/spectral_classifier_big/spectral_classifier_from_npy.ipynb
@@ -289,55 +289,18 @@
     "split_index = int(len(data_shuffled)*0.9)\n",
     "\n",
     "# Daten\n",
-    "data_training = data_shuffled[:split_index]\n",
-    "data_test = data_shuffled[split_index:]\n",
+    "data_training = np.asarray(data_shuffled[:split_index])\n",
+    "data_test = np.asarray(data_shuffled[split_index:])\n",
     "\n",
     "# Labels\n",
-    "labels_training = labels_shuffled[:split_index]\n",
-    "labels_test = labels_shuffled[split_index:]\n",
+    "labels_training = np.asarray(labels_shuffled[:split_index])\n",
+    "labels_test = np.asarray(labels_shuffled[split_index:])\n",
     "\n",
     "# Galaxie numbers\n",
     "numbers_training = numbers_shuffled[:split_index]\n",
     "numbers_test = numbers_shuffled[split_index:]"
    ]
   },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 118,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "(3600, 3522)\n",
-      "(400, 3522)\n",
-      "(3600,)\n",
-      "(400,)\n"
-     ]
-    }
-   ],
-   "source": [
-    "data_training = np.asarray(data_training)\n",
-    "data_test = np.asarray(data_test)\n",
-    "\n",
-    "labels_training = np.asarray(labels_training)\n",
-    "labels_test = np.asarray(labels_test)\n",
-    "\n",
-    "print(data_training.shape)\n",
-    "print(data_test.shape)\n",
-    "\n",
-    "print(labels_training.shape)\n",
-    "print(labels_test.shape)"
-   ]
-  },
   {
    "cell_type": "markdown",
    "metadata": {},
diff --git a/scripts/create_modell.py b/scripts/create_modell.py
deleted file mode 100644
index f60e07c..0000000
--- a/scripts/create_modell.py
+++ /dev/null
@@ -1,6 +0,0 @@
-import tensorflow as tf
-import matplotlib.pyplot as plt
-import numpy as np
-
-print("test")
-
diff --git a/scripts/conv_network.py b/scripts/digit_recognizer/mnist_conv_example.py
similarity index 100%
rename from scripts/conv_network.py
rename to scripts/digit_recognizer/mnist_conv_example.py
diff --git a/scripts/run_example.py b/scripts/digit_recognizer/mnist_example.py
similarity index 100%
rename from scripts/run_example.py
rename to scripts/digit_recognizer/mnist_example.py
diff --git a/scripts/main.py b/scripts/main.py
deleted file mode 100644
index 79b97d8..0000000
--- a/scripts/main.py
+++ /dev/null
@@ -1,45 +0,0 @@
-### Importieren aller benötigten Module ###
-
-import tensorflow as tf
-import matplotlib.pyplot as plt
-import numpy as np
-
-#Für die bessere Lesbarkeit
-from tensorflow.keras.models import Sequential
-from tensorflow.keras.layers import Activation, Dense, Flatten, Conv2D, MaxPool2D
-from tensorflow.keras.metrics import Accuracy
-
-### Definition aller Funktionen ###
-
-
-def load_data_mnist(testdata=False):
-    """Lädt den MNIST Trainings- oder Testdatensatz.
-
-    Args:
-        testdata (boolean): Ob Testdaten geladen werden sollen.
-
-    Returns:
-        Numpy array: (samples,labels)
-            train_samples.shape == (60000,28,28)
-            train_labels.shape == (60000,)
-            test_samples.shape == (10000,28,28)
-            test_labels.shape == (10000,)
-    """
-    mnist = tf.keras.datasets.mnist
-    if testdata==ArithmeticErrorFalse:
-        (train_samples, train_labels) = mnist.load_data()[0]
-        print("MNIST Trainingsdatensatz geladen.")
-        return (train_samples, train_labels)
-    else:
-        (test_samples, test_labels) = mnist.load_data()[1] 
-        print("MNIST Testdatensatz geladen.")
-        return (test_samples, test_labels)   
-    
-def create_modell():
-    return
-
-def train_modell():
-    return
-
-def test_modell():
-    return
diff --git a/scripts/spectral_classifier/__pycache__/benchmark.cpython-38.pyc b/scripts/spectral_classifier/__pycache__/benchmark.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..e255fa1d8e386364b80479fd5eaf07f02703bffc
GIT binary patch
literal 1863
zcmWIL<>g{vU|`5P*`K(Pje+4Yh=Yt-85kHG7#J9eQy3T+QW#Pga~N_NqZk=MY^EHh
zT;?cdFq=7tC6_gd70hPIVasKYVrOJX5lvxF;b>uu;z$uo;ZEUcVT|HT5l`Vu;csD#
z;z|)n5o}?I;!crB5lRtmVT|HQ5ea6{lza)YUz70`b8%U&CgUw3pZxU9;*!kdpw#rD
z)Z*gI{5(y@TVg?pc`5n1Zuv#2#U;);iN(d4X_=`-nvA!&+!ITSi!&4R{G6WuS^4pj
zZ&HB$bC8h?43Q4WY!DWh<X~W6U}0cja0dC$ih+TlgdvMDg)xOGg}IlhmaT?u0aFb_
z4dX&4Mur-;1<W-}HOvc{YS~LzQdmk@YuK9^#Tl9z85wHWgBdhg{fa<F7qK%iFlaK}
zVoguX%}u<;=v>7b9Oi7LpvhLm#K6E1#T*>we2Y0Pv*Z?QadLi9>MhoSqRhOKTg=5J
zMVcJ9*el{oiV`#PZn0NF8Eh5tC8@<Fx7aGdbP>qSMVt%_47Zq*bJA|H6{QxJ=9H{t
zC=y{{VE7fAY!wq)oLW>I<CR~W5#y3toL!P%5EERIT9lWXSDsi@k{aWkT9jBE@0yvH
zR+^eoRGOC_Q=D9sSx{0OQ(TamTvC*n6Q2wZ&zPjtyyT4B#G-7yg34RGa9(_I88|45
z!KsIlkCBIwhf#pBNQ{Aj;pGcv28Nf_3=9llCE%cDU|;~b93I*h;Lt`1YeuB7W`c(`
za|%ld3uai0GcYg|NkGDyBR8=kKC>jX=oU{AI8nqGmn4>?R*7IH94iG))*@z*UXZ(s
zxIru)5Wx#Filc}R#O4PP0w6*VL`Z@NDG(t9B7{K%D6qjHUL*>N3K>MWVA=^X8X8QX
zKmrGoG$@!rIf`~6Bm;6MG=zBa;!}%DGIJA4@{5X#Kz^x`z@C4=0R)PrBH{x`7Gx91
z&?1}xq<{z@?Dm2J6g`mSKq(017FY@bWiSvQoL`N=DX5vDmZgSe0V3_NEP$mQ))M9v
z#uAnqR(L*T4Q9|}@~h%O6cAwVf{Hk--etp@9&mb61mQ`94WO8YdW;R0N#sEu1La|u
z$3SdQ!2$M|2iRkv%mB&+H6RbLF*1~Zy$BXzt6^^jiGT|yum}fKgc+u*nFUl32Qz3g
z`f0Khfih(g$RS0bAT0t}ugQtkZ=gI1E?tTcsU94?p!h*b@JIzgVor_{sQd(JWndHn
z!y*L+1_nP(CgdWq2r0`JArdDmLJdL%SYDGiioG~HCpEDs4^noDKzVvOnR%&+Me(`$
zDXBT&+#DqUlS<7iPR&iqNi71UlPF=Ba9(0&S!#SzVr6P^5jeWB1PR#D5I>^%mcu4D
aKczG$)s7M5QBcVM$;doRT<jpo!43dwFNoCu

literal 0
HcmV?d00001

diff --git a/scripts/spectral_classifier/__pycache__/plots.cpython-38.pyc b/scripts/spectral_classifier/__pycache__/plots.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..dfe132a6140c8544f8f4fd54daa9eec8e6caae44
GIT binary patch
literal 988
zcmWIL<>g{vU|`5S)}MHXiGkrUh=Yuo85kHG7#J9e4Hy_0QW#Pga~N_NqnH>$Y^HRk
zG{zL>6qXjoDCQK_6gDuQJ%yu%F^VOHF_=M<^CieEzjV!*{zG3iKG-LNi~|XQFo?~{
zz`)=PGQNs|fuV$90b>ng7E=nNB*Q{RMg*S;&Sy?xhRU#{FhW_ZDJ)PHTMbhRt0Y4W
zQwp0T!$KyI30dqZ>?s`SOevfxT)kkC1spXn(>WJ1fIJe+pvmobiz6{PxwI%TxiX5U
zEHNh@#;fAX%}+_qQGoGpv8EQ}CubBfGB7Z_1QEA5N{SLQ^D^_&Z*i3+=47TMmSpDV
z{o*PuC`c_*$Vp8rS;=^dIVV4PCD$$Hf}E0DECo6FCAZi!GK)*{iz;uimSmRXq~2ny
z%t=g2&AG)^0ijtcb24*pvE`(ur{<;HVlPfCOHIp6zr|9Vkzc-&`4&rFVs2^?F9QQZ
zkst#D!%BuCaRvs4Uy;dHF`>n&Ma3~*`NbJAE~&-YCHVz0!6m6hd8v8jiA5!;G2W>~
ziN*1*nR#iYsToD3dFe65$wiq3CB-qt1*yp;MTt4_$vKI|#hGcDsYNj$#}?}qRNmqR
zvEac1io9YWP&6_MFbXhofuRVa5F;03kt72HLpn%`f#JdamrM){41+n|S#t7=i*Ip&
z;vB@P;)29Ch+PEoB{-&wSU@2SO07j~AQn4_-~bVz>{BEPVu2z691BGf3=9mnIKkls
zGKLS7z;T3?ECU0BChIN1+{6-)`kc%py@E;*>lPb?F5(864GPjCkXncZXjXC9<mRW8
R=A_zz(ql2msXR;q+yJ%0?{5GA

literal 0
HcmV?d00001

diff --git a/scripts/spectral_classifier/__pycache__/rechnen.cpython-38.pyc b/scripts/spectral_classifier/__pycache__/rechnen.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d8107308ee62f4b2614a53c608948b3f9c089fdc
GIT binary patch
literal 402
zcmWIL<>g{vU|{e&+Mnphz`*br#6iYP3=9ko3=9m#A`A=+DGVu$Eeuf%DNHHMEeuhN
zDJ;PZnykqnH84FOHV8X|^l&gRFw`*AFp4t-GpuCvTgkAJ=@w(+EykoGkP<NQD>~UK
zCbT%Us5r(ezc?etCAB!aB)=dgxFoeGFEy_`v8W_9#yhnru{ho}GcT<)HKV9BFFmF>
zxhS)sq&TLyAT_z9C^08KIVZ8WI5RCXwJ4@2H8~?MHBYag@)k#8N=jyGQEDC|$T=WO
z85oP$85kG{yIF)Gn4t)y4eZP!W(EcZ2n%FN5gP*o!!5qt(wvgaf}G4MupKN&c7S~D
gr^y7is|dtF(u**F!zMRBr8Fni4rEU;NSuQi0IDod!~g&Q

literal 0
HcmV?d00001

diff --git a/scripts/spectral_classifier/benchmark.py b/scripts/spectral_classifier/benchmark.py
new file mode 100644
index 0000000..1dc005d
--- /dev/null
+++ b/scripts/spectral_classifier/benchmark.py
@@ -0,0 +1,38 @@
+from sklearn import svm
+from sklearn.linear_model import LogisticRegression
+from sklearn.ensemble import RandomForestClassifier
+from sklearn.naive_bayes import GaussianNB
+
+def benchmark_svc(x_train, y_train, x_test, y_test, gamma=0.001, C=100.):
+    clf = svm.SVC(gamma=0.001, C=100.)
+    clf.fit(x_train, y_train)
+    result = clf.score(x_test, y_test)
+    print("SVC: " + str(result))
+    return result
+    
+def benchmark_LogisticRegression(x_train, y_train, x_test, y_test, max_iter=1000, random_state=123):
+    clf = LogisticRegression(max_iter=1000, random_state=123)
+    clf.fit(x_train, y_train)
+    result = clf.score(x_test, y_test)
+    print("LogisticRegression: " + str(result))
+    return result
+    
+def benchmark_RandomForestClassifier(x_train, y_train, x_test, y_test, n_estimators=100, random_state=123):
+    clf = RandomForestClassifier(n_estimators=100, random_state=123)
+    clf.fit(x_train, y_train)
+    result = clf.score(x_test, y_test)
+    print("RandomForestClassifier: " + str(result))
+    return result
+
+def benchmark_GaussianNB(x_train, y_train, x_test, y_test):
+    clf = GaussianNB()
+    clf.fit(x_train, y_train)
+    result = clf.score(x_test, y_test)
+    print("GaussianNB: " + str(result))
+    return result
+
+def benchmark_all(x_train, y_train, x_test, y_test, gamma=0.001, C=100., max_iter=1000, random_state=123, n_estimators=100):
+    benchmark_svc(x_train, y_train, x_test, y_test, gamma, C)
+    benchmark_LogisticRegression(x_train, y_train, x_test, y_test, max_iter, random_state)
+    benchmark_RandomForestClassifier(x_train, y_train, x_test, y_test, n_estimators, random_state)
+    benchmark_GaussianNB(x_train, y_train, x_test, y_test)
\ No newline at end of file
diff --git a/scripts/download_sdss_fits.py b/scripts/spectral_classifier/download_fits_from_sdss.py
similarity index 55%
rename from scripts/download_sdss_fits.py
rename to scripts/spectral_classifier/download_fits_from_sdss.py
index 9dcaac0..8b7432d 100644
--- a/scripts/download_sdss_fits.py
+++ b/scripts/spectral_classifier/download_fits_from_sdss.py
@@ -13,13 +13,19 @@ from astropy.coordinates import ICRS
 import astropy.units as u
 import requests
 
+########## Input ##########
+
+targer_directory = 'F:\data\spectral_fits\\'
 class_names = ['star','galaxy', 'QSO', 'AGN'] 
+samples_per_class = 1000
+
 ## Queries für star, galaxy, quasar und AGN
+query1 = "SELECT top" + str(samples_per_class) + "plate, mjd, min(fiberid) as fiberid, class FROM SpecObj WHERE class = 'star' GROUP BY plate, mjd, class ORDER BY plate, mjd, class"
+query2 = "SELECT top " + str(samples_per_class) + " plate, mjd, min(fiberid) as fiberid, class FROM SpecObj WHERE class = 'galaxy' AND subClass != 'AGN' GROUP BY plate, mjd, class ORDER BY plate, mjd, class"
+query3 = "SELECT top " + str(samples_per_class) + " plate, mjd, min(fiberid) as fiberid, class FROM SpecObj WHERE class = 'QSO' AND subClass != 'AGN' GROUP BY plate, mjd, class ORDER BY plate, mjd, class"
+query4 = "SELECT top " + str(samples_per_class) + " plate, mjd, min(fiberid) as fiberid, class FROM SpecObj WHERE subClass = 'AGN' GROUP BY plate, mjd, class ORDER BY plate, mjd, class"
 
-query1 = "SELECT top 1000 plate, mjd, min(fiberid) as fiberid, class FROM SpecObj WHERE class = 'star' GROUP BY plate, mjd, class ORDER BY plate, mjd, class"
-query2 = "SELECT top 1000 plate, mjd, min(fiberid) as fiberid, class FROM SpecObj WHERE class = 'galaxy' AND subClass != 'AGN' GROUP BY plate, mjd, class ORDER BY plate, mjd, class"
-query3 = "SELECT top 1000 plate, mjd, min(fiberid) as fiberid, class FROM SpecObj WHERE class = 'QSO' AND subClass != 'AGN' GROUP BY plate, mjd, class ORDER BY plate, mjd, class"
-query4 = "SELECT top 1000 plate, mjd, min(fiberid) as fiberid, class FROM SpecObj WHERE subClass = 'AGN' GROUP BY plate, mjd, class ORDER BY plate, mjd, class"
+########## Program ##########
 
 queries = [query1, query2, query3, query4]
 
@@ -45,7 +51,7 @@ for i in range(4):
         url = sdss_path + name
         r = requests.get(url)
 
-        target_file = 'F:\data\spectral_fits\\' + class_names[i] + '\\' + name[5:]
+        target_file = targer_directory + class_names[i] + '\\' + name[5:]
 
         with open(target_file,'wb') as f:
 
diff --git a/scripts/spectral_classifier/fits_to_npy.py b/scripts/spectral_classifier/fits_to_npy.py
new file mode 100644
index 0000000..e91fc04
--- /dev/null
+++ b/scripts/spectral_classifier/fits_to_npy.py
@@ -0,0 +1,76 @@
+import numpy as np
+from astropy.io import fits
+import matplotlib.pyplot as plt
+from astropy.wcs import WCS
+import os
+import csv
+
+########## Input ##########
+
+fits_path = 'F:\\data\\spectral_fits\\'
+data_path = 'F:\\data\\'
+
+samples_per_class = 1000
+
+smallest_wavelength = 4000 # in Angström
+biggest_wavelength = 9000 
+
+########## Program ##########
+
+all_flux = []
+
+for directory in os.listdir(fits_path):
+    
+    count_failed=0
+    count_added=0
+    
+    for filename in os.listdir(fits_path + directory + '\\'):
+        
+        path = fits_path + '\\' + directory + '\\' + filename
+        
+        # fits-Dateien öffnen und wavelength + flux einlesen
+        hdul = fits.open(path)
+        data = hdul[1].data
+        flux = data['flux']
+        wavelength = 10**data['loglam']
+        hdul.close()
+        
+        # first und last Index finden
+        for i in range(len(wavelength)):
+            if wavelength[i]>smallest_wavelength:
+                first_index = i
+                break
+
+        for i in range(len(wavelength)):
+            if wavelength[i]>biggest_wavelength:
+                last_index = i
+                break
+
+        # wavenlength und flux Listen schneiden
+        wavelength = wavelength[first_index:last_index]
+        flux = flux[first_index:last_index]
+        
+        if len(wavelength) == 3522 and count_added < samples_per_class:
+            all_flux.append(flux) 
+            count_added += 1        
+
+        if len(wavelength) != 3522:
+            print("Länge der Liste wavelength ist: " + str(len(wavelength)))
+            count_failed += 1            
+            
+    print(str(count_failed/1000*100) + "% waren nicht erfolgreich bei der Klasse:" + directory)
+
+# Numpy Arrays mit Daten füllen
+data = np.array(all_flux)
+
+labels = np.zeros(shape=(4000,), dtype='int')
+for i in range(4):
+    for t in range(samples_per_class):
+        labels[i*1000+t] = i
+        
+wavelengths = np.array(wavelength)
+
+# Numpy arrays in .npy Dateien speichern
+np.save(data_path + "data.npy", data)
+np.save(data_path + "labels.npy", labels)
+np.save(data_path + "wavelengths.npy", wavelengths)
\ No newline at end of file
diff --git a/scripts/spectral_classifier/plots.py b/scripts/spectral_classifier/plots.py
new file mode 100644
index 0000000..3d3de0e
--- /dev/null
+++ b/scripts/spectral_classifier/plots.py
@@ -0,0 +1,23 @@
+import matplotlib.pyplot as plt
+
+def plot_accuracy(name, history, ylim=[0,1.01]):
+    plt.plot(history.history['accuracy'])
+    plt.plot(history.history['val_accuracy'])
+    plt.title('model accuracy')
+    plt.ylabel('accuracy')
+    plt.xlabel('epoch')
+    plt.ylim(ylim[0], ylim[1])
+    plt.legend(['training', 'validation'], loc='upper left')
+    plt.savefig(name)
+    plt.show()
+
+def plot_loss(name, history, ylim=[-0.5,2]):
+    plt.plot(history.history['loss'])
+    plt.plot(history.history['val_loss'])
+    plt.title('model loss')
+    plt.ylabel('loss')
+    plt.xlabel('epoch')
+    plt.ylim(ylim[0],ylim[1])
+    plt.legend(['training', 'validation'], loc='upper left')
+    plt.savefig(name)
+    plt.show()
\ No newline at end of file
diff --git a/scripts/spectral_classifier/spectral_classifier.py b/scripts/spectral_classifier/spectral_classifier.py
new file mode 100644
index 0000000..ca7d348
--- /dev/null
+++ b/scripts/spectral_classifier/spectral_classifier.py
@@ -0,0 +1,89 @@
+import matplotlib.pyplot as plt
+from astropy.io import fits
+import numpy as np
+import os
+import csv
+import tensorflow as tf
+import random
+
+from tensorflow.keras.models import Sequential
+from tensorflow.keras.layers import Activation, Dense, Flatten, Conv1D, MaxPooling1D, Dropout, InputLayer, GlobalAveragePooling1D
+from tensorflow.keras.metrics import Accuracy
+
+from tensorflow import keras
+from tensorflow.keras import layers
+
+import plots
+import benchmark
+
+########## Input ##########
+
+data_path = 'F:\\data\\'
+samples_per_class = 1000
+
+########## Program ##########
+
+# Listen mit den flux Werten, Labels und Wellenlängen erstellen
+data = np.load(data_path + "data.npy")
+labels = np.load(data_path + "labels.npy")
+wavelengths = np.load(data_path + "wavelengths.npy")
+
+# Liste die Galaxie-Nummer speichert
+numbers = range(4*samples_per_class)
+
+# Datensatz mischen
+z = list(zip(data, labels, numbers))
+random.shuffle(z)
+data_shuffled, labels_shuffled, numbers_shuffled = zip(*z)
+
+split_index = int(len(data_shuffled)*0.9)
+
+# Trainings- und Testdatensatz erstellen
+data_training = np.asarray(data_shuffled[:split_index])
+data_test = np.asarray(data_shuffled[split_index:])
+
+labels_training = np.asarray(labels_shuffled[:split_index])
+labels_test = np.asarray(labels_shuffled[split_index:])
+
+numbers_training = numbers_shuffled[:split_index]
+numbers_test = numbers_shuffled[split_index:]
+
+# Daten in Form für Convolutional Network bringen
+input_shape = (3522,1)
+data_training_r = np.reshape(data_training, newshape=(len(data_training), input_shape[0], input_shape[1]))
+data_test_r  = np.reshape(data_test, newshape=(len(data_test), input_shape[0], input_shape[1]))
+
+# Netzwerk erstellen
+model = Sequential([
+    Conv1D(filters=64, kernel_size=80, strides=10, activation='relu', input_shape=(3522,1)), # stride
+    MaxPooling1D(3), #Pooling verringert Accuracy leicht aber verhindert overfitting
+    Dropout(0.35),
+    Conv1D(filters=128, kernel_size=40, strides=10, activation='relu'),
+    MaxPooling1D(3),
+    Dropout(0.35),
+    Flatten(),
+    Dense(units=128, activation='relu'), # Droput, weniger neuronen
+    Dropout(0.35),
+    Dense(units=4, activation='softmax')
+])
+
+model.compile(optimizer='Adam', loss='sparse_categorical_crossentropy',
+              metrics=['accuracy'])
+
+x_train = data_training_r
+x_test = data_test_r
+
+y_train = labels_training
+y_test = labels_test
+
+history = model.fit(x_train, y_train,
+                    epochs=75, validation_split=0.1,
+                    shuffle=True, batch_size=200,
+                    verbose=1)
+
+# Auswertung
+plots.plot_accuracy("accuracy_graph_v2.png", history)
+plots.plot_loss("loss_graph_v2.png", history)
+
+# Benchmark
+benchmark.benchmark_all(data_training, labels_training, data_test, labels_test)
\ No newline at end of file
diff --git a/scripts/test_modell.py b/scripts/test_modell.py
deleted file mode 100644
index e69de29..0000000
diff --git a/scripts/train_modell.py b/scripts/train_modell.py
deleted file mode 100644
index e69de29..0000000
-- 
GitLab