'Constructs the computational graph of this layer.'

def fprop(self, state_below, temp=numpy.float32(1), use_noise=True, additional_inputs=None):

    if self.rank_n_approx:
        if (use_noise and self.noise_params):
            emb_val = self._check_dtype((self.W_em1 + self.nW_em1), state_below)
            emb_val = TT.dot((self.W_em2 + self.nW_em2), emb_val)
        else:
            emb_val = self._check_dtype(self.W_em1, state_below)
            emb_val = TT.dot(self.W_em2, emb_val)
    elif (use_noise and self.noise_params):
        emb_val = self._check_dtype((self.W_em + self.nW_em), state_below)
    else:
        emb_val = self._check_dtype(self.W_em, state_below)
    if additional_inputs:
        for (st, wgs) in zip(additional_inputs, self.add_wghs):
            emb_val += self._check_dtype(wgs, st)
    if (use_noise and self.noise_params):
        emb_val = ((emb_val + self.b_em) + self.nb_em)
    else:
        emb_val = (emb_val + self.b_em)
    self.out = emb_val
    self.state_below = state_below
    self.model_output = emb_val
    return emb_val
