def init(input_size, hidden_size, fancy_forget_bias_init=3):
        """
        Initialize parameters of the LSTM (both weights and biases in one
        matrix). One might way to have a positive fancy_forget_bias_init number
        (e.g. maybe even up to 5, in some papers)
        """
        # +1 for the biases, which will be the first row of WLSTM
        WLSTM = np.random.randn(
            input_size + hidden_size + 1, 4 * hidden_size
        ) / np.sqrt(input_size + hidden_size)
        WLSTM[0, :] = 0  # initialize biases to zero
        if fancy_forget_bias_init != 0:
            # forget gates get little bit negative bias initially to encourage
            # them to be turned off remember that due to Xavier initialization
            # above, the raw output activations from gates before nonlinearity
            # are zero mean and on order of standard deviation ~1
            WLSTM[0, hidden_size : 2 * hidden_size] = fancy_forget_bias_init
        return WLSTM

        Initialize parameters of the LSTM (both weights and biases in one
        matrix). One might way to have a positive fancy_forget_bias_init number
        (e.g. maybe even up to 5, in some papers)
        
tests/todo/lstm_batch.py