"""Pandas knihovna slouží pro analýzu dat, které lze reprezentovat 2D tabulkou. Tento „tvar” dat najdeme v SQL databázích, souborech CSV nebo tabulkových procesorech.""" import pandas as pd # NumPy je knihovna programovacího jazyka Python, která poskytuje infrastrukturu pro práci s vektory, maticemi a obecně vícerozměrnými poli. import numpy as np # Time je modul pro práci s časovými funkcemi. import time # MinMaxScaler je funkce jež slouží k transformaci hodnot do rozmezí 0 až 1. from sklearn.preprocessing import MinMaxScaler # Keras je softwarová knihovna, jež poskytuje rozhraní v jazyce Python pro techniky neuronových sítí. import keras # Sequential - sekvenční model from keras.models import Sequential # Dense - plně propojená vrstva Neuronové sítě from keras.layers import Dense # ModelCheckpoint je funkce sloužící k uložení modelu neuronové sítě či jejích vah v určité fázi učícího procesu za určité podmínky. from keras.callbacks import ModelCheckpoint # Argparse je modul sloužící k vytváření rozhraní pro příkazovou řádku. import argparse # OS je modul pro interakci s operačním systémem. import os # SYS je modul pro interakci s prostředím Python. import sys # - definování způsobu, jak předat argument z příkazového řádku do programu parser = argparse.ArgumentParser() parser.add_argument("--train_data",help = "absolutní cesta datového souboru s trénovacími daty ",required=True) args=vars(parser.parse_args()) # - načtení trénovacích dat neuronové sítě ze souboru ve formátu XLS train_data = pd.read_excel(args["train_data"],sheet_name = "") # - definování proměnných, vstupních dat(vstupních proměnných) a výstupních dat(výstupní proměnné) vstupni_data = train_data[train_data.columns[3:]] vystupni_data = train_data[train_data.columns[2]] # - vytvoření datových matic vstupních a výstupních proměnných. matice_vstupnich_dat=np.mat(vstupni_data) matice_vystupnich_dat=np.mat(vystupni_data) # - použití funkce MinMaxScaler k namapování hodnot vstupních a výstupních proměnných na interval <0,1> prepro_x = MinMaxScaler() prepro_y = MinMaxScaler() prepro_x.fit(matice_vstupnich_dat) prepro_y.fit(matice_vystupnich_dat) min_max_vstupnich_promennych=prepro_x.transform(matice_vstupnich_dat) # - zapnutí měření doby trvání učení Neuronové sítě zacatek=time.time() """Topologie třívrstvé neuronové sítě se skládá ze vstupní vrstvy, jedné skryté vrstvy a jedné výstupní vrstvy. Vstupní vrstva má počet neuronů roven počtu vstupních proměných + bias. Skrytá vrstva má 18 neuronů a druhá skrytá vrstva má 1 neuron. Neurony ve skryté a výstupní vrtsvě obsahují aktivační funkci ReLU. Učící proces se skládá z n epoch. Hodnota učícího koeficentu je 0.01. Chyba sítě je měřena pomocí Střední kvadratické chyby.""" epochy= seed = 7 np.random.seed(seed) model = Sequential() model.add(Dense(18, input_dim=min_max_vstupnich_promennych.shape[1], kernel_initializer='normal', activation='relu')) model.add(Dense(1, kernel_initializer='normal',activation='relu')) # Definování absolutní cesty souboru ve formátu HDF, do něhož se ukládají naučené váhy neuronové sítě, které vygenerovaly nejmenší chybu sítě. filepath = "C:\\Users\\korec\\PycharmProjects\\Diplomka\\Neuronova_sit_vystup\\{}_model.h5".format(os.path.split(args["train_data"])[-1][0:-4]) checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=1, save_best_only=True, mode='min') callbacks_list = [checkpoint] """Sestavení třívrstvé neuronové sítě, jejíž chyba je měřena pomocí střední kvadratické chyby. K učení sítě je využíván optimalizační algoritmus Adam s koeficientem učení 0.01.""" model.compile(loss='mean_squared_error',optimizer=keras.optimizers.Adam(lr=0.01)) # - učící proces neuronové sítě history=model.fit(min_max_vstupnich_promennych, matice_vystupnich_dat.reshape(-1,1), epochs=epochy, batch_size=50, callbacks=callbacks_list) # - uložení výstůpů programu Neuronové sítě do souboru ve formátu TXT file = open('C:\\Users\\korec\\PycharmProjects\\Diplomka\\Neuronova_sit_vystup\\vystup_{}.txt'.format(os.path.split(args["train_data"])[-1][0:-4]),mode="w+") sys.stdout = file # - shrnutí informací o sestaveném modelu print(model.summary()) # - ukončení měření doby trvání učení Neuronové sítě konec=time.time() print("Doba učení neuronové sítě je ", konec-zacatek ,"sekund") # - vygenerování vývoje Střední kvadratické chyby v průběhu učícího procesu neuronové sítě MSE=pd.DataFrame(history.history['loss']) MSE.columns = ["Stredni kvadraticka chyba"] MSE["Epocha"] = MSE.index.to_list() print(MSE) # - vygenerování nejnižší dosaženné střední kvadratické chyby print("Střední kvadratická chyba = {}".format(MSE["Stredni kvadraticka chyba"].min())) # - uzavření souboru, do kterého byly zapisovány výstupy Neuronové sítě file.close()