aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanijel Anđelković <adanijel99@gmail.com>2022-05-04 22:33:10 +0200
committerDanijel Anđelković <adanijel99@gmail.com>2022-05-04 22:33:10 +0200
commit75f0fca5f9e7e74979f63d73741512ea2e58e9e6 (patch)
tree7bacdd630cefdd9d3d01ccd256e25fd62b4eb984
parent2841a9307387eca7f1bf58f52bd406251d6e6b29 (diff)
Promenio nazive ulaza na ML u za treniranje modela.
-rw-r--r--backend/microservice/api/newmlservice.py47
-rw-r--r--frontend/src/app/_elements/column-table/column-table.component.ts2
-rw-r--r--frontend/src/app/_elements/folder/folder.component.ts5
-rw-r--r--frontend/src/app/_pages/experiment/experiment.component.html4
-rw-r--r--frontend/src/app/_pages/experiment/experiment.component.ts36
5 files changed, 65 insertions, 29 deletions
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 @@
</div>
<div #steps id="step_3" class="step-content">
<div class="step-content-inside">
- <app-folder #folderModel [type]="FolderType.Model" [forExperiment]="experiment" [startingTab]="TabType.NewFile" [tabsToShow]="[TabType.MyModels]" (okPressed)="goToPage(3)"></app-folder>
+ <app-folder #folderModel [type]="FolderType.Model" [forExperiment]="experiment" [startingTab]="TabType.NewFile" [tabsToShow]="[TabType.MyModels]" (okPressed)="goToPage(3); trainModel();" (selectedFileChanged)="setModel($event)"></app-folder>
</div>
</div>
<div #steps id="step_4" class="step-content">
<div class="step-content-inside">
- <app-metric-view></app-metric-view>
+ <app-metric-view #metricView></app-metric-view>
</div>
</div>
</div>
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((<Model>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>model;
+ this.modelToTrain = m;
+ }
}