google-research / nasbench

NASBench: A Neural Architecture Search Dataset and Benchmark
Apache License 2.0
682 stars 129 forks source link

Is there a way to query the best network architecture and accuracy #4

Closed linnanwang closed 5 years ago

linnanwang commented 5 years ago

Hello,

This will be an improvement. Could you please suggest the simplest way to query the best model architecture and its accuracy? Thank you.

chrisying commented 5 years ago

Hi linnanwang,

There are multiple ways to define the "best model architecture" (e.g. highest validation, highest test, mean validation, mean test, etc...). Here's how I would find the best model using any of these metrics:

best_metric = -1        # higher = better
best_cell = None
for h in nasbench.hash_iterator():
  fixed, computed = nasbench.get_metrics_from_hash(h)
  metric = your_metric_function(computed)   # e.g. average test accuracy
  if metric > best_metric:
    best_metric = metric
    best_cell = (fixed['module_adjacency'], fixed['module_operations'])

best_spec = api.ModelSpec(best_cell[0], best_cell[1])

This should only take a few seconds (or a minute or so) to run.

For your reference, the best spec according to MEAN TEST ACCURACY is:

best_spec = api.ModelSpec([[0, 1, 1, 0, 0, 1, 1],
                           [0, 0, 0, 0, 0, 1, 0],
                           [0, 0, 0, 1, 0, 0, 0],
                           [0, 0, 0, 0, 1, 0, 0],
                           [0, 0, 0, 0, 0, 1, 0],
                           [0, 0, 0, 0, 0, 0, 1],
                           [0, 0, 0, 0, 0, 0, 0]],
                           [u'input', u'conv1x1-bn-relu', u'conv3x3-bn-relu',
                            u'maxpool3x3', u'conv3x3-bn-relu',
                            u'conv3x3-bn-relu', u'output'])

EDIT: correction to best_spec