aboutsummaryrefslogtreecommitdiff
path: root/frontend/src/app
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/app')
-rw-r--r--frontend/src/app/_elements/folder/folder.component.html4
-rw-r--r--frontend/src/app/_elements/folder/folder.component.ts19
-rw-r--r--frontend/src/app/_elements/form-model/form-model.component.html12
-rw-r--r--frontend/src/app/_elements/form-model/form-model.component.ts55
4 files changed, 45 insertions, 45 deletions
diff --git a/frontend/src/app/_elements/folder/folder.component.html b/frontend/src/app/_elements/folder/folder.component.html
index 84946697..da04b219 100644
--- a/frontend/src/app/_elements/folder/folder.component.html
+++ b/frontend/src/app/_elements/folder/folder.component.html
@@ -3,7 +3,7 @@
<div id="new-file-tab" *ngIf="newFile" class="folder-tab p-1 rounded-top" [style]="'z-index:' + (selectedTab == TabType.NewFile ? 11 : 10) + ' ;'" [ngClass]="{'selected-tab' : selectedTab == TabType.NewFile, 'hover-tab' : hoverTab == TabType.NewFile}">
<mat-icon class="text-offwhite">add</mat-icon>
<a class="stretched-link tab-link" (click)="selectTab(TabType.NewFile)" (mouseenter)="hoverOverTab(TabType.NewFile)" (mouseleave)="hoverOverTab(TabType.None)">
- {{newFile.name}}
+ {{newTabTitles[type]}}
</a>
</div>
<!--<div class="folder-tab p-1 rounded-top" *ngFor="let file of filteredFiles; let i = index" [style]="'z-index:' + calcZIndex(i) + ' ;'" [ngClass]="{'selected-tab' : selectedFileIndex == i, 'hover-tab' : hoveringOverFileIndex == i}">
@@ -63,7 +63,7 @@
<mat-icon>zoom_out_map</mat-icon>
</button> -->
</div>
- <app-form-model [ngClass]="{'form-hidden': type != FolderType.Model}" [forExperiment]="forExperiment"></app-form-model>
+ <app-form-model [ngClass]="{'form-hidden': type != FolderType.Model}" [forExperiment]="forExperiment" [hideProblemType]="(forExperiment ? true : false)" [forProblemType]="(forExperiment ? forExperiment.type : ProblemType.Regression)"></app-form-model>
<app-form-dataset [ngClass]="{'form-hidden': type != FolderType.Dataset}" [forExperiment]="forExperiment"></app-form-dataset>
</div>
<div [ngClass]="{'form-hidden' : !listView}" class="list-view">
diff --git a/frontend/src/app/_elements/folder/folder.component.ts b/frontend/src/app/_elements/folder/folder.component.ts
index 2b6f9aa7..b09cb543 100644
--- a/frontend/src/app/_elements/folder/folder.component.ts
+++ b/frontend/src/app/_elements/folder/folder.component.ts
@@ -1,7 +1,7 @@
import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';
import Dataset from 'src/app/_data/Dataset';
import { FolderFile, FolderType } from 'src/app/_data/FolderFile';
-import Model from 'src/app/_data/Model';
+import Model, { ProblemType } from 'src/app/_data/Model';
import { DatasetsService } from 'src/app/_services/datasets.service';
import Shared from 'src/app/Shared';
import { ModelsService } from 'src/app/_services/models.service';
@@ -66,9 +66,9 @@ export class FolderComponent implements AfterViewInit {
}
displayFile() {
- if (this.type == FolderType.Dataset){
+ if (this.type == FolderType.Dataset) {
this.formDataset.dataset = <Dataset>this.fileToDisplay;
- this.formDataset.existingFlag=false;
+ this.formDataset.existingFlag = false;
}
else if (this.type == FolderType.Model)
this.formModel.newModel = <Model>this.fileToDisplay;
@@ -96,7 +96,7 @@ export class FolderComponent implements AfterViewInit {
this.newFileSelected = true;
this.listView = false;
this.displayFile();
- if (this.type == FolderType.Dataset){
+ if (this.type == FolderType.Dataset) {
this.formDataset.clear();
}
}
@@ -241,6 +241,7 @@ export class FolderComponent implements AfterViewInit {
});
break;
case FolderType.Model:
+ this.formModel.newModel.type = this.formModel.forProblemType;
this.modelsService.addModel(this.formModel.newModel).subscribe(model => {
this.newFile = undefined;
Shared.openDialog("Obaveštenje", "Uspešno ste dodali novu konfiguraciju neuronske mreže u kolekciju.");
@@ -307,9 +308,9 @@ export class FolderComponent implements AfterViewInit {
event.stopPropagation();
switch (this.type) {
case FolderType.Dataset:
- (<Dataset>file)._id="";
+ (<Dataset>file)._id = "";
(<Dataset>file).isPreProcess = true;
- (<Dataset>file).isPublic=false;
+ (<Dataset>file).isPublic = false;
this.datasetsService.stealDataset(<Dataset>file).subscribe((response) => {
this.filteredFiles.splice(this.filteredFiles.indexOf(file), 1);
this.refreshFiles(null);
@@ -342,6 +343,7 @@ export class FolderComponent implements AfterViewInit {
};
FolderType = FolderType;
+ ProblemType = ProblemType;
Privacy = Privacy;
TabType = TabType;
@@ -435,6 +437,11 @@ export class FolderComponent implements AfterViewInit {
this.formModel.updateGraph();
}
}
+
+ newTabTitles: { [tab: number]: string } = {
+ [FolderType.Dataset]: 'Novi izvor podataka',
+ [FolderType.Model]: 'Nova konfiguracija neuronske mreže',
+ };
}
export enum Privacy {
diff --git a/frontend/src/app/_elements/form-model/form-model.component.html b/frontend/src/app/_elements/form-model/form-model.component.html
index 97e38cf1..1b4eb834 100644
--- a/frontend/src/app/_elements/form-model/form-model.component.html
+++ b/frontend/src/app/_elements/form-model/form-model.component.html
@@ -11,12 +11,7 @@
<div class="ns-col">
<mat-form-field appearance="fill" class="mat-fix">
<mat-label>Tip problema</mat-label>
- <mat-select [(ngModel)]="newModel.type" (selectionChange)="filterLossFunction()" *ngIf="this.hideProblemType" disabled="true">
- <mat-option *ngFor="let option of Object.keys(ProblemType); let optionName of Object.values(ProblemType)" [value]="option">
- {{ optionName }}
- </mat-option>
- </mat-select>
- <mat-select [(ngModel)]="newModel.type" (selectionChange)="filterLossFunction()" *ngIf="!this.hideProblemType" disabled="false">
+ <mat-select [(ngModel)]="forProblemType" [disabled]="this.hideProblemType">
<mat-option *ngFor="let option of Object.keys(ProblemType); let optionName of Object.values(ProblemType)" [value]="option">
{{ optionName }}
</mat-option>
@@ -41,7 +36,7 @@
<mat-form-field appearance="fill" class="mat-fix">
<mat-label>Funkcija troška</mat-label>
<mat-select [(ngModel)]="newModel.lossFunction">
- <mat-option *ngFor="let option of Object.keys(lossFunction); let optionName of Object.values(lossFunction)" [value]="option">
+ <mat-option *ngFor="let option of Object.keys(lossFunctions[forProblemType]); let optionName of Object.values(lossFunctions[forProblemType])" [value]="option">
{{ optionName }}
</mat-option>
</mat-select>
@@ -118,8 +113,7 @@
<div class="col-sm-9">
<!-- {{forExperiment._columnsSelected}} -->
- <app-graph [model]="newModel" *ngIf="forExperiment._columnsSelected" [inputColumns]="getInputColumns()"></app-graph>
- <app-graph [model]="newModel" *ngIf="!forExperiment._columnsSelected" [inputColumns]="['Nisu odabrane ulazne kolone']"></app-graph>
+ <app-graph [model]="newModel" [inputColumns]="getInputColumns()"></app-graph>
</div>
</div>
</div>
diff --git a/frontend/src/app/_elements/form-model/form-model.component.ts b/frontend/src/app/_elements/form-model/form-model.component.ts
index c8822992..c9e2fc8e 100644
--- a/frontend/src/app/_elements/form-model/form-model.component.ts
+++ b/frontend/src/app/_elements/form-model/form-model.component.ts
@@ -15,13 +15,13 @@ export class FormModelComponent implements AfterViewInit {
@ViewChild(GraphComponent) graph!: GraphComponent;
@Input() forExperiment!: Experiment;
@Output() selectedModelChangeEvent = new EventEmitter<Model>();
- @Input() hideProblemType:boolean;
- @Input() forProblemType:ProblemType;
+ @Input() hideProblemType: boolean;
+ @Input() forProblemType: ProblemType;
testSetDistribution: number = 70;
- validationSize:number=15;
- constructor() {
- this.hideProblemType=false;
- this.forProblemType=ProblemType.BinaryClassification;
+ validationSize: number = 15;
+ constructor() {
+ this.hideProblemType = false;
+ this.forProblemType = ProblemType.BinaryClassification;
}
ngAfterViewInit(): void { }
@@ -59,10 +59,15 @@ export class FormModelComponent implements AfterViewInit {
term: string = "";
selectedMetrics = [];
- lossFunction: any = LossFunction;
+ lossFunctions: { [index: string]: LossFunction[] } = {
+ [ProblemType.Regression]: LossFunctionRegression,
+ [ProblemType.BinaryClassification]: LossFunctionBinaryClassification,
+ [ProblemType.MultiClassification]: LossFunctionMultiClassification
+ };
loadModel(model: Model) {
this.newModel = model;
+ this.forProblemType = model.type;
}
updateGraph() {
@@ -77,6 +82,7 @@ export class FormModelComponent implements AfterViewInit {
this.updateGraph();
}
}
+
addLayer() {
if (this.newModel.hiddenLayers < 128) {
this.newModel.layers.push(new Layer(this.newModel.layers.length, this.selectedActivation, this.selectedNumberOfNeurons, this.selectedRegularisation, this.selectedRegularisationRate));
@@ -84,8 +90,8 @@ export class FormModelComponent implements AfterViewInit {
this.newModel.hiddenLayers += 1;
this.updateGraph();
}
-
}
+
numSequence(n: number): Array<number> {
return Array(n);
}
@@ -96,12 +102,14 @@ export class FormModelComponent implements AfterViewInit {
this.updateGraph();
}
}
+
addNeuron(index: number) {
if (this.newModel.layers[index].neurons < 18) {
this.newModel.layers[index].neurons += 1;
this.updateGraph();
}
}
+
selectedActivation: ActivationFunction = ActivationFunction.Sigmoid;
selectedRegularisationRate: RegularisationRate = RegularisationRate.RR1;
selectedRegularisation: Regularisation = Regularisation.L1;
@@ -131,24 +139,15 @@ export class FormModelComponent implements AfterViewInit {
updateTestSet(event: MatSliderChange) {
this.testSetDistribution = event.value!;
}
- filterLossFunction() {
- if(this.newModel.type==ProblemType.Regression){
- this.lossFunction = LossFunctionRegression;
- this.newModel.lossFunction=LossFunction.MeanSquaredError;
- }
- else if(this.newModel.type==ProblemType.BinaryClassification){
- this.lossFunction= LossFunctionBinaryClassification;
- this.newModel.lossFunction=LossFunction.BinaryCrossEntropy;
- }
- else if(this.newModel.type==ProblemType.MultiClassification){
- this.lossFunction = LossFunctionMultiClassification;
- this.newModel.lossFunction=LossFunction.SparseCategoricalCrossEntropy;
- }
-
-}
-getInputColumns() {
- return this.forExperiment.inputColumns.filter(x => x != this.forExperiment.outputColumn);
+
+ getInputColumns() {
+ if (this.forExperiment)
+ return this.forExperiment.inputColumns.filter(x => x != this.forExperiment.outputColumn);
+ else
+ return ['Nisu odabrane ulazne kolone.']
+ }
+
+ updateValidation(event: MatSliderChange) {
+ this.validationSize = event.value!;
+ }
}
-updateValidation(event: MatSliderChange) {
- this.validationSize = event.value!;
-}}