Skip to content

Commit 29e5352

Browse files
authored
HParam: Stop including default filters by default (#6525)
## Motivation for features / changes Default hparam and metric filters has lead to a lot of subtle bugs when values are not as expected Examples of such errors: NaN values lead to all runs being filtered out. Booleans have been treated as strings without domains and thus are filtered out Because the existing runs table uses these default filters I am opting not to outright remove them but rather to only read them if an additional parameter is provided to the new selector.
1 parent 3cf971c commit 29e5352

File tree

2 files changed

+69
-9
lines changed

2 files changed

+69
-9
lines changed

tensorboard/webapp/hparams/_redux/hparams_selectors.ts

+15-5
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,17 @@ export const getHparamFilterMap = createSelector(
7676
getHparamFilterMapResultFunction
7777
);
7878

79-
export function getHparamFilterMapFromExperimentIds(experimentIds: string[]) {
79+
export function getHparamFilterMapFromExperimentIds(
80+
experimentIds: string[],
81+
includeDefaults?: boolean
82+
) {
8083
return createSelector(
8184
getHparamsState,
8285
getHparamsDefaultFiltersForExperimentsFromExperimentIds(experimentIds),
83-
(hparamState, combinedDefaultFilterMap) =>
86+
(hparamState, defaultFilterMap) =>
8487
getHparamFilterMapResultFunction(
8588
hparamState,
86-
combinedDefaultFilterMap,
89+
includeDefaults ? defaultFilterMap : new Map(),
8790
experimentIds
8891
)
8992
);
@@ -136,12 +139,19 @@ export const getMetricFilterMap = createSelector(
136139
getMetricFilterMapResultFunction
137140
);
138141

139-
export function getMetricFilterMapFromExperimentIds(experimentIds: string[]) {
142+
export function getMetricFilterMapFromExperimentIds(
143+
experimentIds: string[],
144+
includeDefaults?: boolean
145+
) {
140146
return createSelector(
141147
getHparamsState,
142148
getMetricsDefaultFiltersForExperimentsFromExperimentIds(experimentIds),
143149
(state, defaultFilterMap) =>
144-
getMetricFilterMapResultFunction(state, defaultFilterMap, experimentIds)
150+
getMetricFilterMapResultFunction(
151+
state,
152+
includeDefaults ? defaultFilterMap : new Map(),
153+
experimentIds
154+
)
145155
);
146156
}
147157

tensorboard/webapp/hparams/_redux/hparams_selectors_test.ts

+54-4
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ describe('hparams/_redux/hparams_selectors_test', () => {
118118
});
119119

120120
describe('#getHparamFilterMapFromExperimentIds()', () => {
121-
it('returns default hparam filter map', () => {
121+
it('returns default hparam filter map when includeDefaults is true', () => {
122122
const state = buildStateFromHparamsState(
123123
buildHparamsState(
124124
buildSpecs('foo', {
@@ -138,7 +138,7 @@ describe('hparams/_redux/hparams_selectors_test', () => {
138138
);
139139

140140
expect(
141-
selectors.getHparamFilterMapFromExperimentIds(['foo'])(state)
141+
selectors.getHparamFilterMapFromExperimentIds(['foo'], true)(state)
142142
).toEqual(
143143
new Map([
144144
['optimizer', buildDiscreteFilter({filterValues: ['a', 'b', 'c']})],
@@ -207,6 +207,30 @@ describe('hparams/_redux/hparams_selectors_test', () => {
207207
selectors.getHparamFilterMapFromExperimentIds(['bar'])(state)
208208
).toEqual(new Map());
209209
});
210+
211+
it('does not use default filters when includeDefaults is false', () => {
212+
const state = buildStateFromHparamsState(
213+
buildHparamsState(
214+
buildSpecs('foo', {
215+
hparam: {
216+
specs: [buildHparamSpec({name: 'optimizer'})],
217+
defaultFilters: new Map([
218+
[
219+
'optimizer',
220+
buildDiscreteFilter({
221+
filterValues: ['a', 'b', 'c'],
222+
}),
223+
],
224+
]),
225+
},
226+
})
227+
)
228+
);
229+
230+
expect(
231+
selectors.getHparamFilterMapFromExperimentIds(['foo'], false)(state)
232+
).toEqual(new Map([]));
233+
});
210234
});
211235

212236
describe('#getMetricFilterMap', () => {
@@ -326,7 +350,7 @@ describe('hparams/_redux/hparams_selectors_test', () => {
326350
});
327351

328352
describe('#getMetricFilterMapFromExperimentIds', () => {
329-
it('returns default metric filter map', () => {
353+
it('returns default metric filter map when includeDefaults is true', () => {
330354
const state = buildStateFromHparamsState(
331355
buildHparamsState(
332356
buildSpecs('foo', {
@@ -347,7 +371,7 @@ describe('hparams/_redux/hparams_selectors_test', () => {
347371
);
348372

349373
expect(
350-
selectors.getMetricFilterMapFromExperimentIds(['foo'])(state)
374+
selectors.getMetricFilterMapFromExperimentIds(['foo'], true)(state)
351375
).toEqual(
352376
new Map([
353377
[
@@ -441,4 +465,30 @@ describe('hparams/_redux/hparams_selectors_test', () => {
441465
).toEqual(new Map());
442466
});
443467
});
468+
469+
it('does not use default filters when includeDefaults is false', () => {
470+
const state = buildStateFromHparamsState(
471+
buildHparamsState(
472+
buildSpecs('foo', {
473+
metric: {
474+
specs: [buildMetricSpec({tag: 'acc'})],
475+
defaultFilters: new Map([
476+
[
477+
'acc',
478+
buildIntervalFilter({
479+
filterLowerValue: 0,
480+
filterUpperValue: 1,
481+
}),
482+
],
483+
]),
484+
},
485+
}),
486+
{}
487+
)
488+
);
489+
490+
expect(
491+
selectors.getMetricFilterMapFromExperimentIds(['foo'], false)(state)
492+
).toEqual(new Map());
493+
});
444494
});

0 commit comments

Comments
 (0)