AnnotationSpec.md 2.82 KB
Newer Older
Scarlett Li's avatar
Scarlett Li committed
1
# NNI Annotation 
Scarlett Li's avatar
Scarlett Li committed
2
3


Yan Ni's avatar
Yan Ni committed
4
## Overview
Scarlett Li's avatar
Scarlett Li committed
5

Yan Ni's avatar
Yan Ni committed
6
To improve user experience and reduce user effort, we design an annotation grammar. Using NNI annotation, users can adapt their code to NNI just by adding some standalone annotating strings, which does not affect the execution of the original code. 
chicm-ms's avatar
chicm-ms committed
7

Yan Ni's avatar
Yan Ni committed
8
Below is an example:
Scarlett Li's avatar
Scarlett Li committed
9

Yan Ni's avatar
Yan Ni committed
10
11
12
13
14
```python
'''@nni.variable(nni.choice(0.1, 0.01, 0.001), name=learning_rate)'''
learning_rate = 0.1
```
The meaning of this example is that NNI will choose one of several values (0.1, 0.01, 0.001) to assign to the learning_rate variable. Specifically, this first line is an NNI annotation, which is a single string. Following is an assignment statement. What nni does here is to replace the right value of this assignment statement according to the information provided by the annotation line.
Scarlett Li's avatar
Scarlett Li committed
15
16


Yan Ni's avatar
Yan Ni committed
17
In this way, users could either run the python code directly or launch NNI to tune hyper-parameter in this code, without changing any codes.
Scarlett Li's avatar
Scarlett Li committed
18

Yan Ni's avatar
Yan Ni committed
19
## Types of Annotation:
Scarlett Li's avatar
Scarlett Li committed
20

Yan Ni's avatar
Yan Ni committed
21
In NNI, there are mainly four types of annotation:
Scarlett Li's avatar
Scarlett Li committed
22
23


Yan Ni's avatar
Yan Ni committed
24
### 1. Annotate variables
Scarlett Li's avatar
Scarlett Li committed
25

Yan Ni's avatar
Yan Ni committed
26
   `'''@nni.variable(sampling_algo, name)'''`
Scarlett Li's avatar
Scarlett Li committed
27

Yan Ni's avatar
Yan Ni committed
28
`@nni.variable` is used in NNI to annotate a variable.
Scarlett Li's avatar
Scarlett Li committed
29

Yan Ni's avatar
Yan Ni committed
30
**Arguments**
Scarlett Li's avatar
Scarlett Li committed
31

Yan Ni's avatar
Yan Ni committed
32
33
- **sampling_algo**: Sampling algorithm that specifies a search space. User should replace it with a built-in NNI sampling function whose name consists of an `nni.` identification and a search space type specified in [SearchSpaceSpec](SearchSpaceSpec.md) such as `choice` or `uniform`. 
- **name**: The name of the variable that the selected value will be assigned to. Note that this argument should be the same as the left value of the following assignment statement.
Scarlett Li's avatar
Scarlett Li committed
34

Yan Ni's avatar
Yan Ni committed
35
An example here is:
Scarlett Li's avatar
Scarlett Li committed
36

Yan Ni's avatar
Yan Ni committed
37
38
39
40
```python
'''@nni.variable(nni.choice(0.1, 0.01, 0.001), name=learning_rate)'''
learning_rate = 0.1
```
Scarlett Li's avatar
Scarlett Li committed
41

Yan Ni's avatar
Yan Ni committed
42
### 2. Annotate functions
Scarlett Li's avatar
Scarlett Li committed
43

Yan Ni's avatar
Yan Ni committed
44
   `'''@nni.function_choice(*functions, name)'''`
Scarlett Li's avatar
Scarlett Li committed
45

Yan Ni's avatar
Yan Ni committed
46
`@nni.function_choice` is used to choose one from several functions.
Scarlett Li's avatar
Scarlett Li committed
47

Yan Ni's avatar
Yan Ni committed
48
**Arguments**
Scarlett Li's avatar
Scarlett Li committed
49

Yan Ni's avatar
Yan Ni committed
50
51
- **\*functions**: Several functions that are waiting to be selected from. Note that it should be a complete function call with arguments. Such as `max_pool(hidden_layer, pool_size)`.
- **name**: The name of the function that will be replaced in the following assignment statement.
Scarlett Li's avatar
Scarlett Li committed
52

Yan Ni's avatar
Yan Ni committed
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
An example here is:

```python
"""@nni.function_choice(max_pool(hidden_layer, pool_size), avg_pool(hidden_layer, pool_size), name=max_pool)"""
h_pooling = max_pool(hidden_layer, pool_size)
```

### 3. Annotate intermediate result

   `'''@nni.report_intermediate_result(metrics)'''`

`@nni.report_intermediate_result` is used to report intermediate result, whose usage is the same as `nni.report_intermediate_result` in [Trials.md](Trials.md)

### 4. Annotate final result

   `'''@nni.report_final_result(metrics)'''`

`@nni.report_final_result` is used to report the final result of the current trial, whose usage is the same as `nni.report_final_result` in [Trials.md](Trials.md)