Utilice nni para realizar nas (búsqueda de arquitectura de red neuronal)

El diseño actual del modelo de aprendizaje profundo es más complicado y un poco metafísico, sin embargo, ahora es posible buscar la arquitectura del modelo óptima al igual que los hiperparámetros, y así nació NAS.

Desde que tiene nni, nas se ha vuelto mucho más fácil, puede buscar directamente.

Sin embargo, actualmente solo admite búsqueda aleatoria y ppo (gracias a los grandes por corregir, esta declaración realmente no es rigurosa, nni admite muchos algoritmos nas, puede ver en los ejemplos en el código fuente, lo que quiero expresar es que classic_nas solo admite random y ppo).

Este artículo sobre nni habló sobre cómo instalar y usar la búsqueda de hiperparámetros.

 El siguiente ejemplo de nas demuestra una búsqueda aleatoria. Ppo se ejecuta durante mucho tiempo. Aquí, solo se muestra la búsqueda aleatoria. Ppo también es factible para pro-testing. Al igual que la búsqueda aleatoria, puede seguir el procedimiento a continuación.

Puede usarlo después de instalar nni y descargar el código fuente de GitHub de nni. El proceso de uso es el siguiente:

(1) Ingrese la ruta del ejemplo nas del código fuente nni

cd /opt/nni/examples/nas/classic_nas

(2) Al buscar por primera vez, debe escribir un comando para generar un archivo de espacio de búsqueda, aquí lo llamé ss.json

Porque, si observa detenidamente el archivo mnist.py, puede ver que se pueden seleccionar todas las convoluciones, lo que se deja a una selección y combinación aleatorias. Por lo tanto, debe buscar archivos espaciales. No desea buscar hiperparámetros. Configure los archivos usted mismo. Aquí necesita comandos. Para generar.

nnictl ss_gen --trial_command="python3 mnist.py" --trial_dir=./ --file=ss.json

Podemos echar un vistazo al resultado tras generación:

[root@localhost classic_nas]# cat ss.json 
{
  "first_conv": {
    "_type": "layer_choice",
    "_value": [
      "conv5x5",
      "conv3x3"
    ]
  },
  "mid_conv": {
    "_type": "layer_choice",
    "_value": [
      "0",
      "1"
    ]
  },
  "skip": {
    "_type": "input_choice",
    "_value": {
      "candidates": [
        "",
        ""
      ],
      "n_chosen": 1
    }
  }
}

(3) Edite config_random_search.yml y establezca la ruta específica de searchSpacePath:

vim config_random_search.yml
authorName: default
experimentName: example_mnist
trialConcurrency: 1
maxExecDuration: 1h
maxTrialNum: 10
#choice: local, remote, pai
trainingServicePlatform: local
#please use `nnictl ss_gen` to generate search space file first
searchSpacePath: ss.json
useAnnotation: False
tuner:
  codeDir: ../../tuners/random_nas_tuner
  classFileName: random_nas_tuner.py
  className: RandomNASTuner
trial:
  command: python3 mnist.py
  codeDir: .
  gpuNum: 0

(4) Ejecutar nas

nnictl create --config config_random_search.yml

Una vez que la operación sea exitosa, puede verla en la página web:

 Eche un vistazo a la estructura específica de aprendizaje profundo de las mejores puntuaciones:

 Como puede ver, la puntuación más alta aquí es que la primera capa convolucional usa un kernel de convolución de 5X5.

Ejecute los resultados de ppo:

Debido a que este espacio enumerable no es grande, converge directamente temprano y los resultados de los datos parecen inferiores a la búsqueda aleatoria.

 

Supongo que te gusta

Origin blog.csdn.net/zhou_438/article/details/113897478
Recomendado
Clasificación