From b25af94d6df8854129e99f77638e4013a9c57086 Mon Sep 17 00:00:00 2001 From: Danijel Anđelković Date: Wed, 20 Apr 2022 00:04:19 +0200 Subject: Povezao metric view komponentu, chart, sa signalR tako da se iscrtavaju metrike modela kako se trenira. Ispravio neke bug-ove. --- frontend/src/app/training/training.component.html | 5 ++-- frontend/src/app/training/training.component.ts | 35 +++++++++++++++-------- 2 files changed, 25 insertions(+), 15 deletions(-) (limited to 'frontend/src/app/training') diff --git a/frontend/src/app/training/training.component.html b/frontend/src/app/training/training.component.html index 2bee3b12..fa80089e 100644 --- a/frontend/src/app/training/training.component.html +++ b/frontend/src/app/training/training.component.html @@ -33,9 +33,8 @@

Rezultati treniranja

Rezultati treniranja:

-

- {{trainingResult}} -

+ {{trainingResult}} +
diff --git a/frontend/src/app/training/training.component.ts b/frontend/src/app/training/training.component.ts index 4c38f166..6b5405cb 100644 --- a/frontend/src/app/training/training.component.ts +++ b/frontend/src/app/training/training.component.ts @@ -3,6 +3,7 @@ import { ActivatedRoute } from '@angular/router'; import Shared from '../Shared'; import Experiment from '../_data/Experiment'; import Model, { ProblemType } from '../_data/Model'; +import { MetricViewComponent } from '../_elements/metric-view/metric-view.component'; import { ModelLoadComponent } from '../_elements/model-load/model-load.component'; import { AuthService } from '../_services/auth.service'; import { ExperimentsService } from '../_services/experiments.service'; @@ -17,6 +18,7 @@ import { SignalRService } from '../_services/signal-r.service'; export class TrainingComponent implements OnInit { @ViewChild(ModelLoadComponent) modelLoadComponent?: ModelLoadComponent; + @ViewChild(MetricViewComponent) metricViewComponent!: MetricViewComponent; myExperiments?: Experiment[]; selectedExperiment?: Experiment; @@ -24,16 +26,11 @@ export class TrainingComponent implements OnInit { trainingResult: any; + history: any[] = []; + term: string = ""; constructor(private modelsService: ModelsService, private route: ActivatedRoute, private experimentsService: ExperimentsService, private authService: AuthService, private signalRService: SignalRService) { - if (this.signalRService.hubConnection) { - this.signalRService.hubConnection.on("NotifyEpoch", (mName: string, mId: string, stat: string, totalEpochs: number, currentEpoch: number) => { - if (this.selectedModel?._id == mId) { - this.trainingResult = stat; - } - }); - } } ngOnInit(): void { @@ -45,17 +42,32 @@ export class TrainingComponent implements OnInit { this.authService.loggedInEvent.subscribe(_ => { this.fetchExperiments(experimentId); - this.signalRService.startConnection() + this.signalRService.startConnection(); }); + + console.log(this.signalRService.hubConnection); + if (this.signalRService.hubConnection) { + this.signalRService.hubConnection.on("NotifyEpoch", (mName: string, mId: string, stat: string, totalEpochs: number, currentEpoch: number) => { + console.log(this.selectedModel?._id, mId); + if (this.selectedModel?._id == mId) { + stat = stat.replace(/'/g, '"'); + this.trainingResult = JSON.parse(stat); + //console.log('JSON', this.trainingResult); + this.history.push(this.trainingResult); + this.metricViewComponent.update(this.history); + } + }); + } }); } fetchExperiments(andSelectWithId: string | null = '') { this.experimentsService.getMyExperiments().subscribe((experiments) => { - this.myExperiments = experiments; + this.myExperiments = experiments.reverse(); this.selectedExperiment = this.myExperiments.filter(x => x._id == andSelectWithId)[0]; - console.log("selektovan exp u training comp: ", this.selectedExperiment); + if (this.modelLoadComponent) + this.modelLoadComponent.newModel.type = this.selectedExperiment.type; }); } @@ -82,8 +94,7 @@ export class TrainingComponent implements OnInit { } this.modelsService.trainModel(this.selectedModel._id, this.selectedExperiment._id).subscribe((response: any) => { //console.log('Train model complete!', response); - Shared.openDialog("Obaveštenje", "Treniranje modela je uspešno završeno!"); - this.trainingResult = response; + Shared.openDialog("Obaveštenje", "Treniranje modela je počelo!"); }); } } -- cgit v1.2.3 From 61682b01751369307d7777f55be98d25d7fc10a9 Mon Sep 17 00:00:00 2001 From: TAMARA JERINIC Date: Wed, 20 Apr 2022 01:04:11 +0200 Subject: Onemogućeno brisanje izlazne kolone koja ima null vrednosti ukoliko korisnik zatraži brisanje svih kolona sa null vrednostima. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/microservice/api/controller.py | 15 +++++++------- backend/microservice/api/newmlservice.py | 24 ++++++++++++----------- frontend/src/app/training/training.component.html | 1 - 3 files changed, 21 insertions(+), 19 deletions(-) (limited to 'frontend/src/app/training') diff --git a/backend/microservice/api/controller.py b/backend/microservice/api/controller.py index 9b83b8e7..f870b2b1 100644 --- a/backend/microservice/api/controller.py +++ b/backend/microservice/api/controller.py @@ -53,7 +53,7 @@ class train_callback(tf.keras.callbacks.Callback): @app.route('/train', methods = ['POST']) def train(): - print("******************************TRAIN*************************************************") + #print("******************************TRAIN*************************************************") f = request.files.get("file") data = pd.read_csv(f) @@ -88,10 +88,11 @@ def train(): "h5FileId" : fileId, "metrics" : m } - print(predictor) + #print(predictor) + #print('\n') url = config.api_url + "/Predictor/add" r = requests.post(url, json=predictor).text - print(r) + #print(r) return r @app.route('/predict', methods = ['POST']) @@ -100,13 +101,13 @@ def predict(): model = tf.keras.models.load_model(h5) paramsExperiment = json.loads(request.form["experiment"]) paramsPredictor = json.loads(request.form["predictor"]) - print("********************************model loaded*******************************") + #print("********************************model loaded*******************************") result = newmlservice.predict(paramsExperiment, paramsPredictor, model) return result @app.route('/preprocess',methods=['POST']) def returnColumnsInfo(): - print("********************************PREPROCESS*******************************") + #print("********************************PREPROCESS*******************************") dataset = json.loads(request.form["dataset"]) file = request.files.get("file") data=pd.read_csv(file) @@ -126,8 +127,8 @@ def returnColumnsInfo(): dataset["colCount"] = preprocess["colCount"] dataset["rowCount"] = preprocess["rowCount"] dataset["isPreProcess"] = True - print(dataset) + #print(dataset) return jsonify(dataset) -print("App loaded.") +#print("App loaded.") app.run() \ No newline at end of file diff --git a/backend/microservice/api/newmlservice.py b/backend/microservice/api/newmlservice.py index 6cbda69c..6e65c876 100644 --- a/backend/microservice/api/newmlservice.py +++ b/backend/microservice/api/newmlservice.py @@ -129,7 +129,8 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): ###NULL null_value_options = paramsExperiment["nullValues"] null_values_replacers = paramsExperiment["nullValuesReplacers"] - + kategorijskekolone=data.select_dtypes(include=['object']).columns.copy() + #print(kategorijskekolone) if(null_value_options=='replace'): #print("replace null") # dict=null_values_replacers @@ -143,11 +144,18 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): val = np.int64(val) elif(data[col].dtype == 'float64'): val = np.float64(val) - #elif(data[col].dtype == 'object'): data[col]=data[col].fillna(val) elif(null_value_options=='delete_rows'): data=data.dropna() elif(null_value_options=='delete_columns'): + if(data[output_column].isnull().sum()>0): + if(output_column in kategorijskekolone): + replace=data[output_column].value_counts().index[0] + #print(replace) + else: + replace=data[output_column].mean() + data[output_column]=data[output_column].fillna(replace) + #print(data[output_column].isnull().sum()) data=data.dropna(axis=1) #print(data.shape) @@ -175,7 +183,8 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): encodings=paramsExperiment["encodings"] datafront=dataset.copy() svekolone=datafront.columns - kategorijskekolone=datafront.select_dtypes(include=['object']).columns + + for kolonaEncoding in encodings: kolona = kolonaEncoding["columnName"] @@ -237,13 +246,6 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): #print(x_columns) x = data[x_columns].values y = data[output_column].values - print('-----------------dfghfhgfhfg-------------------------------') - print(x) - print('-----------------dfghfhgfhfg-------------------------------') - print(y) - print('-----------------dfghfhgfhfg-------------------------------') - print(output_column) - print('-----------------dfghfhgfhfg-------------------------------') # # Podela na test i trening skupove @@ -360,7 +362,7 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][i+1]))#i-ti skriveni sloj classifier.add(tf.keras.layers.Dense(units=1, activation=paramsModel['outputLayerActivationFunction']))#izlazni sloj - classifier.compile(loss =paramsModel["lossFunction"] , optimizer = paramsModel['optimizer'] , metrics =['accuracy','mae','mse']) + classifier.compile(loss =paramsModel["lossFunction"] , optimizer = paramsModel['optimizer'] , metrics =['accuracy']) history=classifier.fit(x_train, y_train, epochs = paramsModel['epochs'],batch_size=paramsModel['batchSize'],callbacks=callback(x_test, y_test,paramsModel['_id'])) hist=history.history diff --git a/frontend/src/app/training/training.component.html b/frontend/src/app/training/training.component.html index fa80089e..66f77c37 100644 --- a/frontend/src/app/training/training.component.html +++ b/frontend/src/app/training/training.component.html @@ -33,7 +33,6 @@

Rezultati treniranja

Rezultati treniranja:

- {{trainingResult}}
-- cgit v1.2.3