[Notas] hoyo marco de aprendizaje profundidad del dibujo privada Keras recordar

Dirección original: https://cloud.tencent.com/developer/article/1437999

Keras escrito en Python es una API de red neuronal de alto nivel, que puede TensorFlow, CNTK o Teano ejecución como el extremo posterior. enfoque en el desarrollo de Keras es apoyar la prueba rápida. Con un mínimo de tiempo para convertir sus ideas en resultados, es la clave para una buena investigación. Soy un gran fan de Keras, probablemente porque es tan fácil de usar, y la cantidad de código que no tienen sus propias ideas puedan realizarse plenamente, sino en el uso del proceso o conocido a un montón de pozos, hicimos una resumida, para su referencia.

Keras compatible con la versión de Python: Python 2.7 a 3.6.

Ver el detalle del tutorial Keras documento oficial chino: http: //keras-cn.readthedocs.io/en/latest/

1, pérdida de producción Keras, val cómo éstos se guardan en un ir de texto:

Keras ajuste en función Historia devuelve un objeto, esos valores antes de su propiedad History.history ahorrarán todo el interior, si hay conjunto de validación, también incluye estos indicadores conjunto de validación cambio, la redacción específica:

hist=model.fit(train_set_x,train_set_y,batch_size=256,shuffle=True,nb_epoch=nb_epoch,validation_split=0.1)
with open('log_sgd_big_32.txt','w') as f:
    f.write(str(hist.history))

Creo que antes de guardar la pérdida, Val estos valores es muy importante proceso de ajuste de parámetros, después de la pérdida en el a veces todavía se necesita antes de que los resultados como una referencia, especialmente si agregarse algunos casos su pérdida, pero esto el texto hará que el texto completo del nombre era caótica, de hecho puede considerar enchufe Aetros, Aetros URL, que se basa en Keras de una herramienta de gestión que puede visualizar la configuración de red, visualización de resultados de convolución media y Guardar Todo lo que siempre racha de resultados, sigue siendo muy conveniente, es algo inestable, a veces colapsar. . .

objeto de historial contiene dos atributos importantes:

época: el número de rondas de formación

Historia: Es un diccionario que contiene val_loss, val_acc, pérdida, según cuatro llave.

2, en la capacitación conjuntos conjunto, validación y pruebas:

De hecho, al principio yo no entendía este problema, se llevó el equipo de prueba utilizado cuando el conjunto de validación, de hecho, se centró en el conjunto de validación se extrae de su propio personal para el ajuste de parámetros, y el equipo de prueba y el conjunto de entrenamiento es disjunta para las pruebas el efecto de los parámetros seleccionados para el modelo, y esto no es un error. . . En Keras, la verificación, siempre que el validation_split función de ajuste dispuesto en el valor dividido se establece como esto corresponde a un conjunto de entrenamiento de los datos tomados como un pequeño tanto por ciento del conjunto de validación. Pero debido aleatoria se realiza después de la _split validación, por lo que si no se empieza conjunto de entrenamiento aleatoria, es posible hacer la validación del conjunto de todas las muestras negativas. Prueba de uso establece el tiempo suficiente para establecer la función de evaluar el interior.

imprimir model.evaluate (test_set_x, test_set_y, batch_size = 256)

Tenga en cuenta aquí que el batch_size predeterminado evaluar en forma y función son 32, recuerde sus propias modificaciones.

resumen:

conjunto de validación es cuando los parámetros de ajuste por validation_split se dividieron de la formación que figuran;

Montaje de ensayo para evaluar la necesidad de un uso especializado para la evaluación.

3, el problema de la tasa de los métodos de optimización de aprendizaje utiliza para ajustar

Que siempre empezar método de optimización maraña fácil de usar, pero la mejor manera es tratar de no difícil de encontrar después de numerosos intentos, esta no adaptativos tasa de aprendizaje SGD métodos de optimización para ajustar la velocidad de aprendizaje y el método de inicialización harán los resultados son muy diferentes, pero debido a la convergencia muy desagradable, la sensación general no es muy conveniente, creo que las razones han estado utilizando Sgd antes de la mano, porque no hay muchos métodos de optimización, seguido de SGD puede tener un resultado tan bueno para mostrar que la red el más maravilloso. Otros resultados Adam, ADADE, RMSprop son similares, Nadam impulso Adam porque se añade a la versión en el efecto de convergencia será mejor. Así que si está satisfecho con los resultados, a continuación, poner estos métodos que cambiar con él de nuevo.

(1) Método A : tasa de aprendizaje consigue ajustando LearningRateScheduler

Hay una gran cantidad de personas estarán principiantes curiosos cómo hacer cambios dinámicos SGD tasa de aprendizaje, de hecho, Keras, hay una función llamada retroalimentación LearningRateScheduler, uso específico de la siguiente manera:

def step_decay(epoch):
    initial_lrate = 0.01
    drop = 0.5
    epochs_drop = 10.0
    lrate = initial_lrate * math.pow(drop,math.floor((1+epoch)/epochs_drop))
    return lrate
lrate = LearningRateScheduler(step_decay)
sgd = SGD(lr=0.0, momentum=0.9, decay=0.0, nesterov=False)
model.fit(train_set_x, train_set_y, validation_split=0.1, nb_epoch=200, batch_size=256, callbacks=[lrate])

El código anterior es disminuir el índice de tipo de aprendizaje, específicamente como:

 

(2) La segunda manera: La forma más directa para ajustar la velocidad de aprendizaje

Por supuesto, los parámetros se pueden modificar directamente en la declaración de la función SGD modificar directamente la tasa de aprendizaje, el aprendizaje de los cambios de velocidad como se muestra a continuación:

sgd = SGD(lr=learning_rate, decay=learning_rate/nb_epoch, momentum=0.9, nesterov=True)

En concreto, consulte el artículo Mediante la planificación de tasa de aprendizaje para los modelos de aprendizaje profundo en Python con Keras

Además, hay una manera de aprender a ajustar las tasas de interés, es decir,

(3) Método III: el ajuste de la tasa de aprendizaje por ReduceLROnPlateau

keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10, verbose=0, mode='auto', epsilon=0.0001, cooldown=0, min_lr=0)

Cuando la evaluación no se mejora, la reducción de la tasa de aprendizaje. Cuando el aprendizaje estancada, la reducción de 2 veces o 10 veces la tasa de aprendizaje a menudo puede obtener mejores resultados. La función de devolución de llamada detecta los indicadores de situación, si no es una época rendimiento del modelo se ve en la paciencia, la disminución de la tasa de aprendizaje

parámetros

Monitor: la cantidad a ser monitoreado

Factor: factor de tasa de aprendizaje es disminuido, la tasa de aprendizaje lr lr = * Factor formará se reduce

paciencia: paciencia cuando una época y el rendimiento pasado no mejora el modelo, lo que reduce la acción tasa de aprendizaje se activará

Modo: 'auto', 'min', uno de 'max', en el modo de minutos, si se activa el valor detectado de la reducción de la tasa de aprendizaje. En el modo máximo, cuando el valor detectado ya no se incrementa para reducir la tasa de aprendizaje se activa.

epsilon: un umbral para la determinación de "Plain Area" si para entrar en el valor de detección

Recarga: Después de aprender reducción de la tasa, pasará a través de un tiempo de reutilización antes de la operación normal de la re-época

min_lr: El límite inferior de la tasa de aprendizaje

Los ejemplos de código son los siguientes:

from keras.callbacks import ReduceLROnPlateau

reduce_lr = ReduceLROnPlateau(monitor='val_loss', patience=10, mode='auto')

model.fit(train_x, train_y, batch_size=32, epochs=5, validation_split=0.1, callbacks=[reduce_lr])

4, la forma de hacer frente a más de la memoria de un conjunto de datos con Keras?

Puede utilizar model.train_on_batch (x, y) y model.test_on_batch (x, y) el entrenamiento por lotes y pruebas. Véase la documentación del modelo.

O bien, puede escribir un lote generar datos de entrenamiento generador, a continuación, el uso

model.fit_generator (data_generator, steps_per_epoch, épocas) 方法.

5, la capa Batchnormalization dispuesta pregunta:

capa de BN es realmente colgado, solo artefacto, además de la red establecerá un tiempo y cada época extender el tiempo un poco fuera, pero en este tema he visto numerosas reclamaciones por convolución y la capa agrupada del método de liberación, dicha poner el centro, pero también dijo que la capa posterior de la piscina para el nivel de deserción, no es que en la parte posterior de la misma, se dice que hay ser colocado en frente de ella, este problema, sigo tratando de decir! A pesar de problemas. . . Pero no tenía que una ingeniería parcial DL-disciplinar de la misma. . . Otro punto a destacar, es la BN parámetros de la capa del problema, no me di cuenta un principio, un vistazo de cerca a la capa de BN parámetro:

keras.layers.normalization.BatchNormalization(epsilon=1e-06, mode=0, axis=-1, momentum=0.9, weights=None, beta_init='zero', gamma_init='one')
  • modo: entero que especifica el patrón normalizado, 0 o 1 0: se caracteriza por estandarizada, diversas características de una entrada se normalizará independientemente. Normalización eje especificado por el parámetro de eje. Tenga en cuenta que, si la entrada es de la forma (muestras, canales, filas cols) Imagen 4D tensor, debe ser proporcionado para la normalización del eje 1, es decir, a lo largo de la normalización eje del canal. El formato de entrada es 'tf' empatía. 1: normalizado a la muestra, el modo de entrada predeterminado es un 2D

La mayoría de nosotros estamos acostumbrados mode = 0 se caracteriza por la normalización, la cantidad de convolución 4D y se coloca entre las hojas de o después de la piscina, necesidad de ajustar eje = 1, la capa de BN después de capa densa directamente utilizando el valor predeterminado es Está bien.

6, cuando el conjunto de validación de error ya no está disminuyendo, la forma de la formación de interrupción?

Puede utilizar EarlyStopping devolución de llamada:

from keras.callbacks import EarlyStopping
early_stopping = EarlyStopping(monitor='val_loss', patience=2)
model.fit(x, y, validation_split=0.2, callbacks=[early_stopping])

Resumen: mágico sobre los parámetros de devoluciones de llamada

(1) la pérdida de consulta después de cada época y acc

(2) Tasa de aprendizaje logrado por la atenuación o la costumbre LearningRateScheduler descomposición tasa de aprendizaje

(3) implementar la capacitación interrumpido por EarlyStopping

(4) También podemos definir su propia función de devolución de llamada, la función de devolución de llamada es, de hecho, después de completar la formación de cada época que queremos operar a lograr.

7. ¿Cómo "congelación" de la capa de red?

"Congelar" una capa destinada a ser excluido de la formación que su peso no será actualizado. Este modelo de ajuste o el uso fijo vector plazo es útil para la introducción de texto. Hay dos maneras:

Una forma de: hacer pasar un parámetro de configuración de la capa de tipo bool entrenable en el momento, como sigue:

frozen_layer = Dense(32, trainable=False)

Puede entrenable parámetro (booleano) pasado al constructor de una capa, la capa se proporciona a la no formación:

Segunda forma: por propiedades de la capa de objetos entrenable al conjunto, como sigue:

x = Input(shape=(32,))
layer = Dense(32)  #构造一个层
layer.trainable = False  #设置层的trainable属性
y = layer(x)

Nota: después de la creación de instancias será entrenable propiedad de capa de red a Verdadero o Falso. Con el fin de que entre en vigor, después de modificar atributos entrenables, compilación llamada () en el modelo. Y recompilar el modelo.

 

8. ¿Cómo se elimina una capa del modelo secuencial?

Puede .pop () para eliminar el modelo secuencial capa adicional llamando a la última modelo:

model = Sequential()
model.add(Dense(32, activation='relu', input_dim=784))
model.add(Dense(32, activation='relu'))

print(len(model.layers))  # "2"

model.pop()
print(len(model.layers))  # "1"

resumen

Siendo este el primero en escribir tanto, hay algunas dudas de sus propios cumplido algunas cuestiones se incluyen en los documentos oficiales, es probable que se sienta el pozo minero local, seguidos si las dificultades encontradas en el proceso de re-uso Keras, voluntad que complementarse.

Publicado tres artículos originales · ganado elogios 0 · Vistas 534

Supongo que te gusta

Origin blog.csdn.net/yiyayiya557/article/details/104900838
Recomendado
Clasificación