Python keras.backend.update() Examples
The following are 30
code examples of keras.backend.update().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
keras.backend
, or try the search function
.
Example #1
Source File: adversarial_utils.py From keras-adversarial with MIT License | 6 votes |
def merge_updates(updates): """Average repeated updates of the same variable""" merged_updates = {} for update in updates: variable, value = unpack_assignment(update) key = variable_key(variable) if key not in merged_updates: merged_updates[key] = [variable, []] merged_updates[key][1].append(value) ret = [] for k, v in iteritems(merged_updates): variable = v[0] values = v[1] n = len(values) if n == 1: ret.append(K.update(variable, value[0])) else: ret.append(K.update(variable, sum(values) / n)) return ret
Example #2
Source File: model.py From cvpr-2018-autonomous-driving-autopilot-solution with MIT License | 6 votes |
def apply_box_deltas_graph(boxes, deltas): """Applies the given deltas to the given boxes. boxes: [N, (y1, x1, y2, x2)] boxes to update deltas: [N, (dy, dx, log(dh), log(dw))] refinements to apply """ # Convert to y, x, h, w height = boxes[:, 2] - boxes[:, 0] width = boxes[:, 3] - boxes[:, 1] center_y = boxes[:, 0] + 0.5 * height center_x = boxes[:, 1] + 0.5 * width # Apply deltas center_y += deltas[:, 0] * height center_x += deltas[:, 1] * width height *= tf.exp(deltas[:, 2]) width *= tf.exp(deltas[:, 3]) # Convert back to y1, x1, y2, x2 y1 = center_y - 0.5 * height x1 = center_x - 0.5 * width y2 = y1 + height x2 = x1 + width result = tf.stack([y1, x1, y2, x2], axis=1, name="apply_box_deltas_out") return result
Example #3
Source File: dagmm.py From AnomalyDetectionTransformations with MIT License | 6 votes |
def call(self, inputs, training=None): z, gamma_k = inputs gamma_k_sum = K.sum(gamma_k) est_phi = K.mean(gamma_k, axis=0) est_mu = K.dot(K.transpose(gamma_k), z) / gamma_k_sum est_sigma = K.dot(K.transpose(z - est_mu), gamma_k * (z - est_mu)) / gamma_k_sum est_sigma = est_sigma + (K.random_normal(shape=(K.int_shape(z)[1], 1), mean=1e-3, stddev=1e-4) * K.eye(K.int_shape(z)[1])) self.add_update(K.update(self.phi, est_phi), inputs) self.add_update(K.update(self.mu, est_mu), inputs) self.add_update(K.update(self.sigma, est_sigma), inputs) est_sigma_diag_inv = K.eye(K.int_shape(self.sigma)[0]) / est_sigma self.add_loss(self.lambd_diag * K.sum(est_sigma_diag_inv), inputs) phi = K.in_train_phase(est_phi, self.phi, training) mu = K.in_train_phase(est_mu, self.mu, training) sigma = K.in_train_phase(est_sigma, self.sigma, training) return GaussianMixtureComponent._calc_component_density(z, phi, mu, sigma)
Example #4
Source File: optimizers.py From keras-lookahead with MIT License | 6 votes |
def get_updates(self, loss, params): grads = self.get_gradients(loss, params) self.updates = [K.update_add(self.iterations, 1)] t = K.cast(self.iterations, K.floatx()) + 1 lr_t = self.learning_rate * (K.sqrt(1. - K.pow(self.beta_2, t)) / (1. - K.pow(self.beta_1, t))) ms = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] vs = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] self.weights = [self.iterations] + ms + vs for p, g, m, v in zip(params, grads, ms, vs): m_t = (self.beta_1 * m) + (1. - self.beta_1) * g v_t = (self.beta_2 * v) + (1. - self.beta_2) * K.square(g) p_t = lr_t * m_t / (K.sqrt(v_t) + self.epsilon) self.updates.append(K.update(m, m_t)) self.updates.append(K.update(v, v_t)) self.updates.append(K.update_sub(p, p_t)) return self.updates
Example #5
Source File: model_inceptionresnet.py From cvpr-2018-autonomous-driving-autopilot-solution with MIT License | 6 votes |
def apply_box_deltas_graph(boxes, deltas): """Applies the given deltas to the given boxes. boxes: [N, (y1, x1, y2, x2)] boxes to update deltas: [N, (dy, dx, log(dh), log(dw))] refinements to apply """ # Convert to y, x, h, w height = boxes[:, 2] - boxes[:, 0] width = boxes[:, 3] - boxes[:, 1] center_y = boxes[:, 0] + 0.5 * height center_x = boxes[:, 1] + 0.5 * width # Apply deltas center_y += deltas[:, 0] * height center_x += deltas[:, 1] * width height *= tf.exp(deltas[:, 2]) width *= tf.exp(deltas[:, 3]) # Convert back to y1, x1, y2, x2 y1 = center_y - 0.5 * height x1 = center_x - 0.5 * width y2 = y1 + height x2 = x1 + width result = tf.stack([y1, x1, y2, x2], axis=1, name="apply_box_deltas_out") return result
Example #6
Source File: lars.py From keras-contrib with MIT License | 5 votes |
def get_updates(self, loss, params): grads = self.get_gradients(loss, params) weights = self.get_weights() self.updates = [K.update_add(self.iterations, 1)] scaled_lr = self.lr w_norm = K.sqrt(K.sum([K.sum(K.square(weight)) for weight in weights])) g_norm = K.sqrt(K.sum([K.sum(K.square(grad)) for grad in grads])) scaled_lr = K.switch(K.greater(w_norm * g_norm, K.zeros([1])), K.expand_dims((self.eeta * w_norm / (g_norm + self.weight_decay * w_norm + self.epsilon)) * self.lr), K.ones([1]) * self.lr) if K.backend() == 'theano': scaled_lr = scaled_lr[0] # otherwise theano raise broadcasting error # momentum moments = [K.zeros(K.int_shape(param), dtype=K.dtype(param)) for param in params] self.weights = [self.iterations] + moments for param, grad, moment in zip(params, grads, moments): v0 = (moment * self.momentum) v1 = scaled_lr * grad # velocity veloc = v0 - v1 self.updates.append(K.update(moment, veloc)) if self.nesterov: new_param = param + (veloc * self.momentum) - v1 else: new_param = param + veloc # Apply constraints. if getattr(param, 'constraint', None) is not None: new_param = param.constraint(new_param) self.updates.append(K.update(param, new_param)) return self.updates
Example #7
Source File: optimizer.py From Anime-Super-Resolution with MIT License | 5 votes |
def data_based_init(model, input): # input can be dict, numpy array, or list of numpy arrays if type(input) is dict: feed_dict = input pass elif type(input) is list: feed_dict = {tf_inp: np_inp for tf_inp,np_inp in zip(model.inputs,input)} pass else: feed_dict = {model.inputs[0]: input} pass # add learning phase if required if model.uses_learning_phase and K.learning_phase() not in feed_dict: feed_dict.update({K.learning_phase(): 1}) pass # get all layer name, output, weight, bias tuples layer_output_weight_bias = [] for l in model.layers: trainable_weights = l.trainable_weights if len(trainable_weights) == 2: assert(l.built) W,b = trainable_weights layer_output_weight_bias.append((l.name,l.get_output_at(0),W,b)) # if more than one node, only use the first pass pass # iterate over our list and do data dependent init sess = K.get_session() pbar = tqdm(layer_output_weight_bias) for l,o,W,b in pbar: pbar.set_description(f"Init layer {l}") m,v = tf.nn.moments(o, [i for i in range(len(o.get_shape())-1)]) s = tf.sqrt(v + 1e-10) W_updated = W/tf.reshape(s,[1]*(len(W.get_shape())-1)+[-1]) updates = tf.group(W.assign(W_updated), b.assign((b-m)/s)) sess.run(updates, feed_dict) pass pass
Example #8
Source File: optimizer.py From Anime-Super-Resolution with MIT License | 5 votes |
def add_weightnorm_param_updates(updates, new_V_param, new_g_param, W, V_scaler): ps = K.get_variable_shape(new_V_param) norm_axes = [i for i in range(len(ps) - 1)] # update W and V_scaler new_V_norm = tf.sqrt(tf.reduce_sum(tf.square(new_V_param), norm_axes)) new_V_scaler = new_g_param / new_V_norm new_W = tf.reshape(new_V_scaler, [1] * len(norm_axes) + [-1]) * new_V_param updates.append(K.update(W, new_W)) updates.append(K.update(V_scaler, new_V_scaler)) pass
Example #9
Source File: unrolled_optimizer.py From keras-adversarial with MIT License | 5 votes |
def unroll(updates, uupdates, depth): replace = {k: v for k, v in unpack_assignments(uupdates)} updates_t = unpack_assignments(updates) for i in range(depth): updates_t = [(k, clone_replace(v, replace)) for k, v in updates_t] return [K.update(a, b) for a, b in updates_t]
Example #10
Source File: adamw.py From EAST with GNU General Public License v3.0 | 5 votes |
def get_updates(self, loss, params): grads = self.get_gradients(loss, params) self.updates = [K.update_add(self.iterations, 1)] wd = self.wd # decoupled weight decay (3/4) lr = self.lr if self.initial_decay > 0: lr *= (1. / (1. + self.decay * K.cast(self.iterations, K.dtype(self.decay)))) t = K.cast(self.iterations, K.floatx()) + 1 lr_t = lr * (K.sqrt(1. - K.pow(self.beta_2, t)) / (1. - K.pow(self.beta_1, t))) ms = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] vs = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] self.weights = [self.iterations] + ms + vs for p, g, m, v in zip(params, grads, ms, vs): m_t = (self.beta_1 * m) + (1. - self.beta_1) * g v_t = (self.beta_2 * v) + (1. - self.beta_2) * K.square(g) p_t = p - lr_t * m_t / (K.sqrt(v_t) + self.epsilon) - lr * wd * p # decoupled weight decay (4/4) self.updates.append(K.update(m, m_t)) self.updates.append(K.update(v, v_t)) new_p = p_t # Apply constraints. if getattr(p, 'constraint', None) is not None: new_p = p.constraint(new_p) self.updates.append(K.update(p, new_p)) return self.updates
Example #11
Source File: wide_residual_network.py From AnomalyDetectionTransformations with MIT License | 5 votes |
def get_updates(self, loss, params): grads = self.get_gradients(loss, params) self.updates = [K.update_add(self.iterations, 1)] lr = self.lr if self.initial_decay > 0: lr *= (1. / (1. + self.decay * K.cast(self.iterations, K.dtype(self.decay)))) # momentum shapes = [K.int_shape(p) for p in params] moments = [K.zeros(shape) for shape in shapes] self.weights = [self.iterations] + moments for p, g, m in zip(params, grads, moments): v = self.momentum * m + g # velocity self.updates.append(K.update(m, v)) if self.nesterov: new_p = p - lr * (self.momentum * v + g) else: new_p = p - lr * v # Apply constraints. if getattr(p, 'constraint', None) is not None: new_p = p.constraint(new_p) self.updates.append(K.update(p, new_p)) return self.updates
Example #12
Source File: optimizers.py From faceswap with GNU General Public License v3.0 | 5 votes |
def _update_1(self, params): """ Perform the first update. Run under CPU context if running on Tensorflow and CPU mode is enabled, otherwise run on the default device. """ ms = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] vs = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] if self.amsgrad: vhats = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] else: vhats = [K.zeros(1) for _ in params] return ms, vs, vhats
Example #13
Source File: training.py From aiexamples with Apache License 2.0 | 5 votes |
def get_updates(self, loss, params): grads = self.get_gradients(loss, params) self.updates = [(self.iterations, self.iterations + 1)] t = self.iterations + 1 lr_t = self.lr * K.sqrt(1. - K.pow(self.beta_2, t)) / (1. - K.pow(self.beta_1, t)) ms = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] vs = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] gs = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] self.weights = ms + vs flag = K.equal(t % self.accum_iters, 0) flag = K.cast(flag, dtype='float32') for p, g, m, v, gg in zip(params, grads, ms, vs, gs): gg_t = (1 - flag) * (gg + g) m_t = (self.beta_1 * m) + (1. - self.beta_1) * (gg + flag * g) / self.accum_iters v_t = (self.beta_2 * v) + (1. - self.beta_2) * K.square((gg + flag * g) / self.accum_iters) p_t = p - flag * lr_t * m_t / (K.sqrt(v_t) + self.epsilon) self.updates.append((m, flag * m_t + (1 - flag) * m)) self.updates.append((v, flag * v_t + (1 - flag) * v)) self.updates.append((gg, gg_t)) # apply constraints. new_p = p_t if getattr(p, 'constraint', None) is not None: new_p = p.constraint(new_p) self.updates.append(K.update(p, new_p)) return self.updates
Example #14
Source File: training.py From aiexamples with Apache License 2.0 | 5 votes |
def __init__(self, lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, accum_iters=10, **kwargs): super(AdamAccumulate, self).__init__(**kwargs) self.__dict__.update(locals()) self.iterations = K.variable(0) self.lr = K.variable(lr) self.beta_1 = K.variable(beta_1) self.beta_2 = K.variable(beta_2) if epsilon is None: epsilon = K.epsilon() self.epsilon = epsilon self.accum_iters = K.variable(accum_iters)
Example #15
Source File: ftml.py From keras-contrib with MIT License | 5 votes |
def get_updates(self, loss, params): grads = self.get_gradients(loss, params) self.updates = [K.update_add(self.iterations, 1)] lr = self.lr if self.inital_decay > 0: lr *= (1. / (1. + self.decay * self.iterations)) t = self.iterations + 1 lr_t = lr / (1. - K.pow(self.beta_1, t)) shapes = [K.int_shape(p) for p in params] zs = [K.zeros(shape) for shape in shapes] vs = [K.zeros(shape) for shape in shapes] ds = [K.zeros(shape) for shape in shapes] self.weights = [self.iterations] + zs + vs + ds for p, g, z, v, d in zip(params, grads, zs, vs, ds): v_t = self.beta_2 * v + (1. - self.beta_2) * K.square(g) d_t = (K.sqrt(v_t / (1. - K.pow(self.beta_2, t))) + self.epsilon) / lr_t sigma_t = d_t - self.beta_1 * d z_t = self.beta_1 * z + (1. - self.beta_1) * g - sigma_t * p p_t = - z_t / d_t self.updates.append(K.update(z, z_t)) self.updates.append(K.update(v, v_t)) self.updates.append(K.update(d, d_t)) new_p = p_t # Apply constraints. if getattr(p, 'constraint', None) is not None: new_p = p.constraint(new_p) self.updates.append(K.update(p, new_p)) return self.updates
Example #16
Source File: ftml.py From keras-contrib with MIT License | 5 votes |
def __init__(self, lr=0.0025, beta_1=0.6, beta_2=0.999, epsilon=1e-8, decay=0., **kwargs): super(FTML, self).__init__(**kwargs) self.__dict__.update(locals()) self.iterations = K.variable(0) self.lr = K.variable(lr) self.beta_1 = K.variable(beta_1) self.beta_2 = K.variable(beta_2) self.decay = K.variable(decay) self.epsilon = epsilon self.inital_decay = decay
Example #17
Source File: yogi.py From keras-contrib with MIT License | 5 votes |
def get_updates(self, loss, params): grads = self.get_gradients(loss, params) self.updates = [K.update_add(self.iterations, 1)] lr = self.lr if self.initial_decay > 0: lr = lr * (1. / (1. + self.decay * K.cast(self.iterations, K.dtype(self.decay)))) t = K.cast(self.iterations, K.floatx()) + 1 lr_t = lr * (K.sqrt(1. - K.pow(self.beta_2, t)) / (1. - K.pow(self.beta_1, t))) ms = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] vs = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] vhats = [K.zeros(1) for _ in params] self.weights = [self.iterations] + ms + vs + vhats for p, g, m, v, vhat in zip(params, grads, ms, vs, vhats): g2 = K.square(g) m_t = (self.beta_1 * m) + (1. - self.beta_1) * g v_t = v - (1. - self.beta_2) * K.sign(v - g2) * g2 p_t = p - lr_t * m_t / (K.sqrt(v_t) + self.epsilon) self.updates.append(K.update(m, m_t)) self.updates.append(K.update(v, v_t)) new_p = p_t # Apply constraints. if getattr(p, 'constraint', None) is not None: new_p = p.constraint(new_p) self.updates.append(K.update(p, new_p)) return self.updates
Example #18
Source File: Eve.py From DeepLearningImplementations with MIT License | 5 votes |
def __init__(self, lr=0.001, beta_1=0.9, beta_2=0.999, beta_3=0.999, small_k=0.1, big_K=10, epsilon=1e-8, decay=0., **kwargs): super(Eve, self).__init__(**kwargs) self.__dict__.update(locals()) self.iterations = K.variable(0) self.lr = K.variable(lr) self.beta_1 = K.variable(beta_1) self.beta_2 = K.variable(beta_2) self.beta_3 = K.variable(beta_3) self.small_k = K.variable(small_k) self.big_K = K.variable(big_K) self.decay = K.variable(decay) self.inital_decay = decay
Example #19
Source File: training.py From keras_BEGAN with MIT License | 5 votes |
def __call__(self, y_true, y_pred): # y_true, y_pred shape: (BS, row, col, ch * 2) data_true, generator_true = y_true[:, :, :, 0:3], y_true[:, :, :, 3:6] data_pred, generator_pred = y_pred[:, :, :, 0:3], y_pred[:, :, :, 3:6] loss_data = K.mean(K.abs(data_true - data_pred), axis=[1, 2, 3]) loss_generator = K.mean(K.abs(generator_true - generator_pred), axis=[1, 2, 3]) ret = loss_data - self.k_var * loss_generator # for updating values in each epoch, use `updates` mechanism # DiscriminatorModel collects Loss Function's updates attributes mean_loss_data = K.mean(loss_data) mean_loss_gen = K.mean(loss_generator) # update K new_k = self.k_var + self.lambda_k * (self.gamma * mean_loss_data - mean_loss_gen) new_k = K.clip(new_k, 0, 1) self.updates.append(K.update(self.k_var, new_k)) # calculate M-Global m_global = mean_loss_data + K.abs(self.gamma * mean_loss_data - mean_loss_gen) self.updates.append(K.update(self.m_global_var, m_global)) # let loss_real_x mean_loss_data self.updates.append(K.update(self.loss_real_x_var, mean_loss_data)) # let loss_gen_x mean_loss_gen self.updates.append(K.update(self.loss_gen_x_var, mean_loss_gen)) return ret
Example #20
Source File: keras_radam.py From Keras-TextClassification with MIT License | 5 votes |
def get_updates(self, loss, params): grads = self.get_gradients(loss, params) self.updates = [K.update_add(self.iterations, 1)] lr = self.lr if self.initial_decay > 0: lr = lr * (1. / (1. + self.decay * K.cast(self.iterations, K.dtype(self.decay)))) t = K.cast(self.iterations, K.floatx()) + 1 beta_1_t = K.pow(self.beta_1, t) beta_2_t = K.pow(self.beta_2, t) rho = 2 / (1 - self.beta_2) - 1 rho_t = rho - 2 * t * beta_2_t / (1 - beta_2_t) r_t = K.sqrt( K.relu(rho_t - 4) * K.relu(rho_t - 2) * rho / ((rho - 4) * (rho - 2) * rho_t) ) flag = K.cast(rho_t > 4, K.floatx()) ms = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] vs = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] self.weights = [self.iterations] + ms + vs for p, g, m, v in zip(params, grads, ms, vs): m_t = (self.beta_1 * m) + (1. - self.beta_1) * g v_t = (self.beta_2 * v) + (1. - self.beta_2) * K.square(g) mhat_t = m_t / (1 - beta_1_t) vhat_t = K.sqrt(v_t / (1 - beta_2_t)) p_t = p - lr * mhat_t * (flag * r_t / (vhat_t + self.epsilon) + (1 - flag)) self.updates.append(K.update(m, m_t)) self.updates.append(K.update(v, v_t)) new_p = p_t # Apply constraints. if getattr(p, 'constraint', None) is not None: new_p = p.constraint(new_p) self.updates.append(K.update(p, new_p)) return self.updates
Example #21
Source File: models.py From DigiX_HuaWei_Population_Age_Attribution_Predict with MIT License | 5 votes |
def get_updates(self, loss, params): grads = self.get_gradients(loss, params) self.updates = [K.update_add(self.iterations, 1)] lr = self.lr if self.initial_decay > 0: lr *= (1. / (1. + self.decay * K.cast(self.iterations, K.dtype(self.decay)))) t = K.cast(self.iterations, K.floatx()) + 1 lr_t = lr * (K.sqrt(1. - K.pow(self.beta_2, t)) /(1. - K.pow(self.beta_1, t))) ms = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] vs = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] vhats = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] self.weights = [self.iterations] + ms + vs + vhats for p, g, m, v, vhat in zip(params, grads, ms, vs, vhats): m_t = (self.beta_1 * m) + (1. - self.beta_1) * g v_t = (self.beta_2 * v) + (1. - self.beta_2) * K.square(g) vhat_t = K.maximum(vhat, v_t) p_t = p - lr_t * m_t / (K.sqrt(vhat_t) + self.epsilon) self.updates.append(K.update(m, m_t)) self.updates.append(K.update(v, v_t)) self.updates.append(K.update(vhat, vhat_t)) new_p = p_t # Apply constraints. if getattr(p, 'constraint', None) is not None: new_p = p.constraint(new_p) self.updates.append(K.update(p, new_p)) return self.updates
Example #22
Source File: weightnorm.py From weightnorm with MIT License | 5 votes |
def data_based_init(model, input): # input can be dict, numpy array, or list of numpy arrays if type(input) is dict: feed_dict = input elif type(input) is list: feed_dict = {tf_inp: np_inp for tf_inp,np_inp in zip(model.inputs,input)} else: feed_dict = {model.inputs[0]: input} # add learning phase if required if model.uses_learning_phase and K.learning_phase() not in feed_dict: feed_dict.update({K.learning_phase(): 1}) # get all layer name, output, weight, bias tuples layer_output_weight_bias = [] for l in model.layers: if hasattr(l, 'W') and hasattr(l, 'b'): assert(l.built) layer_output_weight_bias.append( (l.name,l.get_output_at(0),l.W,l.b) ) # if more than one node, only use the first # iterate over our list and do data dependent init sess = K.get_session() for l,o,W,b in layer_output_weight_bias: print('Performing data dependent initialization for layer ' + l) m,v = tf.nn.moments(o, [i for i in range(len(o.get_shape())-1)]) s = tf.sqrt(v + 1e-10) updates = tf.group(W.assign(W/tf.reshape(s,[1]*(len(W.get_shape())-1)+[-1])), b.assign((b-m)/s)) sess.run(updates, feed_dict)
Example #23
Source File: weightnorm.py From weightnorm with MIT License | 5 votes |
def add_weightnorm_param_updates(updates, new_V_param, new_g_param, W, V_scaler): ps = K.get_variable_shape(new_V_param) norm_axes = [i for i in range(len(ps) - 1)] # update W and V_scaler new_V_norm = tf.sqrt(tf.reduce_sum(tf.square(new_V_param), norm_axes)) new_V_scaler = new_g_param / new_V_norm new_W = tf.reshape(new_V_scaler, [1] * len(norm_axes) + [-1]) * new_V_param updates.append(K.update(W, new_W)) updates.append(K.update(V_scaler, new_V_scaler)) # data based initialization for a given Keras model
Example #24
Source File: model_inceptionresnet.py From cvpr-2018-autonomous-driving-autopilot-solution with MIT License | 5 votes |
def get_updates(self, loss, params): grads = self.get_gradients(loss, params) self.updates = [K.update_add(self.iterations, 1)] lr = self.lr if self.initial_decay > 0: lr *= (1. / (1. + self.decay * K.cast(self.iterations, K.dtype(self.decay)))) accum_switch = K.equal(self.iterations % self.accum_iters, 0) print(accum_switch) accum_switch = K.cast(accum_switch, dtype='float32') # momentum shapes = [K.int_shape(p) for p in params] moments = [K.zeros(shape) for shape in shapes] temp_grads = [K.zeros(shape) for shape in shapes] self.weights = [self.iterations] + moments for p, cg, m, tg in zip(params, grads, moments, temp_grads): g = cg + tg v = self.momentum * m - (lr * g / self.accum_iters) # velocity self.updates.append(K.update(m, (1 - accum_switch) * m + accum_switch * v)) self.updates.append(K.update(tg, (1 - accum_switch) * g)) if self.nesterov: new_p = p + self.momentum * v - (lr * g / self.accum_iters) else: new_p = p + v # Apply constraints. if getattr(p, 'constraint', None) is not None: new_p = p.constraint(new_p) self.updates.append(K.update(p, (1 - accum_switch) * p + accum_switch * new_p)) return self.updates
Example #25
Source File: model_inceptionresnet.py From cvpr-2018-autonomous-driving-autopilot-solution with MIT License | 5 votes |
def set_trainable(self, layer_regex, keras_model=None, indent=0, verbose=1): """Sets model layers as trainable if their names match the given regular expression. """ # Print message on the first call (but not on recursive calls) if verbose > 0 and keras_model is None: log("Selecting layers to train") keras_model = keras_model or self.keras_model # In multi-GPU training, we wrap the model. Get layers # of the inner model because they have the weights. layers = keras_model.inner_model.layers if hasattr(keras_model, "inner_model")\ else keras_model.layers for layer in layers: # Is the layer a model? if layer.__class__.__name__ == 'Model': print("In model: ", layer.name) self.set_trainable( layer_regex, keras_model=layer, indent=indent + 4) continue if not layer.weights: continue # Is it trainable? trainable = bool(re.fullmatch(layer_regex, layer.name)) # Update layer. If layer is a container, update inner layer. if layer.__class__.__name__ == 'TimeDistributed': layer.layer.trainable = trainable else: layer.trainable = trainable # Print trainble layer names if trainable and verbose > 0: log("{}{:20} ({})".format(" " * indent, layer.name, layer.__class__.__name__))
Example #26
Source File: model.py From cvpr-2018-autonomous-driving-autopilot-solution with MIT License | 5 votes |
def get_updates(self, loss, params): grads = self.get_gradients(loss, params) self.updates = [K.update_add(self.iterations, 1)] lr = self.lr if self.initial_decay > 0: lr *= (1. / (1. + self.decay * K.cast(self.iterations, K.dtype(self.decay)))) accum_switch = K.equal(self.iterations % self.accum_iters, 0) print(accum_switch) accum_switch = K.cast(accum_switch, dtype='float32') # momentum shapes = [K.int_shape(p) for p in params] moments = [K.zeros(shape) for shape in shapes] temp_grads = [K.zeros(shape) for shape in shapes] self.weights = [self.iterations] + moments for p, cg, m, tg in zip(params, grads, moments, temp_grads): g = cg + tg v = self.momentum * m - (lr * g / self.accum_iters) # velocity self.updates.append(K.update(m, (1 - accum_switch) * m + accum_switch * v)) self.updates.append(K.update(tg, (1 - accum_switch) * g)) if self.nesterov: new_p = p + self.momentum * v - (lr * g / self.accum_iters) else: new_p = p + v # Apply constraints. if getattr(p, 'constraint', None) is not None: new_p = p.constraint(new_p) self.updates.append(K.update(p, (1 - accum_switch) * p + accum_switch * new_p)) return self.updates
Example #27
Source File: LR_SGD.py From tripletloss-keras-tensorflow with MIT License | 5 votes |
def get_updates(self, loss, params): grads = self.get_gradients(loss, params) self.updates = [K.update_add(self.iterations, 1)] lr = self.lr if self.initial_decay > 0: lr *= (1. / (1. + self.decay * K.cast(self.iterations, K.dtype(self.decay)))) # momentum shapes = [K.int_shape(p) for p in params] moments = [K.zeros(shape) for shape in shapes] self.weights = [self.iterations] + moments for p, g, m in zip(params, grads, moments): matched_layer = [x for x in self.lr_multipliers.keys() if x in p.name] if matched_layer: new_lr = lr * self.lr_multipliers[matched_layer[0]] else: new_lr = lr v = self.momentum * m - new_lr * g # velocity self.updates.append(K.update(m, v)) if self.nesterov: new_p = p + self.momentum * v - new_lr * g else: new_p = p + v # Apply constraints. if getattr(p, 'constraint', None) is not None: new_p = p.constraint(new_p) self.updates.append(K.update(p, new_p)) return self.updates
Example #28
Source File: optimizers.py From faceswap with GNU General Public License v3.0 | 4 votes |
def get_updates(self, loss, params): """ Obtain the optimizer loss updates. Parameters ---------- loss: list List of tensors params: list List of tensors Returns ------- list List of tensors """ grads = self.get_gradients(loss, params) self.updates = [K.update_add(self.iterations, 1)] lr = self.lr if self.initial_decay > 0: lr = lr * (1. / (1. + self.decay * K.cast(self.iterations, K.dtype(self.decay)))) t = K.cast(self.iterations, K.floatx()) + 1 lr_t = lr * (K.sqrt(1. - K.pow(self.beta_2, t)) / (1. - K.pow(self.beta_1, t))) # Pass off to CPU if requested if self.cpu_mode: with K.tf.device("/cpu:0"): ms, vs, vhats = self._update_1(params) else: ms, vs, vhats = self._update_1(params) self.weights = [self.iterations] + ms + vs + vhats for p, g, m, v, vhat in zip(params, grads, ms, vs, vhats): m_t = (self.beta_1 * m) + (1. - self.beta_1) * g v_t = (self.beta_2 * v) + (1. - self.beta_2) * K.square(g) if self.amsgrad: vhat_t = K.maximum(vhat, v_t) p_t = p - lr_t * m_t / (K.sqrt(vhat_t) + self.epsilon) self.updates.append(K.update(vhat, vhat_t)) else: p_t = p - lr_t * m_t / (K.sqrt(v_t) + self.epsilon) self.updates.append(K.update(m, m_t)) self.updates.append(K.update(v, v_t)) new_p = p_t # Apply constraints. if getattr(p, 'constraint', None) is not None: new_p = p.constraint(new_p) self.updates.append(K.update(p, new_p)) return self.updates
Example #29
Source File: Eve.py From DeepLearningImplementations with MIT License | 4 votes |
def get_updates(self, params, loss): grads = self.get_gradients(loss, params) self.updates = [K.update_add(self.iterations, 1)] lr = self.lr if self.inital_decay > 0: lr *= (1. / (1. + self.decay * self.iterations)) t = self.iterations + 1 lr_t = lr * K.sqrt(1. - K.pow(self.beta_2, t)) / (1. - K.pow(self.beta_1, t)) shapes = [K.get_variable_shape(p) for p in params] ms = [K.zeros(shape) for shape in shapes] vs = [K.zeros(shape) for shape in shapes] f = K.variable(0) d = K.variable(1) self.weights = [self.iterations] + ms + vs + [f, d] cond = K.greater(t, K.variable(1)) small_delta_t = K.switch(K.greater(loss, f), self.small_k + 1, 1. / (self.big_K + 1)) big_delta_t = K.switch(K.greater(loss, f), self.big_K + 1, 1. / (self.small_k + 1)) c_t = K.minimum(K.maximum(small_delta_t, loss / (f + self.epsilon)), big_delta_t) f_t = c_t * f r_t = K.abs(f_t - f) / (K.minimum(f_t, f)) d_t = self.beta_3 * d + (1 - self.beta_3) * r_t f_t = K.switch(cond, f_t, loss) d_t = K.switch(cond, d_t, K.variable(1.)) self.updates.append(K.update(f, f_t)) self.updates.append(K.update(d, d_t)) for p, g, m, v in zip(params, grads, ms, vs): m_t = (self.beta_1 * m) + (1. - self.beta_1) * g v_t = (self.beta_2 * v) + (1. - self.beta_2) * K.square(g) p_t = p - lr_t * m_t / (d_t * K.sqrt(v_t) + self.epsilon) self.updates.append(K.update(m, m_t)) self.updates.append(K.update(v, v_t)) new_p = p_t self.updates.append(K.update(p, new_p)) return self.updates
Example #30
Source File: keras_lamb.py From keras-LAMB-Optimizer with MIT License | 4 votes |
def get_updates(self, loss, params): grads = self.get_gradients(loss, params) self.updates = [K.update_add(self.iterations, 1)] lr = self.lr if self.initial_decay > 0: lr = lr * (1. / (1. + self.decay * K.cast(self.iterations, K.dtype(self.decay)))) t = K.cast(self.iterations, K.floatx()) + 1 ms = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] vs = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params] self.weights = [self.iterations] + ms + vs for p, g, m, v in zip(params, grads, ms, vs): m_t = (self.beta_1 * m) + (1. - self.beta_1) * g v_t = (self.beta_2 * v) + (1. - self.beta_2) * K.square(g) m_t_hat = m_t / (1. - K.pow(self.beta_1, t)) v_t_hat = v_t / (1. - K.pow(self.beta_2, t)) p_dash = m_t_hat / (K.sqrt(v_t_hat + self.epsilon)) if self.weight_decay > 0.: wd = self.weight_decay * p p_dash = p_dash + wd r1 = K.sqrt(K.sum(K.square(p))) r2 = K.sqrt(K.sum(K.square(p_dash))) r = tf.where(tf.greater(r1, 0.), tf.where(tf.greater(r2, 0.), r1 / r2, 1.0), 1.0) # r = r1 / r2 eta = r * lr p_t = p - eta * p_dash self.updates.append(K.update(m, m_t)) self.updates.append(K.update(v, v_t)) new_p = p_t # Apply constraints. if getattr(p, 'constraint', None) is not None: new_p = p.constraint(new_p) self.updates.append(K.update(p, new_p)) return self.updates