def __init__(self, input_n, output_n, init='glorot_uniform', activation='linear'): super(FullyConnected, self).__init__() self.input_n = input_n self.output_n = output_n self.init = initializations.get(init) self.activation = activations.get(activation) self.input = T.matrix() self.W = self.init((self.input_n, self.output_n)) self.b = shared_zeros((self.output_n)) self.params = [self.W, self.b]
def get_updates(self, cost, params): grads = self.get_gradients(cost, params) lr = self.lr * (1.0 / (1.0 + self.decay * self.iterations)) updates = [(self.iterations, self.iterations + 1.)] for p, g in zip(params, grads): m = shared_zeros(p.get_value().shape) # momentum v = self.momentum * m - lr * g # velocity updates.append((m, v)) if self.nesterov: new_p = p + self.momentum * v - lr * g else: new_p = p + v updates.append((p, new_p)) return updates
def zeros(shape): return shared_zeros(shape)