Profunda aprender las mejores prácticas

  • Este primer número de artículo del público: RAIS , la bienvenida a la atención.

Las mejores prácticas, por definición, es la mejor manera de hacer algo, por supuesto, donde la gran mayoría de los casos debe ser el mejor, pero esto no es un cien por ciento, no tenemos a enredarse este problema, tenemos que recordar es la siguiente estos métodos son muy buenas prácticas de aprendizaje en la práctica de profundidad.

mecanismo de devolución de llamada

Si usted ve aquí, tengo razones para creer que sabe que es un programa diseñado para tener un poco de experiencia de desarrollo programadores entienden programación, en ese caso, que sin duda no son ajenos a la devolución de llamada, la devolución de llamada es similar a un tipo de patrón de diseño observador, yo pago le dan una tarea a realizar, voy a seguir a la cuenta para el fin de hacer su trabajo, y atropellado, sin importar el resultado es bueno o malo, lo que tienes que decirme los resultados, y este es el significado de la devolución de llamada.

En el caso de varias profundidades de nuestro estudio anterior, siempre hay un parámetro es épocas, lo que significa que el número de iteraciones del bucle del modelo de red, el principio del tiempo, nos dará un gran valor, por lo que el entrenamiento de la red y luego ajustar los parámetros, las épocas en el proceso de ajuste de los parámetros del modelo a ser en total para garantizar que el estado exceso de ajuste, la única manera que podemos saber en qué circunstancias la red óptima. En la mayoría de los ejemplos anteriores, es razonable también es posible debido a nuestra red entrenada con rapidez, no hay grandes conjuntos de datos con el caso no puede ser completado dentro de un tiempo aceptable, por lo que esto no afecta a nada, pero hay algunos excepciones, como la red neuronal recurrente se mencionó anteriormente, el tiempo de entrenamiento se puede hacer un poco impaciente, esto pone de manifiesto el problema, nos necesitan para resolver este problema.

Consideramos que los datos en el proceso de formación de encontrar dónde empezar montaje también, que el número de iteraciones del bucle vamos a preparar ese punto crítico, a la red re-tren, que las ideas para resolver el problema de la posibilidad de recurso, se puede cambiar a nuestra red de formación, su propia cuándo empezó a juzgar exceso de ajuste (o los datos no mostraron cambios significativos), y luego automáticamente parada, como es natural, la devolución de llamada es la mejor manera de hacer frente a este problema, y ​​ahora casi todo tipo de marco de aprendizaje profunda proporciona un método tal, específicamente cómo hacerlo? Todavía estábamos Keras ejemplo, aquí son tres ejemplos comunes, hay algunos matices diferentes marcos, por favor preste atención cuando se utiliza:

# 定义需要哪些 callback
callbacks_list = [
    # 当所监控的数据不再增长,停止训练
    keras.callbacks.EarlyStopping(
        monitor='acc',
        patience=1,
    ),
    # 每轮训练都进行一次模型参数的保存,
    # monitor 表示如果监控数据没有改善(自动推断,还可用 mode 参数控制),不进行保存
    # save_best_only=True 时:
    #   val_loss: 自动推断 min
    #   val_acc: 自动推断 max
    keras.callbacks.ModelCheckpoint(
        filepath='point_model.h5',
        monitor='val_loss',
        save_best_only=True,
    ),
    # 当评价的指标没有提升时,减小学习率
    keras.callbacks. ReduceLROnPlateau(
        monitor='val_loss' 
        factor=0.1,    # 减小 10 倍学习率,2 或者 10 倍是常用值
        patience=10,   # 10 次迭代没有改善
    )
    # 当然,还可以自定义一些,keras.callbacks.Callback 的子类
]
model.fit(callbacks = callbacks_list)

TensorBoard

Para TensorBoard, que Wen anterior red neuronal reconocimiento numeral manuscrita menciona en, cuando decimos que sabemos que un modelo de red entrenado, pero no sabemos específicamente cómo ejecutar la red, es necesario visualizar vista TensorBoard, puede navegador vista, similar a la siguiente:

imagen

imagen

El código para alcanzar casi el mismo que el anterior devolución de llamada:

from keras.callbacks.tensorboard_v2 import TensorBoard
callback_list = [
        keras.callbacks.TensorBoard(
            log_dir='./logs',
            histogram_freq=1,
            embeddings_freq=1,
        )
    ]
model.fit(train_images, train_labels, epochs=5, batch_size=128, callbacks=callback_list)
# shell 中:tensorboard --logdir=logs
# 浏览器:http://localhost:6006/

Creo que ahora fijamos en el contenido de la exportación de datos anterior, habrá una sensación diferente, no es un artículo dedicado TensorBoard, le sugiero que volver atrás y mirar, habrá diferentes. Por supuesto, hay un pequeño episodio, la última versión oficial de Keras y TensorFlow no es compatible con esta devolución de llamada se quejan, ya Fix, GitHub temas relevantes aquí: https://bit.ly/2QDtXqN , No. 20 de febrero de cambio, yo creo que la nueva versión se dará a conocer poco después de esta revisión.

A continuación, se discute cómo mejorar la profundidad de los contenidos de aprendizaje relacionada con el rendimiento.

El uso de patrones de diseño avanzado

patrón de diseño método es a menudo una de las mejores prácticas en la programación general, en la profundidad del aprendizaje, donde el patrón de diseño es algo diferente. Aquí incluye tres patrones de diseño: una conexión residual, y la profundidad de la convolución separable el lote de normalización.

conexión residual

imagen

Usando la anteriormente descrito método de programación funcional, la salida de la capa delantera como una formación de entrada detrás de algunas de las capas, y para resolver el problema representado por la desaparición de los cuellos de botella de gradiente.

la estandarización de lotes

La estandarización es una estandarización de lotes, la estandarización de los métodos anteriores que hemos visto es: Que todos los datos menos el valor promedio, y luego se divide por la desviación estándar, respectivamente, por lo que el valor promedio de cero y una desviación estándar de 1, no es pensar en la distribución normal estándar (el equipo se cura matemáticas), a la derecha, es el camino!

Método estándar aprobado se convolución red neuronal Durante el entrenamiento, cada capa de distribución de entrada sigue siendo el mismo, ¿cómo efecto es muy bueno, pero también un papel principio específico, hablaremos más tarde, pero sabemos la formación es significativamente más rápido proceso de convergencia se acelera de manera significativa, lo que aumenta el efecto de la clasificación, ya que la tasa de aprendizaje de menos exigentes, por lo que el ajuste de parámetros es también más fácil, en definitiva, es bien con eso.

Aquí debo señalar, especialmente para algunos de la red sea más profunda, la estandarización de lotes ayuda a la propagación del gradiente. Keras código correspondiente es BatchNormalization, después de convolución utilizado en una densa capa o capas, los códigos de oferta:

conv_model.add(layers.Conv2D(32, 3, activation='relu'))
conv_model.add(layers.BatchNormalization())
​
dense_model.add(layers.Dense(32, activation='relu'))
​dense_model.add(layers.BatchNormalization())

profundidad de convolución separable

la práctica Profundidad convolución separable (SeparableConv2D) la capa de entrada se realiza de convolución separado espacial, el punto de convolución por punto y luego mezclar el canal de salida, puede ser reemplazado en algunos casos capa Conv2D, ya que su argumento menos, el punto más flotante pequeña, y por lo tanto tiene una mayor eficiencia, es un modelo ligero.

imagen

El siguiente es un ejemplo de código de clasificación de imágenes:

model = Sequential()
model.add(layers.SeparableConv2D(32, 3, activation='relu', input_shape=(64, 64, 3,)))
model.add(layers.SeparableConv2D(64, 3, activation='relu'))
model.add(layers.MaxPooling2D(2))
model.add(layers.SeparableConv2D(64, 3, activation='relu'))
model.add(layers.SeparableConv2D(128, 3, activation='relu'))
model.add(layers.MaxPooling2D(2))
model.add(layers.SeparableConv2D(64, 3, activation='relu'))
model.add(layers.SeparableConv2D(128, 3, activation='relu'))
# 极大的减少运算量
model.add(layers.GlobalAveragePooling2D())
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

Ultra optimización de parámetros

Hemos construido un modelo de red cuando las decisiones se hacen a menudo asiento de sus pantalones: apilar varias capas, lo que con la función de activación, la necesidad de normalización de lotes, etc. Estos parámetros, llamados parámetros de Super. Por lo general, llamamos parámetro se refiere al proceso de formación de la red, los nodos internos de los parámetros del modelo, y este parámetro no importa.

Sabemos ajuste de parámetros demasiado complejo es demasiado grande, y por lo tanto nosotros los humanos hacen uso de la máquina para ajustar las señales de retroalimentación, como base para la regulación, ese mismo, este parámetro Ultra es también no lo consideran de acuerdo a las máquinas, después de todo, el programador hacer tal cosa, los programadores escriben código que permitirá automatizar la realización de este trabajo. Así que la conclusión es que, en cualquier caso, la máquina que hay que hacer.

Sin embargo, este método de optimización de parámetros no son particularmente buenos especialmente bueno enfoque unificado, el proceso es generalmente leer (o generada automáticamente) un conjunto de parámetros para construir y entrenar el modelo, salvo los resultados, con el otro conjunto de parámetros de nuevo modelo de formación, cuyo resultado es mejor, dejar un buen resultado, por lo que repetir, un cierto grado de tiempo para obtener el último argumento de que es el mejor argumento. Tenga en cuenta que este parámetro es en realidad super-regulador para verificar el conjunto de entrenamiento, pero también se considera apropiado que esto requiere atención.

Por supuesto, este método de ajuste de parámetros durante un determinado algoritmo es un algoritmo de optimización típico bayesiano puede no ser eficaz, la situación es demasiado complicado, esto es sólo una manera, esto es un gran problema, hablaremos más tarde.

modelo de Integración

Para abordar esta cuestión, son efectivas para la competición o la producción de medio ambiente, papel limitado en el estudio de investigación, cabe señalar. Lo que se llama el modelo integrado, es decir, tengo el mismo conjunto de datos, métodos de entrenamiento con diferentes modelos de red, los resultados son bastante buenos, para combinar su ponderación, lo que resulta resultado que cada uno de los cuales puede mejor.

¿Cómo se explica esto? A modo de ejemplo no tan precisa, la clasificación de la imagen, y algunos modelos están más preocupados por las líneas, algún modelo se centra en el color, que ponen en común sus modelo sobre el enfoque y la atención al color de las líneas, por lo que el resultado final será mejor , en otras palabras, es centrarse en diferentes aspectos de los diferentes modelos de datos, más completo análisis tridimensional de los datos, por supuesto, el efecto resultante es mejor. Por supuesto, esto también requiere el modelo integrado también son buenos, de lo contrario no es entonces un problema, va a desperdiciar este modelo integrado, que es bien conocida.

resumen

El aprendizaje profundo es un gran problema, la mejor práctica no tiene tanto, aquí hay una alta probabilidad de que maduren y métodos eficaces, todavía inmaduros algunos métodos en fase de desarrollo, pero todos los detalles han sido el centro del proceso de formación de redes neuronales en difícil de decir, de manera que sólo es válido es el mejor, maduro inmaduros son dignos de discusión en este documento, esto tiene que terminar aquí.

  • Este primer número de artículo del público: RAIS , la bienvenida a la atención.

Supongo que te gusta

Origin www.cnblogs.com/renyuzhuo/p/12547422.html
Recomendado
Clasificación