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)