Added Limited Epoch Event Buffer
for better frontend performance when using big max epoch number
This commit is contained in:
@@ -15,14 +15,29 @@ const allWeightPerIteration: ComputedRef<number[][]> = computed(() => {
|
||||
return iteration.weights.flat(2);
|
||||
});
|
||||
});
|
||||
|
||||
const rowBgDark = computed(() => {
|
||||
let isEven = false;
|
||||
return props.iterations.map((iteration, index, arr) => {
|
||||
if (index > 0 && arr[index - 1].epoch !== iteration.epoch) {
|
||||
isEven = !isEven;
|
||||
}
|
||||
return isEven;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<table class="table w-full border-collapse border border-gray-300">
|
||||
<tr class="text-left" v-if="props.iterations.length > 0">
|
||||
<th>Itération</th>
|
||||
<th>Époch</th>
|
||||
<th>Exemple</th>
|
||||
<th v-for="(weight, index) in allWeightPerIteration[allWeightPerIteration.length - 1]" v-bind:key="index">
|
||||
<th
|
||||
v-for="(weight, index) in allWeightPerIteration[
|
||||
allWeightPerIteration.length - 1
|
||||
]"
|
||||
v-bind:key="index"
|
||||
>
|
||||
X<sub>{{ index }}</sub>
|
||||
</th>
|
||||
<th>Erreur</th>
|
||||
@@ -31,12 +46,15 @@ const allWeightPerIteration: ComputedRef<number[][]> = computed(() => {
|
||||
v-for="(iteration, index) in props.iterations"
|
||||
v-bind:key="index"
|
||||
:class="{
|
||||
'bg-gray-900': iteration.iteration % 2 === 0,
|
||||
'bg-gray-900': rowBgDark[index],
|
||||
}"
|
||||
>
|
||||
<td>{{ iteration.iteration }}</td>
|
||||
<td>{{ iteration.epoch }}</td>
|
||||
<td>{{ iteration.exampleIndex }}</td>
|
||||
<td v-for="(weight, index) in allWeightPerIteration[index]" v-bind:key="index">
|
||||
<td
|
||||
v-for="(weight, index) in allWeightPerIteration[index]"
|
||||
v-bind:key="index"
|
||||
>
|
||||
{{ weight.toFixed(2) }}
|
||||
</td>
|
||||
<td>{{ iteration.error.toFixed(2) }}</td>
|
||||
|
||||
@@ -46,7 +46,7 @@ function getPerceptronDecisionBoundaryDataset(
|
||||
networkWeights[0].length == 1 &&
|
||||
networkWeights[0][0].length == 3
|
||||
) { // Unique, 3 weights perceptron
|
||||
const perceptronWeights = networkWeights[0][0]; // We take the unique
|
||||
const perceptronWeights = networkWeights[0][0]; // We take the unique perceptron
|
||||
|
||||
function perceptronLine(x: number): number {
|
||||
// w0 + w1*x + w2*y = 0 => y = -(w1/w2)*x - w0/w2
|
||||
@@ -161,7 +161,7 @@ function getPerceptronDecisionBoundaryDataset(
|
||||
color: function (context) {
|
||||
if (context.tick.value == 0) {
|
||||
return gridColorBold;
|
||||
}
|
||||
}
|
||||
|
||||
return gridColor;
|
||||
},
|
||||
@@ -174,7 +174,7 @@ function getPerceptronDecisionBoundaryDataset(
|
||||
color: function (context) {
|
||||
if (context.tick.value == 0) {
|
||||
return gridColorBold;
|
||||
}
|
||||
}
|
||||
|
||||
return gridColor;
|
||||
},
|
||||
|
||||
@@ -47,11 +47,17 @@ watch(selectedDatasetCopy, (newvalue) => {
|
||||
(dataset) => dataset.label === newvalue
|
||||
) || null;
|
||||
|
||||
let defaultLearningRate = props.defaultLearningRate;
|
||||
// LearningRate
|
||||
learningRate.value = props.defaultLearningRate;
|
||||
if (selectedDatasetCopy && selectedDatasetCopy.defaultLearningRate !== undefined) {
|
||||
defaultLearningRate = selectedDatasetCopy.defaultLearningRate;
|
||||
learningRate.value = selectedDatasetCopy.defaultLearningRate;
|
||||
}
|
||||
learningRate.value = defaultLearningRate;
|
||||
// MinError
|
||||
minError.value = props.minError;
|
||||
if (selectedDatasetCopy && selectedDatasetCopy.defaultMinError !== undefined) {
|
||||
minError.value = selectedDatasetCopy.defaultMinError;
|
||||
}
|
||||
// MaxIterations
|
||||
maxIterations.value = props.defaultMaxIterations;
|
||||
})
|
||||
|
||||
@@ -196,7 +202,7 @@ watch(selectedDatasetCopy, (newValue) => {
|
||||
<!-- MAX ITERATIONS -->
|
||||
<FormField name="max_iterations">
|
||||
<FormItem>
|
||||
<FormLabel>Nombre maximum d'itérations</FormLabel>
|
||||
<FormLabel>Nombre maximum d'epoch</FormLabel>
|
||||
<FormControl>
|
||||
<Input
|
||||
type="number"
|
||||
|
||||
Reference in New Issue
Block a user