From a5365ef62bc89130b4240e124b3a361edfb34391 Mon Sep 17 00:00:00 2001 From: Danijel Anđelković Date: Wed, 4 May 2022 21:06:06 +0200 Subject: Dodao dugmad za brisanje kada korisnik pregleda liste ssvojih podataka, ispravio neke bagove oko grafa kada nema ulaznih kolona. Dodao kor. matricu u dataset. --- frontend/src/app/_pages/experiment/experiment.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'frontend/src/app/_pages/experiment/experiment.component.html') diff --git a/frontend/src/app/_pages/experiment/experiment.component.html b/frontend/src/app/_pages/experiment/experiment.component.html index baae864e..83c45405 100644 --- a/frontend/src/app/_pages/experiment/experiment.component.html +++ b/frontend/src/app/_pages/experiment/experiment.component.html @@ -32,7 +32,7 @@
- +
-- cgit v1.2.3 From 75f0fca5f9e7e74979f63d73741512ea2e58e9e6 Mon Sep 17 00:00:00 2001 From: Danijel Anđelković Date: Wed, 4 May 2022 22:33:10 +0200 Subject: Promenio nazive ulaza na ML u za treniranje modela. --- backend/microservice/api/newmlservice.py | 47 +++++++++++++--------- .../column-table/column-table.component.ts | 2 +- .../src/app/_elements/folder/folder.component.ts | 5 ++- .../_pages/experiment/experiment.component.html | 4 +- .../app/_pages/experiment/experiment.component.ts | 36 +++++++++++++++-- 5 files changed, 65 insertions(+), 29 deletions(-) (limited to 'frontend/src/app/_pages/experiment/experiment.component.html') diff --git a/backend/microservice/api/newmlservice.py b/backend/microservice/api/newmlservice.py index ad848fd9..d84d9567 100644 --- a/backend/microservice/api/newmlservice.py +++ b/backend/microservice/api/newmlservice.py @@ -282,8 +282,8 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): # # Podela na test i trening skupove # - test=paramsExperiment["randomTestSetDistribution"] - randomOrder = paramsExperiment["randomOrder"] + test=paramsModel["randomTestSetDistribution"] + randomOrder = paramsModel["randomOrder"] if(randomOrder): random=123 else: @@ -329,8 +329,8 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): if(problem_type=='multi-klasifikacioni'): #print('multi') - reg=paramsModel['regularisation'][0] - regRate=float(paramsModel['regularisationRate'][0]) + reg=paramsModel['layers'][0]['regularisation'] + regRate=float(paramsModel['layers'][0]['regularisationRate']) if(reg=='l1'): kernelreg=tf.keras.regularizers.l1(regRate) biasreg=tf.keras.regularizers.l1(regRate) @@ -341,12 +341,12 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): activityreg=tf.keras.regularizers.l2(regRate) classifier=tf.keras.Sequential() - classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][0],input_dim=x_train.shape[1], kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#prvi skriveni + definisanje prethodnog-ulaznog + classifier.add(tf.keras.layers.Dense(units=paramsModel['layers'][0]['neurons'], activation=paramsModel['layers'][0]['activationFunction'],input_dim=x_train.shape[1], kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#prvi skriveni + definisanje prethodnog-ulaznog for i in range(paramsModel['hiddenLayers']-1):#ako postoji vise od jednog skrivenog sloja ###Kernel - reg=paramsModel['regularisation'][i+1] - regRate=float(paramsModel['regularisationRate'][i+1]) + reg=paramsModel['layers'][i+1]['regularisation'] + regRate=float(paramsModel['layers'][i+1]['regularisationRate']) if(reg=='l1'): kernelreg=tf.keras.regularizers.l1(regRate) biasreg=tf.keras.regularizers.l1(regRate) @@ -356,7 +356,7 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): biasreg=tf.keras.regularizers.l2(regRate) activityreg=tf.keras.regularizers.l2(regRate) - classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][i+1],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#i-ti skriveni sloj + classifier.add(tf.keras.layers.Dense(units=paramsModel['layers'][i+1]['neurons'], activation=paramsModel['layers'][i+1]['activationFunction'],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#i-ti skriveni sloj classifier.add(tf.keras.layers.Dense(units=5, activation=paramsModel['outputLayerActivationFunction']))#izlazni sloj @@ -386,8 +386,8 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): elif(problem_type=='binarni-klasifikacioni'): #print('*************************************************************************binarni') - reg=paramsModel['regularisation'][0] - regRate=float(paramsModel['regularisationRate'][0]) + reg=paramsModel['layers'][0]['regularisation'] + regRate=float(paramsModel['layers'][0]['regularisationRate']) if(reg=='l1'): kernelreg=tf.keras.regularizers.l1(regRate) biasreg=tf.keras.regularizers.l1(regRate) @@ -398,12 +398,12 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): activityreg=tf.keras.regularizers.l2(regRate) classifier=tf.keras.Sequential() - classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][0],input_dim=x_train.shape[1],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#prvi skriveni + definisanje prethodnog-ulaznog + classifier.add(tf.keras.layers.Dense(units=paramsModel['layers'][0]['neurons'], activation=paramsModel['layers'][0]['activationFunction'],input_dim=x_train.shape[1],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#prvi skriveni + definisanje prethodnog-ulaznog for i in range(paramsModel['hiddenLayers']-1):#ako postoji vise od jednog skrivenog sloja #print(i) - reg=paramsModel['regularisation'][i+1] - regRate=float(paramsModel['regularisationRate'][i+1]) + reg=paramsModel['layers'][i+1]['regularisation'] + regRate=float(paramsModel['layers'][0]['regularisationRate']) if(reg=='l1'): kernelreg=tf.keras.regularizers.l1(regRate) biasreg=tf.keras.regularizers.l1(regRate) @@ -412,12 +412,19 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): kernelreg=tf.keras.regularizers.l2(regRate) biasreg=tf.keras.regularizers.l2(regRate) activityreg=tf.keras.regularizers.l2(regRate) - classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][i+1],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#i-ti skriveni sloj + classifier.add(tf.keras.layers.Dense(units=paramsModel['layers'][i+1]['neurons'], activation=paramsModel['layers'][i+1]['activationFunction'],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#i-ti skriveni sloj classifier.add(tf.keras.layers.Dense(units=1, activation=paramsModel['outputLayerActivationFunction']))#izlazni sloj classifier.compile(loss =paramsModel["lossFunction"] , optimizer = opt , metrics =paramsModel['metrics']) + print('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA') + print(x_train) + print('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA') + print(y_train) + print('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA') + + history=classifier.fit(x_train, y_train, epochs = paramsModel['epochs'],batch_size=float(paramsModel['batchSize']),callbacks=callback(x_test, y_test,paramsModel['_id'])) hist=history.history y_pred=classifier.predict(x_test) @@ -434,8 +441,8 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): return filepath,hist elif(problem_type=='regresioni'): - reg=paramsModel['regularisation'][0] - regRate=float(paramsModel['regularisationRate'][0]) + reg=paramsModel['layers'][0]['regularisation'] + regRate=float(paramsModel['layers'][0]['regularisationRate']) if(reg=='l1'): kernelreg=tf.keras.regularizers.l1(regRate) biasreg=tf.keras.regularizers.l1(regRate) @@ -446,12 +453,12 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): activityreg=tf.keras.regularizers.l2(regRate) classifier=tf.keras.Sequential() - classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][0],input_dim=x_train.shape[1],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#prvi skriveni + definisanje prethodnog-ulaznog + classifier.add(tf.keras.layers.Dense(units=paramsModel['layers'][0]['neurons'], activation=paramsModel['layers'][0]['activationFunction'],input_dim=x_train.shape[1],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#prvi skriveni + definisanje prethodnog-ulaznog for i in range(paramsModel['hiddenLayers']-1):#ako postoji vise od jednog skrivenog sloja #print(i) - reg=paramsModel['regularisation'][i+1] - regRate=float(paramsModel['regularisationRate'][i+1]) + reg=paramsModel['layers'][i+1]['regularisation'] + regRate=float(paramsModel['layers'][i+1]['regularisationRate']) if(reg=='l1'): kernelreg=tf.keras.regularizers.l1(regRate) biasreg=tf.keras.regularizers.l1(regRate) @@ -461,7 +468,7 @@ def train(dataset, paramsModel,paramsExperiment,paramsDataset,callback): biasreg=tf.keras.regularizers.l2(regRate) activityreg=tf.keras.regularizers.l2(regRate) - classifier.add(tf.keras.layers.Dense(units=paramsModel['hiddenLayerNeurons'], activation=paramsModel['hiddenLayerActivationFunctions'][i+1],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#i-ti skriveni sloj + classifier.add(tf.keras.layers.Dense(units=paramsModel['layers'][i+1]['neurons'], activation=paramsModel['layers'][i+1]['activationFunction'],kernel_regularizer=kernelreg, bias_regularizer=biasreg, activity_regularizer=activityreg))#i-ti skriveni sloj classifier.add(tf.keras.layers.Dense(units=1),activation=paramsModel['outputLayerActivationFunction']) diff --git a/frontend/src/app/_elements/column-table/column-table.component.ts b/frontend/src/app/_elements/column-table/column-table.component.ts index 13828a2c..b99a3be0 100644 --- a/frontend/src/app/_elements/column-table/column-table.component.ts +++ b/frontend/src/app/_elements/column-table/column-table.component.ts @@ -223,7 +223,7 @@ export class ColumnTableComponent implements AfterViewInit { this.experiment.name = selectedName; //napravi odvojene dugmice za save i update -> za update nece da se otvara dijalog za ime this.experimentService.addExperiment(this.experiment).subscribe((response) => { - this.experiment = response; + this.experiment._id = response._id; this.okPressed.emit(); }); }); diff --git a/frontend/src/app/_elements/folder/folder.component.ts b/frontend/src/app/_elements/folder/folder.component.ts index a99c6a9d..d5a7a85c 100644 --- a/frontend/src/app/_elements/folder/folder.component.ts +++ b/frontend/src/app/_elements/folder/folder.component.ts @@ -53,8 +53,9 @@ export class FolderComponent implements AfterViewInit { if (this.signalRService.hubConnection) { this.signalRService.hubConnection.on("NotifyDataset", (dName: string, dId: string) => { - this.refreshFiles(dId); - + if (this.type == FolderType.Dataset) { + this.refreshFiles(dId); + } }); } else { console.warn("Dataset-Load: No connection!"); diff --git a/frontend/src/app/_pages/experiment/experiment.component.html b/frontend/src/app/_pages/experiment/experiment.component.html index 83c45405..2b32db81 100644 --- a/frontend/src/app/_pages/experiment/experiment.component.html +++ b/frontend/src/app/_pages/experiment/experiment.component.html @@ -37,12 +37,12 @@
- +
- +
diff --git a/frontend/src/app/_pages/experiment/experiment.component.ts b/frontend/src/app/_pages/experiment/experiment.component.ts index 3c8d8651..c4d6063c 100644 --- a/frontend/src/app/_pages/experiment/experiment.component.ts +++ b/frontend/src/app/_pages/experiment/experiment.component.ts @@ -10,6 +10,8 @@ import { ModelsService } from 'src/app/_services/models.service'; import Model from 'src/app/_data/Model'; import Dataset from 'src/app/_data/Dataset'; import { ColumnTableComponent } from 'src/app/_elements/column-table/column-table.component'; +import { SignalRService } from 'src/app/_services/signal-r.service'; +import { MetricViewComponent } from 'src/app/_elements/metric-view/metric-view.component'; @Component({ selector: 'app-experiment', @@ -26,11 +28,11 @@ export class ExperimentComponent implements AfterViewInit { experiment: Experiment; dataset?: Dataset; @ViewChild("folderDataset") folderDataset!: FolderComponent; - @ViewChild("folderModel") folderModel!: FolderComponent; @ViewChild(ColumnTableComponent) columnTable!: ColumnTableComponent; + @ViewChild("folderModel") folderModel!: FolderComponent; + @ViewChild("metricView") metricView!: MetricViewComponent; - - constructor(private experimentsService: ExperimentsService, private modelsService: ModelsService) { + constructor(private experimentsService: ExperimentsService, private modelsService: ModelsService, private signalRService: SignalRService) { this.experiment = new Experiment("exp1"); } @@ -43,7 +45,11 @@ export class ExperimentComponent implements AfterViewInit { } trainModel() { - this.modelsService.trainModel((this.folderModel.selectedFile)._id, this.experiment._id).subscribe(() => { console.log("pocelo treniranje") }) + if (!this.modelToTrain) { + Shared.openDialog('Greška', 'Morate odabrati konfiguraciju neuronske mreže'); + } else { + this.modelsService.trainModel(this.modelToTrain._id, this.experiment._id).subscribe(() => { console.log("pocelo treniranje") }); + } } stepHeight = this.calcStepHeight(); @@ -65,8 +71,23 @@ export class ExperimentComponent implements AfterViewInit { this.stepsContainer.nativeElement.addEventListener('scroll', (event: Event) => { Shared.emitBGScrollEvent(this.stepsContainer.nativeElement.scrollTop); }); + + if (this.signalRService.hubConnection) { + this.signalRService.hubConnection.on("NotifyEpoch", (mName: string, mId: string, stat: string, totalEpochs: number, currentEpoch: number) => { + console.log(this.modelToTrain?._id, mId); + if (this.modelToTrain?._id == mId) { + stat = stat.replace(/'/g, '"'); + //console.log('JSON', this.trainingResult); + this.history.push(JSON.parse(stat)); + this.metricView.update(this.history); + } + }); + + } } + history: any[] = []; + updatePageIfScrolled() { if (this.scrolling) return; const currentPage = Math.round(this.stepsContainer.nativeElement.scrollTop / this.stepHeight) @@ -130,4 +151,11 @@ export class ExperimentComponent implements AfterViewInit { this.columnTable.loadDataset(this.dataset); } + + modelToTrain?: Model; + + setModel(model: FolderFile) { + const m = model; + this.modelToTrain = m; + } } -- cgit v1.2.3