aboutsummaryrefslogtreecommitdiff
path: root/frontend/src
diff options
context:
space:
mode:
authorNevena Bojovic <nenabojov@gmail.com>2022-04-13 21:47:05 +0200
committerNevena Bojovic <nenabojov@gmail.com>2022-04-13 21:47:05 +0200
commitb36d7868a4d3acc1c6b0cbbb104ef7c530fe19d6 (patch)
treed0540df7e1d1c87c6e16efef5c148d697958609f /frontend/src
parent8568f5eadf09ff9536aa19054a129ab4aec49991 (diff)
parentd1276f066c75ce7b720ec7936d7018f98f5e7ea5 (diff)
Merge branch 'dev' of http://gitlab.pmf.kg.ac.rs/igrannonica/neuronstellar into dev
Diffstat (limited to 'frontend/src')
-rw-r--r--frontend/src/app/_elements/dataset-load/dataset-load.component.css5
-rw-r--r--frontend/src/app/_elements/dataset-load/dataset-load.component.html23
-rw-r--r--frontend/src/app/_elements/model-load/model-load.component.css4
-rw-r--r--frontend/src/app/_elements/model-load/model-load.component.html82
-rw-r--r--frontend/src/app/experiment/experiment.component.css4
-rw-r--r--frontend/src/app/experiment/experiment.component.html427
-rw-r--r--frontend/src/app/experiment/experiment.component.ts6
-rw-r--r--frontend/src/app/training/training.component.html70
-rw-r--r--frontend/src/app/training/training.component.ts4
9 files changed, 295 insertions, 330 deletions
diff --git a/frontend/src/app/_elements/dataset-load/dataset-load.component.css b/frontend/src/app/_elements/dataset-load/dataset-load.component.css
index 54e0738e..ff6e2750 100644
--- a/frontend/src/app/_elements/dataset-load/dataset-load.component.css
+++ b/frontend/src/app/_elements/dataset-load/dataset-load.component.css
@@ -1,11 +1,16 @@
.btnType1 {
background-color: #003459;
color: white;
+ padding-top: 2vh;
+ padding-bottom: 2vh;
}
.btnType2 {
background-color: white;
color: #003459;
border-color: #003459;
+ padding-top: 2vh;
+ padding-bottom: 2vh;
+
}
.selectedDatasetClass {
/*border-color: 2px solid #003459;*/
diff --git a/frontend/src/app/_elements/dataset-load/dataset-load.component.html b/frontend/src/app/_elements/dataset-load/dataset-load.component.html
index 6ab58021..56a3b3c9 100644
--- a/frontend/src/app/_elements/dataset-load/dataset-load.component.html
+++ b/frontend/src/app/_elements/dataset-load/dataset-load.component.html
@@ -2,19 +2,18 @@
<!--Sklonjeno ucitavanje novog dataseta i sve opcije u vezi sa tim, premesteno u add-new-dataset-->
- <div class="col-12 d-flex my-5">
- <div class="col-3">
+ <div class="d-flex flex-row justify-content-center align-items-center mt-3 mb-5">
+ <button type="button" id="btnMyDataset" class="btn" (click)="viewMyDatasetsForm()"
+ [ngClass]="{'btnType1': showMyDatasets, 'btnType2': !showMyDatasets}">
+ Izaberite dataset iz kolekcije
+ </button>
+ <h3 class="mt-3 mx-3">ili</h3>
+ <button type="button" id="btnNewDataset" class="btn" (click)="viewNewDatasetForm()"
+ [ngClass]="{'btnType1': !showMyDatasets, 'btnType2': showMyDatasets}">
+ Dodajte novi dataset
+ </button>
</div>
- <button type="button" id="btnMyDataset" class="btn" (click)="viewMyDatasetsForm()"
- [ngClass]="{'btnType1': showMyDatasets, 'btnType2': !showMyDatasets}">
- Izaberite dataset iz kolekcije
- </button>
- <h3 class="mt-3 mx-3">ili</h3>
- <button type="button" id="btnNewDataset" class="btn" (click)="viewNewDatasetForm()"
- [ngClass]="{'btnType1': !showMyDatasets, 'btnType2': showMyDatasets}">
- Dodajte novi dataset
- </button>
- </div>
+
<div class="px-5 my-2">
<input *ngIf="showMyDatasets" type="text" class="form-control" placeholder="Pretraga"
[(ngModel)]="term">
diff --git a/frontend/src/app/_elements/model-load/model-load.component.css b/frontend/src/app/_elements/model-load/model-load.component.css
index 8e9a66f6..c716f964 100644
--- a/frontend/src/app/_elements/model-load/model-load.component.css
+++ b/frontend/src/app/_elements/model-load/model-load.component.css
@@ -1,11 +1,15 @@
.btnType1 {
background-color: #003459;
color: white;
+ padding-top: 2vh;
+ padding-bottom: 2vh;
}
.btnType2 {
background-color: white;
color: #003459;
border-color: #003459;
+ padding-top: 2vh;
+ padding-bottom: 2vh;
}
.selectedModelClass {
/*border-color: 2px solid #003459;*/
diff --git a/frontend/src/app/_elements/model-load/model-load.component.html b/frontend/src/app/_elements/model-load/model-load.component.html
index 833b7181..f40ea476 100644
--- a/frontend/src/app/_elements/model-load/model-load.component.html
+++ b/frontend/src/app/_elements/model-load/model-load.component.html
@@ -1,7 +1,5 @@
<div>
- <div class="col-12 d-flex my-5">
- <div class="col-3">
- </div>
+ <div class="d-flex flex-row justify-content-center align-items-center mt-3 mb-5">
<button type="button" id="btnMyModel" class="btn" (click)="viewMyModelsForm()"
[ngClass]="{'btnType1': showMyModels, 'btnType2': !showMyModels}">
Izaberite model iz kolekcije
@@ -13,7 +11,7 @@
</button>
</div>
- <div *ngIf="showMyModels" class="px-5 my-2">
+ <div *ngIf="showMyModels" class="px-5 my-3">
<input *ngIf="showMyModels" type="text" class="form-control" placeholder="Pretraga" [(ngModel)]="term">
</div>
<div *ngIf="showMyModels" class="px-5">
@@ -51,11 +49,11 @@
value="{{newModel.dateCreated | date: 'dd/MM/yyyy'}}" readonly>
</div>
</div>
- <h2 class="mt-5 mb-4">Parametri treniranja:</h2>
+ <h2 class="mt-5 mb-4 mx-5">Parametri treniranja modela:</h2>
<div>
+
<div class="row p-2">
- <div class="col-1">
- </div>
+ <div class="col-1"></div>
<div class="col-3">
<label for="type" class="col-form-label">Tip problema: </label>
</div>
@@ -69,8 +67,7 @@
</option>
</select>
</div>
- <div class="col-1">
- </div>
+ <div class="col-1"></div>
<div class="col-3">
<label for="hiddenLayers" class="col-form-label">Broj skrivenih slojeva: </label>
</div>
@@ -85,20 +82,6 @@
<div class="row p-2">
<div class="col-1">
</div>
- <div class="col-1">
- </div>
- <div class="col-3">
- <label for="hiddenLayerNeurons" class="col-form-label">Broj neurona skrivenih slojeva: </label>
- </div>
- <div class="col-1">
- <input type="number" min="1" class="form-control" name="hiddenLayerNeurons"
- [(ngModel)]="newModel.hiddenLayerNeurons" (ngModelChange)="updateGraph()">
- </div>
- </div>
-
- <div class="row p-2">
- <div class="col-1">
- </div>
<div class="col-3">
<label for="optimizer" class="col-form-label">Optimizacija: </label>
</div>
@@ -114,15 +97,16 @@
<div class="col-1">
</div>
<div class="col-3">
- <label for="batchSize" class="col-form-label">Broj uzorka po iteraciji: </label>
+ <label for="hiddenLayerNeurons" class="col-form-label">Broj neurona skrivenih slojeva: </label>
</div>
<div class="col-1">
- <input type="number" min="1" class="form-control" name="batchSize" [(ngModel)]="newModel.batchSize">
+ <input type="number" min="1" class="form-control" name="hiddenLayerNeurons"
+ [(ngModel)]="newModel.hiddenLayerNeurons" (ngModelChange)="updateGraph()">
</div>
</div>
+
<div class="row p-2">
- <div class="col-1">
- </div>
+ <div class="col-1"></div>
<div class="col-3">
<label for="lossFunction" class="col-form-label">Funkcija obrade gubitka: </label>
</div>
@@ -137,17 +121,27 @@
</select>
</div>
<div class="col-1"></div>
+ <div class="col-3">
+ <label for="batchSize" class="col-form-label">Broj uzorka po iteraciji: </label>
+ </div>
+ <div class="col-1">
+ <input type="number" min="1" class="form-control" name="batchSize" [(ngModel)]="newModel.batchSize">
+ </div>
+ </div>
+
+ <div class="m-5">
+ <app-graph [model]="newModel" [inputCols]="1"></app-graph>
</div>
- <h3>Aktivacione funkcije:</h3>
- <div class="row p-2 m-2" style="align-self: center;">
+ <h3 class="mx-5 mt-4">Aktivacione funkcije:</h3>
+
+ <div class="row p-2" style="align-self: center;">
+ <div class="col-1"></div>
<div class="col-3">
<label for="hiddenLayerActivationFunction" class="col-form-label"
- style="text-align: center;">Funkcija
- aktivacije skrivenih
- slojeva:</label>
+ style="text-align: center;">Funkcija aktivacije<br>skrivenih slojeva:</label>
</div>
- <div class="col-3">
+ <div class="col-2 mt-2">
<div *ngFor="let item of [].constructor(newModel.hiddenLayers); let i = index">
<div class="input-group mb-2">
<div class="input-group-prepend">
@@ -164,13 +158,12 @@
</div>
</div>
</div>
- <div class="col-3">
+ <div class="col-1"></div>
+ <div class="col-2">
<label for="outputLayerActivationFunction" class="col-form-label"
- style="text-align: center;">Funkcija
- aktivacije izlaznog
- sloja:</label>
+ style="text-align: center;">Funkcija aktivacije<br>izlaznog sloja:</label>
</div>
- <div class="col-3">
+ <div class="col-2 mt-2">
<select id=outputLayerActivationFunctionOptions class="form-control"
name="outputLayerActivationFunction" [(ngModel)]="newModel.outputLayerActivationFunction">
<option
@@ -184,25 +177,24 @@
</div>
</div>
</div>
- <br><br>
- <hr>
- <div class="form-check form-check-inline overflow-auto " style="width: max-content;">
+
+ <div class="form-check form-check-inline overflow-auto m-4" style="width: max-content;">
<h3>Izaberite metrike:</h3>
- <div id="divMetricsinput">
+ <div id="divMetricsinput" class="mt-2 mx-5">
<div *ngFor="let option of Object.keys(metrics); let optionName of Object.values(metrics) "
class="form-check form-check-inline">
<input name="cbmetrics" class="form-check-input" type="checkbox" value="{{option}}"
- id="metrics_{{option}}" style="float: left;">
+ id="metrics_{{option}}" style="float: left;" checked>
<label class="form-check-label" for="metrics_{{option}}" for="inlineCheckbox2">
{{optionName}}
</label>
</div>
</div>
</div>
- <app-graph [model]="newModel" [inputCols]="1"></app-graph>
- <div class="form-group row mt-5 mb-3">
+
+ <div class="form-group row mt-3 mb-3">
<div class="col"></div>
<button class="btn btn-lg col-4" style="background-color:#003459; color:white;"
(click)="uploadModel();">Sačuvaj
diff --git a/frontend/src/app/experiment/experiment.component.css b/frontend/src/app/experiment/experiment.component.css
index ee4b0448..4a3d7741 100644
--- a/frontend/src/app/experiment/experiment.component.css
+++ b/frontend/src/app/experiment/experiment.component.css
@@ -36,4 +36,8 @@
ul li:hover {
background-color: lightblue;
+}
+
+h2 {
+ color: #003459;
} \ No newline at end of file
diff --git a/frontend/src/app/experiment/experiment.component.html b/frontend/src/app/experiment/experiment.component.html
index 36cf9eda..337d7369 100644
--- a/frontend/src/app/experiment/experiment.component.html
+++ b/frontend/src/app/experiment/experiment.component.html
@@ -1,5 +1,5 @@
<div id="header">
- <h1>Napravite svoju veštačku neuronske mrežu</h1>
+ <h1>Napravite svoju veštačku neuronsku mrežu</h1>
</div>
<div id="wrapper">
<div id="container" class="container p-5" style="background-color: white; min-height: 100%;">
@@ -12,277 +12,236 @@
<a href="#" data-bs-target="#carouselExampleControls" data-bs-slide-to="2">Dodaj eksperiment</a>
</div>
- <div id="carouselExampleControls" class="carousel slide" data-bs-wrap="false" data-bs-ride="carousel" data-bs-interval="false">
+ <div id="carouselExampleControls" class="carousel slide px-5 mt-5" data-bs-wrap="false" data-bs-ride="carousel" data-bs-interval="false">
<div class="carousel-inner">
- <div class="carousel-item active">
- <h2>1. Izvor podataka</h2>
+ <div class="carousel-item active mt-2">
+ <h2 class="mb-5">1. Izvor podataka</h2>
<app-dataset-load (selectedDatasetChangeEvent)="updateDataset($event)"></app-dataset-load>
</div>
- <div class="carousel-item">
- <h2>2. Preprocesiranje</h2>
+ <div class="carousel-item mt-2">
+ <h2 class="mb-4">2. Preprocesiranje</h2>
- <label for="name" class="col-form-label">Naziv eksperimenta:</label>
- <input type="text" class="form-control mb-1" name="name" placeholder="Naziv..." [(ngModel)]="experiment.name">
-
- <label for="desc" class="col-sm-2 col-form-label">Opis:</label>
- <div>
- <textarea class="form-control" name="desc" rows="3" [(ngModel)]="experiment.description"></textarea>
- </div>
-
- <h3 class="mt-3">Biranje ulaznih i izlaznih kolona:</h3>
- <div *ngIf="selectedDataset">
- <div class="row">
- <div class="col d-flex justify-content-center">
- <h3>Izaberite ulazne kolone:</h3>
- <div id="divInputs" class="form-check mt-2">
- <br>
- <div *ngFor="let item of selectedDataset.columnInfo; let i = index">
- <input class="form-check-input" type="checkbox" value="{{item.columnName}}"
- id="cb_{{item.columnName}}" name="cbsNew"
- [checked]="experiment.outputColumn != item.columnName"
- [disabled]="experiment.outputColumn == item.columnName"
- (click)="checkedColumnsChanged(item, 0)">&nbsp;
- <label class="form-check-label" for="cb_{{item.columnName}}">
- {{item.columnName}}
- </label>
+ <div class="px-5">
+ <h3>Biranje ulaznih i izlaznih kolona:</h3>
+ <div *ngIf="selectedDataset">
+ <div class="row">
+ <div class="col d-flex justify-content-center">
+ <h3>Izaberite ulazne kolone:</h3>
+ <div id="divInputs" class="form-check mt-2">
+ <br>
+ <div *ngFor="let item of selectedDataset.columnInfo; let i = index">
+ <input class="form-check-input" type="checkbox" value="{{item.columnName}}"
+ id="cb_{{item.columnName}}" name="cbsNew"
+ [checked]="experiment.outputColumn != item.columnName"
+ [disabled]="experiment.outputColumn == item.columnName"
+ (click)="checkedColumnsChanged(item, 0)">&nbsp;
+ <label class="form-check-label" for="cb_{{item.columnName}}">
+ {{item.columnName}}
+ </label>
+ </div>
</div>
</div>
- </div>
- <div class="col d-flex justify-content-left">
- <h3>Izaberite izlaznu kolonu:</h3>
- <div id="divOutputs" class="form-check mt-2">
- <br>
- <div *ngFor="let item of selectedDataset.columnInfo; let i = index">
- <input class="form-check-input" type="radio" value="{{item.columnName}}"
- id="rb_{{item.columnName}}" name="rbsNew"
- [(ngModel)]="this.experiment.outputColumn"
- (change)="experiment.outputColumn = item.columnName"
- (click)="checkedColumnsChanged(item, 1);">&nbsp;
- <label class="form-check-label" for="rb_{{item.columnName}}">
- {{item.columnName}}
- </label>
+ <div class="col d-flex justify-content-left">
+ <h3>Izaberite izlaznu kolonu:</h3>
+ <div id="divOutputs" class="form-check mt-2">
+ <br>
+ <div *ngFor="let item of selectedDataset.columnInfo; let i = index">
+ <input class="form-check-input" type="radio" value="{{item.columnName}}"
+ id="rb_{{item.columnName}}" name="rbsNew"
+ [(ngModel)]="this.experiment.outputColumn"
+ (change)="experiment.outputColumn = item.columnName"
+ (click)="checkedColumnsChanged(item, 1);">&nbsp;
+ <label class="form-check-label" for="rb_{{item.columnName}}">
+ {{item.columnName}}
+ </label>
+ </div>
</div>
</div>
</div>
</div>
- </div>
- <br>
- <h3>Popunjavanje nedostajućih vrednosti:</h3>
- <div class="form-check" *ngIf="selectedDataset">
- <input type="radio" [(ngModel)]="experiment.nullValues" [value]="NullValueOptions.DeleteRows"
- class="form-check-input" value="deleteRows" name="fillMissing" id="delRows" checked
- data-bs-toggle="collapse" data-bs-target="#fillMissingCustom.show">
- <label for="delRows" class="form-check-label">Obriši sve
- redove sa nedostajućim vrednostima ({{selectedDataset.nullRows}} / TODO)</label><br>
- <input type="radio" [(ngModel)]="experiment.nullValues" [value]="NullValueOptions.DeleteColumns"
- class="form-check-input" value="deleteCols" name="fillMissing" id="delCols" data-bs-toggle="collapse"
- data-bs-target="#fillMissingCustom.show">
- <label for="delCols" class="form-check-label">Obriši sve
- kolone sa nedostajućim vrednostima ({{selectedDataset.nullCols}} / TODO)</label><br>
- <input type="radio" [(ngModel)]="experiment.nullValues" [value]="NullValueOptions.Replace"
- class="form-check-input" name="fillMissing" id="replace" data-bs-toggle="collapse"
- data-bs-target="#fillMissingCustom:not(.show)">
- <label for="replace" class="form-check-label">Izabraću
- vrednosti koje će da zamene nedostajuće vrednosti za svaku kolonu...</label><br><br>
- <div class="collapse" id="fillMissingCustom">
- <div>
- <label for="columnReplacers" class="form-label">Unesite zamenu za svaku kolonu:</label>
- <div class="my-3" *ngIf="getSelectedNullColumnsArray().length > 0" >
- <label class="text-center form-control mx-3 text-secondary">
- Kolone <span style="font-style: italic;" *ngFor="let colname of getSelectedNullColumnsArray(); let i = index">
- <span *ngIf="i != getSelectedNullColumnsArray().length - 1">{{colname}}, </span>
- <span *ngIf="i == getSelectedNullColumnsArray().length - 1">{{colname}} </span>
- </span>
- nemaju nedostajućih vrednosti za popunjavanje.
- </label>
- </div>
- <div id="columnReplacers">
- <div *ngFor="let column of selectedColumnsInfoArray; let i = index" class="my-3">
- <div *ngIf="column.numNulls > 0">
- <span class="w-20 mx-3">
- {{column.columnName}}&nbsp;<span class="small" style="color:gray;">({{column.numNulls}} null)
- </span>
+
+ <h3 class="mt-5">Popunjavanje nedostajućih vrednosti:</h3>
+ <div class="form-check" *ngIf="selectedDataset">
+ <input type="radio" [(ngModel)]="experiment.nullValues" [value]="NullValueOptions.DeleteRows"
+ class="form-check-input" value="deleteRows" name="fillMissing" id="delRows" checked
+ data-bs-toggle="collapse" data-bs-target="#fillMissingCustom.show">
+ <label for="delRows" class="form-check-label">Obriši sve
+ redove sa nedostajućim vrednostima ({{selectedDataset.nullRows}} / TODO)</label><br>
+ <input type="radio" [(ngModel)]="experiment.nullValues" [value]="NullValueOptions.DeleteColumns"
+ class="form-check-input" value="deleteCols" name="fillMissing" id="delCols" data-bs-toggle="collapse"
+ data-bs-target="#fillMissingCustom.show">
+ <label for="delCols" class="form-check-label">Obriši sve
+ kolone sa nedostajućim vrednostima ({{selectedDataset.nullCols}} / TODO)</label><br>
+ <input type="radio" [(ngModel)]="experiment.nullValues" [value]="NullValueOptions.Replace"
+ class="form-check-input" name="fillMissing" id="replace" data-bs-toggle="collapse"
+ data-bs-target="#fillMissingCustom:not(.show)">
+ <label for="replace" class="form-check-label">Izabraću
+ vrednosti koje će da zamene nedostajuće vrednosti za svaku kolonu...</label><br><br>
+ <div class="collapse" id="fillMissingCustom">
+ <div>
+ <label for="columnReplacers" class="form-label">Unesite zamenu za svaku kolonu:</label>
+ <div class="my-3" *ngIf="getSelectedNullColumnsArray().length > 0" >
+ <label class="text-center form-control mx-3 text-secondary">
+ Kolone <span style="font-style: italic;" *ngFor="let colname of getSelectedNullColumnsArray(); let i = index">
+ <span *ngIf="i != getSelectedNullColumnsArray().length - 1">{{colname}}, </span>
+ <span *ngIf="i == getSelectedNullColumnsArray().length - 1">{{colname}} </span>
</span>
-
- <label *ngIf="column.numNulls <= 0"
- class="text-center form-control mx-3 text-secondary">
- Ova kolona nema
- nedostajućih
- vrednosti.
- </label>
-
- <div *ngIf="column.numNulls > 0" class="d-flex flex-row justify-content-end">
- <div class="flex-grow-3 mx-3 me-auto">
- <div class="input-group">
- <div class="input-group-prepend">
- <label [for]="'fillCol_'+column.columnName" class="form-control">
- Zameni
- <input type="radio" [id]="'fillCol_'+column.columnName"
- [name]="'delOp_'+column.columnName">
- </label>
- </div>
- <input type="text" class="form-control" [id]="'fillText_'+column.columnName"
- (keyup)="checkFillColRadio(column.columnName)"
- placeholder="Unesi vrednost...">
-
- <div class="input-group-append">
- <select [id]="'replaceOptions'+i" class="form-control btn-primary"
- *ngIf="column.isNumber" (change)="replace($event, column); checkFillColRadio(column.columnName);">
- <option
- *ngFor="let option of Object.keys(ReplaceWith); let optionName of Object.values(ReplaceWith)"
- [value]="option">
- {{ optionName }}
- </option>
- </select>
- <select [id]="'replaceOptions'+i"
- class="form-control btn-outline-primary"
- *ngIf="!column.isNumber && column.numNulls > 0"
- (change)="replace($event, column); checkFillColRadio(column.columnName);">
- <option *ngFor="let option of column.uniqueValues" [value]="option">
- {{ option }}
- </option>
- </select>
+ nemaju nedostajućih vrednosti za popunjavanje.
+ </label>
+ </div>
+ <div id="columnReplacers">
+ <div *ngFor="let column of selectedColumnsInfoArray; let i = index" class="my-3">
+ <div *ngIf="column.numNulls > 0">
+ <span class="w-20 mx-3">
+ {{column.columnName}}&nbsp;<span class="small" style="color:gray;">({{column.numNulls}} null)
+ </span>
+ </span>
+
+ <label *ngIf="column.numNulls <= 0"
+ class="text-center form-control mx-3 text-secondary">
+ Ova kolona nema
+ nedostajućih
+ vrednosti.
+ </label>
+
+ <div *ngIf="column.numNulls > 0" class="d-flex flex-row justify-content-end">
+ <div class="flex-grow-3 mx-3 me-auto">
+ <div class="input-group">
+ <div class="input-group-prepend">
+ <label [for]="'fillCol_'+column.columnName" class="form-control">
+ Zameni
+ <input type="radio" [id]="'fillCol_'+column.columnName"
+ [name]="'delOp_'+column.columnName">
+ </label>
+ </div>
+ <input type="text" class="form-control" [id]="'fillText_'+column.columnName"
+ (keyup)="checkFillColRadio(column.columnName)"
+ placeholder="Unesi vrednost...">
+
+ <div class="input-group-append">
+ <select [id]="'replaceOptions'+i" class="form-control btn-primary"
+ *ngIf="column.isNumber" (change)="replace($event, column); checkFillColRadio(column.columnName);">
+ <option
+ *ngFor="let option of Object.keys(ReplaceWith); let optionName of Object.values(ReplaceWith)"
+ [value]="option">
+ {{ optionName }}
+ </option>
+ </select>
+ <select [id]="'replaceOptions'+i"
+ class="form-control btn-outline-primary"
+ *ngIf="!column.isNumber && column.numNulls > 0"
+ (change)="replace($event, column); checkFillColRadio(column.columnName);">
+ <option *ngFor="let option of column.uniqueValues" [value]="option">
+ {{ option }}
+ </option>
+ </select>
+ </div>
</div>
</div>
- </div>
-
- <div class="flex-shrink-1 mx-3">
- <div class="input-group">
- <label class="form-control" [for]="'delCol_'+column.columnName">Izbriši
- kolonu
- <input type="radio" [id]="'delCol_'+column.columnName"
- [name]="'delOp_'+column.columnName"
- (change)="emptyFillTextInput(column.columnName)"></label>
+
+ <div class="flex-shrink-1 mx-3">
+ <div class="input-group">
+ <label class="form-control" [for]="'delCol_'+column.columnName">Izbriši
+ kolonu
+ <input type="radio" [id]="'delCol_'+column.columnName"
+ [name]="'delOp_'+column.columnName"
+ (change)="emptyFillTextInput(column.columnName)"></label>
+ </div>
</div>
- </div>
-
- <div class="flex-shrink-1 mx-3">
- <div class="input-group">
- <label class="form-control" [for]="'delRows_'+column.columnName">Izbriši
- redove
- <input type="radio" [id]="'delRows_'+column.columnName"
- [name]="'delOp_'+column.columnName" checked
- (change)="emptyFillTextInput(column.columnName)"></label>
+
+ <div class="flex-shrink-1 mx-3">
+ <div class="input-group">
+ <label class="form-control" [for]="'delRows_'+column.columnName">Izbriši
+ redove
+ <input type="radio" [id]="'delRows_'+column.columnName"
+ [name]="'delOp_'+column.columnName" checked
+ (change)="emptyFillTextInput(column.columnName)"></label>
+ </div>
</div>
</div>
</div>
</div>
</div>
- <!--
- <div *ngFor="let column of selectedDataset.columnInfo; let i = index" class="my-3">
- <div class="input-group row" *ngIf="getInputById('rb_'+column.columnName).checked">
- <span class="input-group-text col-2 text-center">
- {{column.columnName}}&nbsp;<span class="small" style="color:gray;">(br
- null)</span>
- </span>
- <label *ngIf="true" class="form-control">Ova
- kolona nema nedostajućih vrednosti.</label>
-
- <input *ngIf="true" type="radio" [id]="'fillCol_'+column.columnName" class="col-1 mt-2"
- [name]="'delOp_'+column.columnName">
- <select [id]="'replaceOptions'+i" class="form-control col-2" *ngIf="column.isNumber"
- (change)="replace($event, column);">
- <option
- *ngFor="let option of Object.keys(ReplaceWith); let optionName of Object.values(ReplaceWith)"
- [value]="option">
- {{ optionName }}
- </option>
- </select>
- <select [id]="'replaceOptions'+i"
- class="form-control btn-outline-primary"
- *ngIf="!column.isNumber && column.numNulls > 0"
- (change)="replace($event, column); checkFillColRadio(column.columnName);">
- <option *ngFor="let option of column.uniqueValues" [value]="option">
- {{ option }}
- </option>
- </select>
- <input *ngIf="true" type="text" class="form-control col-1"
- [id]="'fillText_'+column.columnName" (keyup)="checkFillColRadio(column.columnName)"
- placeholder="Unesi vrednost...">
-
- <label *ngIf="true" class="form-control col-2" [for]="'delCol_'+column.columnName"
- .name>Izbriši
- kolonu
- <input type="radio" [id]="'delCol_'+column.columnName"
- [name]="'delOp_'+column.columnName"
- (change)="emptyFillTextInput(column.columnName)"></label>
- <label *ngIf="true" class="form-control col-2"
- [for]="'delRows_'+column.columnName">Izbriši
- redove
- <input type="radio" [id]="'delRows_'+column.columnName"
- [name]="'delOp_'+column.columnName"
- (change)="emptyFillTextInput(column.columnName)" checked></label>
- </div>
- </div>
- -->
</div>
</div>
</div>
- </div>
-
- <div id="randomOptions">
- <div class="col-3 mt-2">
- <label for="type" class="form-check-label">Nasumičan redosled podataka?</label>
- <input class="mx-3 form-check-input" type="checkbox" [(ngModel)]="experiment.randomOrder"
+
+ <div id="randomOptions" class="mt-5">
+ <div class="p-2 m-2">
+ <label for="type" class="form-check-label">Želite li da redosled podataka bude nasumičan?</label>
+ <input class="mx-3 form-check-input" type="checkbox" [(ngModel)]="experiment.randomOrder"
type="checkbox" value="" checked>
- </div>
- <div class="border m-3">
- <div class="row p-2 m-2">
- <div class="col-4">
- <label for="splitYesNo" class="form-check-label">
- <h3>Podela test skupa:&nbsp;&nbsp;
- <input id="splitYesNo" class="form-check-input" type="checkbox"
- [checked]="experiment.randomTestSet"
- (change)="experiment.randomTestSet = !experiment.randomTestSet">
- </h3>
- </label>
- </div>
- <div class="col-8">
- trening
- <mat-slider style="width: 85%;" min="10" max="90" step="10" value="10"
- name="randomTestSetDistribution" thumbLabel [disabled]="!experiment.randomTestSet"
- [(ngModel)]="tempTestSetDistribution">
- </mat-slider>
- test
- </div>
</div>
-
- <div class="row p-2 mx-2">
- <div class="col-4">
+ <div class="border m-3">
+ <div class="row p-2 m-2">
+ <div class="col-4">
+ <label for="splitYesNo" class="form-check-label">
+ <h3>Podela test skupa:&nbsp;&nbsp;
+ <input id="splitYesNo" class="form-check-input" type="checkbox"
+ [checked]="experiment.randomTestSet"
+ (change)="experiment.randomTestSet = !experiment.randomTestSet">
+ </h3>
+ </label>
+ </div>
+ <div class="col-8">
+ trening
+ <mat-slider style="width: 85%;" min="10" max="90" step="10" value="10"
+ name="randomTestSetDistribution" thumbLabel [disabled]="!experiment.randomTestSet"
+ [(ngModel)]="tempTestSetDistribution">
+ </mat-slider>
+ test
+ </div>
+ </div>
+
+ <div class="row p-2 m-2">
<label for="percentage" class="form-label">Procenat podataka koji se uzima za trening
skup:</label>
- </div>
- <div class="col-2">
- <input id="percentage" type="number" class="form-control" min="10" max="90" step="10" value="90"
+ <input id="percentage" type="number" class="form-control mx-3" style=" max-width: 15%" min="10" max="90" step="10" value="90"
[(ngModel)]="tempTestSetDistribution" [disabled]="!experiment.randomTestSet">
</div>
</div>
</div>
- </div>
-
- <div id="encodingForColumns">
- <div class="col-3">
- <label for="encoding" class="col-form-label">Enkoding: </label>
- </div>
- <div class="col-2">
- <select id=encodingOptions class="form-control" name="encoding" [(ngModel)]="experiment.encoding">
- <option *ngFor="let option of Object.keys(Encoding); let optionName of Object.values(Encoding)"
- [value]="option">
- {{ optionName }}
- </option>
- </select>
+
+ <div id="encodingForColumns" class="my-5">
+ <div class="col-3">
+ <label for="encoding" class="col-form-label">Enkoding: </label>
+ </div>
+ <div class="col-2">
+ <select id=encodingOptions class="form-control" name="encoding" [(ngModel)]="experiment.encoding">
+ <option *ngFor="let option of Object.keys(Encoding); let optionName of Object.values(Encoding)"
+ [value]="option">
+ {{ optionName }}
+ </option>
+ </select>
+ </div>
</div>
+
</div>
</div>
- <div class="carousel-item">
- <div class="form-group row mt-5 mb-3">
+ <div class="carousel-item mt-2">
+ <h2 class="mb-4">3. Dodaj eskperiment</h2>
+
+ <div class="row">
<div class="col"></div>
- <button class="btn btn-lg col-4" style="background-color:#003459; color:white;" (click)="saveExperiment();">Sačuvaj
- eksperiment</button>
+ <div class="col-8">
+ <label for="name" class="col-form-label">Naziv eksperimenta:</label>
+ <input type="text" class="form-control mb-3" name="name" placeholder="Naziv..." [(ngModel)]="experiment.name">
+
+ <label for="desc" class="col-sm-2 col-form-label">Opis:</label>
+ <div>
+ <textarea class="form-control" name="desc" rows="3" [(ngModel)]="experiment.description"></textarea>
+ </div>
+ <div class="form-group row mt-5 mb-3">
+ <div class="col"></div>
+ <button class="btn btn-lg col-4" style="background-color:#003459; color:white;" (click)="saveExperiment();">Sačuvaj
+ eksperiment</button>
+ <div class="col"></div>
+ </div>
+ </div>
<div class="col"></div>
</div>
</div>
diff --git a/frontend/src/app/experiment/experiment.component.ts b/frontend/src/app/experiment/experiment.component.ts
index 8a1b7d70..a2b5602b 100644
--- a/frontend/src/app/experiment/experiment.component.ts
+++ b/frontend/src/app/experiment/experiment.component.ts
@@ -24,7 +24,6 @@ export class ExperimentComponent implements OnInit {
Object = Object;
selectedColumnsInfoArray: ColumnInfo[] = [];
- //selectedOutputColumnVal: string = '';
selectedNullColumnsArray: string[] = [];
tempTestSetDistribution = 90;
@@ -35,11 +34,9 @@ export class ExperimentComponent implements OnInit {
}
updateDataset(dataset: Dataset) {
- //console.log(dataset);
this.selectedDataset = dataset;
this.selectedColumnsInfoArray = this.selectedDataset.columnInfo;
this.selectedNullColumnsArray = [];
- //console.log("array:", this.selectedColumnsInfoArray);
}
getInputById(id: string): HTMLInputElement {
@@ -151,7 +148,6 @@ export class ExperimentComponent implements OnInit {
}
}
}
- //console.log(array);
return array;
}
@@ -177,8 +173,6 @@ export class ExperimentComponent implements OnInit {
for (let i = 0; i < pom.length; i++)
this.experiment.inputColumns.push(pom[i].columnName);
- //this.experiment.outputColumn = this.selectedOutputColumnVal;
-
this.selectedColumnsInfoArray = this.selectedColumnsInfoArray.filter(x => x.numNulls > 0); //obavezno
this.experiment.nullValuesReplacers = this.getNullValuesReplacersArray();
diff --git a/frontend/src/app/training/training.component.html b/frontend/src/app/training/training.component.html
index 2e574c12..0ce4cc89 100644
--- a/frontend/src/app/training/training.component.html
+++ b/frontend/src/app/training/training.component.html
@@ -1,38 +1,46 @@
<div id="header">
- <h1>Trenirajte veštačku neuronske mrežu</h1>
+ <h1>Trenirajte veštačku neuronsku mrežu</h1>
</div>
-<div id="wrapper">
- <div id="container" class="container p-5" style="background-color: white; min-height: 100%;">
+<div id="wrapper" class="mb-4">
+ <div id="container" class="container p-5 row" style="background-color: white; min-height: 100%;">
+ <div class="col"></div>
-<h2>1. Izaberite eksperiment iz kolekcije</h2>
-<div class="px-5 my-2">
- <input type="text" class="form-control" placeholder="Pretraga"
- [(ngModel)]="term">
-</div>
-<div class="overflow-auto" style="max-height: 500px;">
- <ul class="list-group">
- <li class="list-group-item p-3" *ngFor="let experiment of myExperiments|filter:term"
- [ngClass]="{'selectedExperimentClass': this.selectedExperiment == experiment}">
- <app-item-experiment [experiment]="experiment"
- (click)="selectThisExperiment(experiment);"></app-item-experiment>
- </li>
- </ul>
-</div>
+ <div class="col-10">
-<h2>2.Izaberite model</h2>
-<app-model-load (selectedModelChangeEvent)="selectModel($event)"></app-model-load>
+ <h2>1. Izaberite eksperiment iz kolekcije</h2>
+ <div class="px-5 mt-5 mb-3">
+ <input type="text" class="form-control" placeholder="Pretraga"
+ [(ngModel)]="term">
+ </div>
+ <div class="overflow-auto px-5" style="max-height: 500px;">
+ <ul class="list-group">
+ <li class="list-group-item p-3" *ngFor="let experiment of myExperiments|filter:term"
+ [ngClass]="{'selectedExperimentClass': this.selectedExperiment == experiment}">
+ <app-item-experiment [experiment]="experiment"
+ (click)="selectThisExperiment(experiment);"></app-item-experiment>
+ </li>
+ </ul>
+ </div>
+
+ <h2 class="mt-5 mb-2">2. Izaberite model</h2>
+ <app-model-load (selectedModelChangeEvent)="selectModel($event)"></app-model-load>
+
+ <h2 class="my-5">3. Treniranje modela</h2>
-<h2>3. Trenirajte model</h2>
-<button class="btn btn-lg col-4" style="background-color:#003459; color:white;" (click)="trainModel();">Treniraj
- model</button>
+ <div class="d-flex flex-row justify-content-center align-items-center my-3">
+ <button class="btn btn-lg col-4" style="background-color:#003459; color:white;" (click)="trainModel();">Treniraj
+ model</button>
+ </div>
+
+ <h2 class="mt-5">Rezultati treniranja</h2>
+ <div class="m-3" *ngIf="trainingResult">
+ <h2 class="my-2">Rezultati treniranja:</h2>
+ <p>
+ {{trainingResult}}
+ </p>
+ </div>
+ </div>
-<h2>Rezultati treniranja</h2>
-<div class="m-3" *ngIf="trainingResult">
- <h2 class="my-2">Rezultati treniranja:</h2>
- <p>
- {{trainingResult}}
- </p>
-</div>
-
-</div>
+ <div class="col"></div>
+ </div>
</div> \ No newline at end of file
diff --git a/frontend/src/app/training/training.component.ts b/frontend/src/app/training/training.component.ts
index 4f20bc87..027d2c22 100644
--- a/frontend/src/app/training/training.component.ts
+++ b/frontend/src/app/training/training.component.ts
@@ -24,7 +24,6 @@ export class TrainingComponent{
constructor(private modelsService: ModelsService, private datasetsService: DatasetsService, private experimentsService: ExperimentsService) {
this.experimentsService.getMyExperiments().subscribe((experiments) => {
this.myExperiments = experiments;
- console.log(this.myExperiments);
});
}
@@ -48,7 +47,8 @@ export class TrainingComponent{
return;
}
this.modelsService.trainModel(this.selectedModel._id, this.selectedExperiment._id).subscribe((response: any) => {
- console.log('Train model complete!', response);
+ //console.log('Train model complete!', response);
+ Shared.openDialog("Obaveštenje", "Treniranje modela je uspešno završeno!");
this.trainingResult = response;
});
}