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 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 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