¿Cuál es el concepto y cómo se calculan los valores de cuello de botella? ¿Cómo ayudan estos valores a la clasificación de imágenes? Por favor explique en palabras simples.
fuente
¿Cuál es el concepto y cómo se calculan los valores de cuello de botella? ¿Cómo ayudan estos valores a la clasificación de imágenes? Por favor explique en palabras simples.
El cuello de botella en una red neuronal es solo una capa con menos neuronas que la capa por debajo o por encima de ella. Tener una capa de este tipo alienta a la red a comprimir las representaciones de características para que se ajusten mejor al espacio disponible, con el fin de obtener la mejor pérdida durante el entrenamiento.
En una CNN (como la red de inicio de Google), se agregan capas de cuello de botella para reducir la cantidad de mapas de características (también conocidos como "canales") en la red, que de lo contrario tienden a aumentar en cada capa. Esto se logra mediante el uso de convoluciones 1x1 con menos canales de salida que los canales de entrada.
Por lo general, no calcula los pesos para las capas de cuello de botella directamente, el proceso de capacitación se encarga de eso, como para todos los demás pesos. Seleccionar un buen tamaño para una capa de cuello de botella es algo que debe adivinar, y luego experimentar, para encontrar arquitecturas de red que funcionen bien. El objetivo aquí generalmente es encontrar una red que se generalice bien a las nuevas imágenes, y las capas de cuello de botella ayudan a reducir la cantidad de parámetros en la red y al mismo tiempo permiten que sea profunda y represente muchos mapas de características.
Imagine que desea volver a calcular la última capa de un modelo previamente entrenado:
Input->[Freezed-Layers]->[Last-Layer-To-Re-Compute]->Output
Para entrenar [Última capa para volver a calcular ] , debe evaluar las salidas de [Capas congeladas] varias veces para un dato de entrada dado. Para ahorrar tiempo, puede calcular estas salidas solo una vez .
Input#1->[Freezed-Layers]->Bottleneck-Features-Of-Input#1
Luego, almacena todas las características de cuellos de botella de entrada # i y las usa directamente para entrenar [última capa para volver a calcular].
Explicaciones de la función "cache_bottlenecks" del ejemplo "image_retraining":
Debido a que es probable que leamos la misma imagen varias veces (si no hay distorsiones aplicadas durante el entrenamiento) puede acelerar mucho las cosas si calculamos los valores de la capa de cuello de botella una vez para cada imagen durante el preprocesamiento, y luego simplemente leemos esos valores almacenados en caché repetidamente durante el entrenamiento.
El cuello de botella de Tensorflow es la última fase previa al proceso previo al comienzo del entrenamiento real con reconocimiento de datos. Es una fase en la que se forma una estructura de datos a partir de cada imagen de entrenamiento en la que puede tener lugar la fase final del entrenamiento y distinguir la imagen de cualquier otra imagen utilizada en el material de entrenamiento. Algo así como una huella digital de la imagen.
Está involucrado en el comando de reentrenamiento y, como su nombre lo indica, este es el consumidor principal de la ejecución del comando. La cantidad de material de capacitación puede verse comprometida si este cuello de botella parece demasiado lento.
Como es un comando de línea de comando, no sé el algoritmo exacto. El algoritmo es público en código en Github pero supuestamente es tan complicado (el tiempo de ejecución es muy largo por definición) que creo que no puedo simplemente escribirlo en este tipo de respuesta.