Saltar al contenido

¿Cuál es la definición de un parámetro no entrenable?

Posterior a investigar con expertos en esta materia, programadores de diversas áreas y maestros dimos con la solución a la interrogande y la compartimos en este post.

Solución:

En keras, no entrenable parámetros (como se muestra en model.summary()) significa el número de pesos que no se actualizan durante el entrenamiento con retropropagación.

Existen principalmente dos tipos de pesas no entrenables:

  • Los que has elegido mantener constantes a la hora de entrenar. Esto significa que keras no actualizará estos pesos durante el entrenamiento en absoluto.
  • Los que funcionan como estadísticas en capas de BatchNormalization. Están actualizados con media y varianza, pero no están “entrenados con propagación hacia atrás”.

Los pesos son los valores dentro de la red que realizan las operaciones y se pueden ajustar para dar como resultado lo que queremos. El algoritmo de retropropagación cambia los pesos hacia un error más bajo al final.

De forma predeterminada, todos los pesos en un modelo de keras se pueden entrenar.

Cuando crea capas, internamente crea sus propios pesos y son entrenables. (El algoritmo de retropropagación actualizará estos pesos)

Cuando los haga intransitables, el algoritmo ya no actualizará estos pesos. Esto es útil, por ejemplo, cuando desea una capa convolucional con un filtro específico, como un filtro Sobel, por ejemplo. No desea que el entrenamiento cambie esta operación, por lo que estos pesos / filtros deben mantenerse constantes.

Hay muchas otras razones por las que es posible que desee hacer que las pesas sean intransitables.


Cambio de parámetros:

Para decidir si se pueden entrenar pesos o no, se toman capas del modelo y se establecen trainable:

model.get_layer(layerName).trainable = False #or True

Esto debe hacerse antes de la compilación.

Los parámetros no entrenables son un tema bastante amplio. Un ejemplo sencillo es considerar el caso de cualquier modelo NN específico y su arquitectura.

Digamos que ya hemos configurado la definición de su red en Keras, y su arquitectura es algo así como 256->500->500->1. Según esta definición, parece que tenemos un modelo de regresión (una salida) con dos capas ocultas (500 nodos cada una) y una entrada de 256.

Un parámetro no entrenable de su modelo es, por ejemplo, el número de capas ocultas en sí (2). Otro podría ser el nodos en cada capa oculta (500 en este caso), o incluso los nodos de cada capa individual, lo que le da un parámetro por capa más el número de capas en sí.

Estos parámetros son “no entrenables” porque no puede optimizar su valor con sus datos de entrenamiento. Los algoritmos de entrenamiento (como la retropropagación) optimizarán y actualizarán el pesos de su red, que son los parámetros reales entrenables aquí (generalmente varios miles, dependiendo de sus conexiones). Sus datos de entrenamiento tal como están no pueden ayudarlo a determinar esos parámetros no entrenables.

Sin embargo, esto no significa que numberHiddenLayers no se puede entrenar en absoluto, solo significa que en Este modelo y su implementación no podemos hacerlo. Podríamos hacer numberHiddenLayers entrenable; la forma más sencilla sería definir otro algoritmo ML que toma este modelo como entrada y lo entrena con varios valores de numberHiddenLayers. El mejor valor se obtiene con el modelo que superó a los demás, optimizando así la numberHiddenLayers variable.

En otras palabras, los parámetros no entrenables de un modelo son aquellos que no actualizará y optimizará durante el entrenamiento, y que deben definirse. a priori, o pasados ​​como entradas.

Hay algunos detalles que otras respuestas no cubren.

En Keras, los parámetros no entrenables son los que no están entrenados usando el descenso de gradiente. Esto también está controlado por el trainable parámetro en cada capa, por ejemplo:

from keras.layers import *
from keras.models import *
model = Sequential()
model.add(Dense(10, trainable=False, input_shape=(100,)))
model.summary()

Esto imprime cero parámetros entrenables y 1010 parámetros no entrenables.

_________________________________________________________________    
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 10)                1010      
=================================================================
Total params: 1,010
Trainable params: 0
Non-trainable params: 1,010
_________________________________________________________________

Ahora, si configura la capa como entrenable con model.layers[0].trainable = True
luego imprime:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 10)                1010      
=================================================================
Total params: 1,010
Trainable params: 1,010
Non-trainable params: 0
_________________________________________________________________

Ahora todos los parámetros son entrenables y hay cero parámetros no entrenables. Pero también hay capas que tienen parámetros entrenables y no entrenables, un ejemplo es el BatchNormalization capa, donde la desviación media y estándar de las activaciones se almacena para su uso durante el tiempo de prueba. Un ejemplo:

model.add(BatchNormalization())
model.summary()

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 10)                1010      
_________________________________________________________________
batch_normalization_1 (Batch (None, 10)                40        
=================================================================
Total params: 1,050
Trainable params: 1,030
Non-trainable params: 20
_________________________________________________________________

Este caso específico de BatchNormalization tiene 40 parámetros en total, 20 entrenables y 20 no entrenables. Los 20 parámetros no entrenables corresponden a la media calculada y la desviación estándar de las activaciones que se utilizan durante el tiempo de prueba, y estos parámetros nunca serán entrenables usando el descenso de gradiente y no se ven afectados por la trainable bandera.

Nos encantaría que puedieras recomendar este tutorial si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *