Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
OpenDAS
nni
Commits
f253576f
Commit
f253576f
authored
Nov 15, 2018
by
Lijiao
Committed by
QuanluZhang
Nov 15, 2018
Browse files
Support hyper-band (#358)
parent
1e9cd5fe
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
110 additions
and
98 deletions
+110
-98
src/webui/public/icon.png
src/webui/public/icon.png
+0
-0
src/webui/src/components/Overview.tsx
src/webui/src/components/Overview.tsx
+2
-0
src/webui/src/components/overview/TrialProfile.tsx
src/webui/src/components/overview/TrialProfile.tsx
+1
-0
src/webui/src/components/trial-detail/Para.tsx
src/webui/src/components/trial-detail/Para.tsx
+106
-98
src/webui/src/static/interface.ts
src/webui/src/static/interface.ts
+1
-0
No files found.
src/webui/public/icon.png
View replaced file @
1e9cd5fe
View file @
f253576f
29.9 KB
|
W:
|
H:
29.9 KB
|
W:
|
H:
2-up
Swipe
Onion skin
src/webui/src/components/Overview.tsx
View file @
f253576f
...
...
@@ -103,6 +103,7 @@ class Overview extends React.Component<{}, OverviewState> {
const
clusterMetaData
=
sessionData
.
params
.
clusterMetaData
;
const
endTimenum
=
sessionData
.
endTime
;
const
assessor
=
sessionData
.
params
.
assessor
;
const
advisor
=
sessionData
.
params
.
advisor
;
trialPro
.
push
({
id
:
sessionData
.
id
,
author
:
sessionData
.
params
.
authorName
,
...
...
@@ -118,6 +119,7 @@ class Overview extends React.Component<{}, OverviewState> {
trainingServicePlatform
:
trainingPlatform
,
tuner
:
sessionData
.
params
.
tuner
,
assessor
:
assessor
?
assessor
:
undefined
,
advisor
:
advisor
?
advisor
:
undefined
,
clusterMetaData
:
clusterMetaData
?
clusterMetaData
:
undefined
});
// search space format loguniform max and min
...
...
src/webui/src/components/overview/TrialProfile.tsx
View file @
f253576f
...
...
@@ -20,6 +20,7 @@ class TrialInfo extends React.Component<TrialInfoProps, {}> {
trialConcurrency
:
tiralProInfo
.
runConcurren
,
tuner
:
tiralProInfo
.
tuner
,
assessor
:
tiralProInfo
.
assessor
?
tiralProInfo
.
assessor
:
undefined
,
advisor
:
tiralProInfo
.
advisor
?
tiralProInfo
.
advisor
:
undefined
,
clusterMetaData
:
tiralProInfo
.
clusterMetaData
?
tiralProInfo
.
clusterMetaData
:
undefined
});
return
(
...
...
src/webui/src/components/trial-detail/Para.tsx
View file @
f253576f
...
...
@@ -22,6 +22,11 @@ interface ParaState {
visualValue
:
VisualMapValue
;
}
interface
SearchSpace
{
_value
:
Array
<
number
|
string
>
;
_type
:
string
;
}
message
.
config
({
top
:
250
,
duration
:
2
,
...
...
@@ -54,6 +59,82 @@ class Para extends React.Component<{}, ParaState> {
};
}
getParallelAxis
=
(
dimName
:
Array
<
string
>
,
searchRange
:
SearchSpace
,
parallelAxis
:
Array
<
Dimobj
>
,
accPara
:
Array
<
number
>
,
eachTrialParams
:
Array
<
string
>
,
paraYdata
:
number
[][]
)
=>
{
if
(
this
.
_isMounted
)
{
this
.
setState
(()
=>
({
dimName
:
dimName
,
visualValue
:
{
minAccuracy
:
accPara
.
length
!==
0
?
Math
.
min
(...
accPara
)
:
0
,
maxAccuracy
:
accPara
.
length
!==
0
?
Math
.
max
(...
accPara
)
:
1
}
}));
}
// search space range and specific value [only number]
for
(
let
i
=
0
;
i
<
dimName
.
length
;
i
++
)
{
const
searchKey
=
searchRange
[
dimName
[
i
]];
switch
(
searchKey
.
_type
)
{
case
'
uniform
'
:
case
'
quniform
'
:
parallelAxis
.
push
({
dim
:
i
,
name
:
dimName
[
i
],
max
:
searchKey
.
_value
[
1
],
min
:
searchKey
.
_value
[
0
]
});
break
;
case
'
randint
'
:
parallelAxis
.
push
({
dim
:
i
,
name
:
dimName
[
i
],
max
:
searchKey
.
_value
[
0
],
min
:
0
});
break
;
case
'
choice
'
:
const
data
:
Array
<
string
>
=
[];
for
(
let
j
=
0
;
j
<
searchKey
.
_value
.
length
;
j
++
)
{
data
.
push
(
searchKey
.
_value
[
j
].
toString
());
}
parallelAxis
.
push
({
dim
:
i
,
name
:
dimName
[
i
],
type
:
'
category
'
,
data
:
data
});
break
;
default
:
parallelAxis
.
push
({
dim
:
i
,
name
:
dimName
[
i
]
});
}
}
// get data for every lines. if dim is choice type, number -> toString()
Object
.
keys
(
eachTrialParams
).
map
(
item
=>
{
let
temp
:
Array
<
number
>
=
[];
for
(
let
i
=
0
;
i
<
dimName
.
length
;
i
++
)
{
if
(
'
type
'
in
parallelAxis
[
i
])
{
temp
.
push
(
eachTrialParams
[
item
][
dimName
[
i
]].
toString
()
);
}
else
{
temp
.
push
(
eachTrialParams
[
item
][
dimName
[
i
]]
);
}
}
paraYdata
.
push
(
temp
);
});
}
hyperParaPic
=
()
=>
{
axios
.
all
([
...
...
@@ -66,17 +147,14 @@ class Para extends React.Component<{}, ParaState> {
const
accParaData
=
res
.
data
;
const
accPara
:
Array
<
number
>
=
[];
// specific value array
const
speValue
:
Array
<
string
>
=
[];
// yAxis specific name
const
speDimName
:
Array
<
string
>
=
[];
const
eachTrialParams
:
Array
<
string
>
=
[];
const
parallelAxis
:
Array
<
Dimobj
>
=
[];
const
paraYdata
:
number
[][]
=
[];
// experiment interface search space obj
const
searchRange
=
JSON
.
parse
(
res1
.
data
.
params
.
searchSpace
);
const
reallySearchKeys
=
Object
.
keys
(
searchRange
);
// trial-jobs interface list
Object
.
keys
(
accParaData
).
map
(
item
=>
{
if
(
accParaData
[
item
].
hyperParameters
!==
undefined
)
{
const
tem
=
JSON
.
parse
(
accParaData
[
item
].
hyperParameters
).
parameters
;
// get dim and every line specific number
speDimName
.
push
(
tem
);
}
if
(
accParaData
[
item
].
status
===
'
SUCCEEDED
'
)
{
if
(
accParaData
[
item
].
finalMetricData
&&
accParaData
[
item
].
hyperParameters
)
{
// get acc array
...
...
@@ -93,101 +171,32 @@ class Para extends React.Component<{}, ParaState> {
accPara
.
push
(
accReal
);
// get dim and every line specific number
const
temp
=
JSON
.
parse
(
accParaData
[
item
].
hyperParameters
).
parameters
;
speValue
.
push
(
temp
);
eachTrialParams
.
push
(
temp
);
}
}
});
// get [batch_size...] name, default each trial is same
// if (speValue.length !== 0) {
const
dimName
=
Object
.
keys
(
speDimName
[
0
]);
if
(
this
.
_isMounted
)
{
this
.
setState
(()
=>
({
dimName
:
dimName
,
visualValue
:
{
minAccuracy
:
accPara
.
length
!==
0
?
Math
.
min
(...
accPara
)
:
0
,
maxAccuracy
:
accPara
.
length
!==
0
?
Math
.
max
(...
accPara
)
:
1
}
}));
}
// search space range and specific value [only number]
const
searchRange
=
JSON
.
parse
(
res1
.
data
.
params
.
searchSpace
);
for
(
let
i
=
0
;
i
<
dimName
.
length
;
i
++
)
{
const
searchKey
=
searchRange
[
dimName
[
i
]];
switch
(
searchKey
.
_type
)
{
case
'
uniform
'
:
case
'
quniform
'
:
parallelAxis
.
push
({
dim
:
i
,
name
:
dimName
[
i
],
max
:
searchKey
.
_value
[
1
],
min
:
searchKey
.
_value
[
0
]
});
break
;
case
'
randint
'
:
parallelAxis
.
push
({
dim
:
i
,
name
:
dimName
[
i
],
max
:
searchKey
.
_value
[
0
],
min
:
0
});
break
;
case
'
choice
'
:
const
data
:
Array
<
string
>
=
[];
for
(
let
j
=
0
;
j
<
searchKey
.
_value
.
length
;
j
++
)
{
data
.
push
(
searchKey
.
_value
[
j
].
toString
());
}
parallelAxis
.
push
({
dim
:
i
,
name
:
dimName
[
i
],
type
:
'
category
'
,
data
:
data
});
break
;
default
:
parallelAxis
.
push
({
dim
:
i
,
name
:
dimName
[
i
]
});
const
dimName
=
reallySearchKeys
;
this
.
getParallelAxis
(
dimName
,
searchRange
,
parallelAxis
,
accPara
,
eachTrialParams
,
paraYdata
);
}
}
// get data for every lines. if dim is choice type
// number -> toString()
Object
.
keys
(
speValue
).
map
(
item
=>
{
let
temp
:
Array
<
number
>
=
[];
for
(
let
i
=
0
;
i
<
dimName
.
length
;
i
++
)
{
if
(
'
type
'
in
parallelAxis
[
i
])
{
temp
.
push
(
speValue
[
item
][
dimName
[
i
]].
toString
()
);
}
else
{
temp
.
push
(
speValue
[
item
][
dimName
[
i
]]
);
}
}
paraYdata
.
push
(
temp
);
});
// add acc
Object
.
keys
(
paraYdata
).
map
(
item
=>
{
paraYdata
[
item
].
push
(
accPara
[
item
]);
});
// according acc to sort ydata
if
(
paraYdata
.
length
!==
0
)
{
const
len
=
paraYdata
[
0
].
length
-
1
;
paraYdata
.
sort
((
a
,
b
)
=>
b
[
len
]
-
a
[
len
]);
}
this
.
setState
(()
=>
({
paraBack
:
{
parallelAxis
:
parallelAxis
,
data
:
paraYdata
}
}));
const
{
percent
,
swapAxisArr
}
=
this
.
state
;
const
{
paraBack
}
=
this
.
state
;
if
(
this
.
_isMounted
)
{
this
.
setState
(()
=>
({
paraBack
:
{
parallelAxis
:
parallelAxis
,
data
:
paraYdata
}
}));
}
const
{
percent
,
swapAxisArr
,
paraBack
}
=
this
.
state
;
// need to cut down the data
if
(
percent
!==
0
)
{
const
linesNum
=
paraBack
.
data
.
length
;
...
...
@@ -198,13 +207,7 @@ class Para extends React.Component<{}, ParaState> {
if
(
swapAxisArr
.
length
>=
2
)
{
this
.
swapGraph
(
paraBack
,
swapAxisArr
);
}
// draw search space graph
if
(
this
.
_isMounted
)
{
this
.
setState
({
option
:
this
.
getOption
(
paraBack
)
});
}
// }
this
.
getOption
(
paraBack
);
}
}
}));
...
...
@@ -297,7 +300,12 @@ class Para extends React.Component<{}, ParaState> {
});
}
}
return
optionown
;
// draw search space graph
if
(
this
.
_isMounted
)
{
this
.
setState
(()
=>
({
option
:
optionown
}));
}
}
// get swap parallel axis
...
...
src/webui/src/static/interface.ts
View file @
f253576f
...
...
@@ -32,6 +32,7 @@ interface Experiment {
trainingServicePlatform
:
string
;
tuner
:
object
;
assessor
?:
object
;
advisor
?:
object
;
clusterMetaData
?:
object
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment