Comencemos con la inferencia, por ejemplo, reconocimiento de imagen o detección de objetos. Muchos de los marcos actuales se han escrito para capacitación, por lo que hay varias formas de mejorar su eficiencia mediante la creación de una versión optimizada para la inferencia. Por ejemplo, cuando el convnet está entrenado, debe mantener la salida de cada capa en paso hacia adelante para propagación hacia atrás. Por inferencia, no necesitamos esto, por lo que podemos sobrescribir las salidas de capas anteriores y reutilizar buffers, y reducir significativamente la huella de memoria. También podemos fusionar muchas capas (por ejemplo, capa convolucional, agrupación y relu) para mejorar la latencia y reducir el ancho de banda a DRAM. A continuación, podemos usar matemática de baja precisión para la inferencia, por ejemplo, medio flotador (como en Nvidia GPU Inference Engine) o súper corto int (8 bits), pero esto puede ser un poco más complicado ya que su red debería reescalar dinámicamente las salidas a manténgalos en un rango numérico muy estrecho.
También puede comprimir la red durante el entrenamiento (por ejemplo, Han, … Comprimiendo redes neuronales profundas e Iandola, … Squeezenet) o binarizar sus pesos (por ejemplo, en Rastegari, … XNOR-Nets).
Si su aplicación móvil necesita el paso hacia atrás (p. Ej., Transformación de fotos en cuadros como arte profundo), entonces todavía puede usar algunos de estos trucos (matemática de baja precisión, compresión, …)
- ¿Cuál es una buena definición de big data?
- Cómo explicar el desempeño de un modelo predictivo a la gerencia que no conoce el aprendizaje automático
- ¿Cómo se usa el aprendizaje automático en la ciencia de los materiales?
- ¿Por qué necesitamos barajar entradas para el descenso de gradiente estocástico?
- ¿Cuáles son algunas aplicaciones del aprendizaje semi-supervisado?
Por cierto, hay una serie de marcos que ya se han portado para Android e iOS: por ejemplo MXnet – dmlc / mxnet, Tensorflow – tensorflow / tensorflow, Torch soumith / torch-android, etc.)