padsequence layers get_layer example dense custom create python machine-learning tensorflow theano keras

python - layers - ¿Cómo funciona Adagrad en Keras? ¿Qué significa self.weights en Keras Optimizer?



layers dense keras (1)

Por ejemplo, la implementación de Keras Adagrad ha sido:

class Adagrad(Optimizer): """Adagrad optimizer. It is recommended to leave the parameters of this optimizer at their default values. # Arguments lr: float >= 0. Learning rate. epsilon: float >= 0. decay: float >= 0. Learning rate decay over each update. # References - [Adaptive Subgradient Methods for Online Learning and Stochastic Optimization](http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf) """ def __init__(self, lr=0.01, epsilon=1e-8, decay=0., **kwargs): super(Adagrad, self).__init__(**kwargs) self.lr = K.variable(lr) self.epsilon = epsilon self.decay = K.variable(decay) self.initial_decay = decay self.iterations = K.variable(0.) def get_updates(self, params, constraints, loss): grads = self.get_gradients(loss, params) shapes = [K.get_variable_shape(p) for p in params] accumulators = [K.zeros(shape) for shape in shapes] self.weights = accumulators self.updates = [] lr = self.lr if self.initial_decay > 0: lr *= (1. / (1. + self.decay * self.iterations)) self.updates.append(K.update_add(self.iterations, 1)) for p, g, a in zip(params, grads, accumulators): new_a = a + K.square(g) # update accumulator self.updates.append(K.update(a, new_a)) new_p = p - lr * g / (K.sqrt(new_a) + self.epsilon) # apply constraints if p in constraints: c = constraints[p] new_p = c(new_p) self.updates.append(K.update(p, new_p)) return self.updates

Y la función ''get_update ()'' parece una actualización de un paso. Sin embargo, si los acumuladores se almacenan la información del historial? ¿Por qué se ha inicializado en ceros en cada paso? ¿Cómo puede ser un acumulador durante todo el proceso de capacitación?

¿Qué hace esta línea?

self.weights = accumulators

Parece que los pesos propios nunca más han sido llamados.


Estás en lo correcto ... para todos los optimizadores en Keras, get_updates() implementa la lógica de tensor para un paso de las actualizaciones. Esta función se llama una vez para cada model.fit() de _make_train_function() aquí , que se usa para crear la función de tensor pasando la regla de update= como update= here . Esta regla de actualización se usa de iteración a iteración para actualizar los parámetros del modelo y otros parámetros.

self.weights de una clase de optimizador son sus parámetros internos. Esto no se usa para entrenamiento. Simplemente funciona para mantener el estado del optimizador (lista de punteros al param / tensor de acumuladores) y cuando se llama a model.save también se guardan llamando a get_weights() aquí y se carga de nuevo cuando model.load llama a set_weights() aquí