¿Cómo aprender código TensorFlow de manera eficiente?
¿Cómo aprender código TensorFlow de manera eficiente?
2017-03-29
Categoría:
TensorFlow
Actualmente, el código de TensorFlow ha superado las 400.000 líneas, a juzgar por la cantidad de código, este no es de ninguna manera un proyecto pequeño que pueda iniciarse rápidamente. Por lo tanto, los estudiantes que deseen dominar TensorFlow deben estar preparados mentalmente.
Para aquellos que quieran aprender TensorFlow (en lo sucesivo, TF), se pueden dividir simplemente en las dos categorías siguientes según diferentes propósitos: 1. Los investigadores académicos solo necesitan TF como plataforma para implementar en profundidad. aprende algoritmos y no necesita comprender Demasiados principios subyacentes 2. Aquellos que tienen una buena educación en la industria (como yo ⊙﹏⊙) no solo deben comprender el modelo de algoritmo, sino también estar familiarizados con la plataforma TF. La plataforma TF es una plataforma de aprendizaje profundo muy poderosa y eficiente. Personas que realizan desarrollo secundario de la plataforma en términos de potencia informática, comunicación, optimización de modelos, etc. Investigadores: pueden considerar usar Keras, que es una biblioteca de redes neuronales profundas escrita en Python. Ha implementado la mayoría de las redes neuronales, como RNN, GRU, LSTM, CNN, Pooling, Full-Connected y varias funciones de activación. como sigmoide, tanh, Relu, PRelu, SRelu, etc. Utiliza TF/Theano como motor informático de back-end y tiene una API de nivel superior que puede ejecutarse en la plataforma TF/Theano al mismo tiempo. En comparación con TF, la presión de aprendizaje es mucho menor. Nuestros colegas a cargo de los algoritmos también usan Keras para escribir modelos, y luego yo uso la API de TF para implementar la implementación distribuida. Adjunto:
Desarrolladores: para personas como nosotros, primero debemos comprender muchos nombres, conceptos y definiciones de la plataforma @Jia Yangqing dijo que TF tiene demasiadas abstracciones para aprender. Es cierto que esto dificulta nuestro aprendizaje. Pero esto también muestra que Google quiere hacer que esta plataforma sea más grande y más fuerte, por lo que dedica tiempo a diseñar este marco y estructura unificada. Especialmente después de leer parte del código fuente, me siento así. Entonces, ¿cómo empezar? Geek Academy ha traducido algunos de los documentos oficiales de TF, lo que resulta útil para una comprensión preliminar de conceptos como tensor, DAG, operador, variable, dispositivo, optimizador, etc. Después de comprender estos conceptos, también hay un programa de ejemplo MNIST como introducción a TF. Este ejemplo implementa una red neuronal para el reconocimiento de dígitos escritos a mano utilizando un Softmax simple con una sola capa de parámetros. Además, se introducen conceptos importantes como sesiones, tf.placeholder y cálculo de gráficos. Después de leer este ejemplo, si comprende DAG y Session, puede continuar aprendiendo MNIST implementado utilizando redes neuronales convolucionales. Su precisión aumenta a 99, que está cerca de la precisión existente en comparación con la precisión de aproximadamente 92 de Softmax de una sola capa. la tasa de precisión más alta.
TF v0.8 lanzó el modelo distribuido. He estado investigando durante casi 1 mes para convertir la traducción automática Seq2seq al modelo distribuido, pero ahora la compañía no permite el lanzamiento de ORZ. La buena noticia es que reescribí el programa distribuido MNIST de la comunidad y lo fusioné en la rama master. Entonces, si quieres seguir aprendiendo distribuido, te sugiero que le eches un vistazo a ese código. Desafortunadamente, Geek Academy actualmente no tiene tutoriales sobre cómo traducir la distribución, por lo que tendrás que ir al sitio web de TF (que parece estar en cuarentena).
Dado que hay menos información sobre la versión de lanzamiento, ordenaré brevemente los conceptos aquí. Verá sus definiciones en el sitio web oficial: TF usa la estructura de PS/Worker para definir el clúster, donde PS (servidor de parámetros): almacenamiento. variables (parámetros del modelo), principalmente responsable de actualizar y publicar parámetros Trabajador: operador de almacenamiento, principalmente responsable del cálculo del gráfico y del gradiente (parámetros del modelo); Trabajador: operación de almacenamiento El procesador es el principal responsable del cálculo del gráfico y del cálculo del gradiente (parámetros del modelo). Trabajador: operador de almacenamiento, principal responsable del cálculo del gráfico y el cálculo del gradiente (TF usa Optimizer para implementar el cálculo del gradiente automático: debido a los diferentes tipos de trabajo, use job_name para distinguir ps y la tarea del trabajador: para cada trabajador, tareas específicas (qué gráficos); se calculan) Puede ser diferente, use task_index para distinguir el dispositivo: se refiere a la CPU / GPU específica, generalmente PS está vinculado a la CPU y el trabajador está vinculado a la GPU: el optimizador de sincronización, su esencia sigue siendo usar el Optimizador ordinario para el cálculo de gradiente, pero a través del mecanismo de cola (Cola) y La cooperación multiproceso del coordinador realiza la agregación de gradiente y el promedio de todos los trabajadores, y finalmente transmite el gradiente de regreso a PS para la actualización de parámetros. Los conceptos anteriores son muy importantes para comprender la distribución. Por supuesto, para comprenderlo completamente, debes seguir leyendo la documentación y el código fuente. Para el código fuente, recomiendo varias definiciones de clases básicas en el directorio de Python que vale la pena ver: framework/Ops.py: define Tensor, Graph, Operador y otras clases. Ops/Variables.py: Definir clases de variables