Skip to content

Latest commit

 

History

History
55 lines (33 loc) · 2.42 KB

README.md

File metadata and controls

55 lines (33 loc) · 2.42 KB

Introduction

For good user experience and reduce user effort, we need to design a good annotation grammar.

If users use NNI system, they only need to:

  1. Annotation variable in code as:

    '''@nni.variable(nni.choice(2,3,5,7),name=self.conv_size)'''

  2. Annotation intermediate in code as:

    '''@nni.report_intermediate_result(test_acc)'''

  3. Annotation output in code as:

    '''@nni.report_final_result(test_acc)'''

  4. Annotation function_choice in code as:

    '''@nni.function_choice(max_pool(h_conv1, self.pool_size),avg_pool(h_conv1, self.pool_size),name=max_pool)'''

In this way, they can easily realize automatic tuning on NNI.

For @nni.variable, nni.choice is the type of search space and there are 10 types to express your search space as follows:

  1. @nni.variable(nni.choice(option1,option2,...,optionN),name=variable)
    Which means the variable value is one of the options, which should be a list The elements of options can themselves be stochastic expressions

  2. @nni.variable(nni.randint(upper),name=variable)
    Which means the variable value is a random integer in the range [0, upper).

  3. @nni.variable(nni.uniform(low, high),name=variable)
    Which means the variable value is a value uniformly between low and high.

  4. @nni.variable(nni.quniform(low, high, q),name=variable)
    Which means the variable value is a value like round(uniform(low, high) / q) * q

  5. @nni.variable(nni.loguniform(low, high),name=variable)
    Which means the variable value is a value drawn according to exp(uniform(low, high)) so that the logarithm of the return value is uniformly distributed.

  6. @nni.variable(nni.qloguniform(low, high, q),name=variable)
    Which means the variable value is a value like round(exp(uniform(low, high)) / q) * q

  7. @nni.variable(nni.normal(label, mu, sigma),name=variable)
    Which means the variable value is a real value that's normally-distributed with mean mu and standard deviation sigma.

  8. @nni.variable(nni.qnormal(label, mu, sigma, q),name=variable)
    Which means the variable value is a value like round(normal(mu, sigma) / q) * q

  9. @nni.variable(nni.lognormal(label, mu, sigma),name=variable)
    Which means the variable value is a value drawn according to exp(normal(mu, sigma))

  10. @nni.variable(nni.qlognormal(label, mu, sigma, q),name=variable)
    Which means the variable value is a value like round(exp(normal(mu, sigma)) / q) * q