def __init__( self, input_size, hidden_size, num_layers, batch_size, dropout=0.0, nonlinearity="tanh", bidirectional=False, init_criterion="glorot", weight_init="complex", ): super(CRNN_Layer, self).__init__() self.hidden_size = int(hidden_size) // 2 # Express in term of complex self.input_size = int(input_size) self.batch_size = batch_size self.bidirectional = bidirectional self.dropout = dropout self.init_criterion = init_criterion self.weight_init = weight_init self.w = CLinear( input_shape=self.input_size, n_neurons=self.hidden_size, bias=False, weight_init=self.weight_init, init_criterion=self.init_criterion, ) self.u = CLinear( input_shape=self.hidden_size * 2, # The input size is in real n_neurons=self.hidden_size, bias=False, weight_init=self.weight_init, init_criterion=self.init_criterion, ) if self.bidirectional: self.batch_size = self.batch_size * 2 # Initial state self.h_init = torch.zeros(1, self.hidden_size * 2, requires_grad=False) # Preloading dropout masks (gives some speed improvement) self._init_drop(self.batch_size) # Initializing dropout self.drop = torch.nn.Dropout(p=self.dropout, inplace=False) self.drop_mask_te = torch.tensor([1.0]).float() # Setting the activation function if nonlinearity == "tanh": self.act = torch.nn.Tanh() else: self.act = torch.nn.ReLU()
def __init__( self, input_size, hidden_size, num_layers, batch_size, dropout=0.0, bidirectional=False, init_criterion="glorot", weight_init="complex", ): super(CLSTM_Layer, self).__init__() self.hidden_size = int(hidden_size) // 2 # Express in term of quat self.input_size = int(input_size) self.batch_size = batch_size self.bidirectional = bidirectional self.dropout = dropout self.init_criterion = init_criterion self.weight_init = weight_init self.w = CLinear( input_shape=self.input_size, n_neurons=self.hidden_size * 4, # Forget, Input, Output, Cell bias=True, weight_init=self.weight_init, init_criterion=self.init_criterion, ) self.u = CLinear( input_shape=self.hidden_size * 2, # The input size is in real n_neurons=self.hidden_size * 4, bias=True, weight_init=self.weight_init, init_criterion=self.init_criterion, ) if self.bidirectional: self.batch_size = self.batch_size * 2 # Initial state self.h_init = torch.zeros(1, self.hidden_size * 2, requires_grad=False) # Preloading dropout masks (gives some speed improvement) self._init_drop(self.batch_size) # Initializing dropout self.drop = torch.nn.Dropout(p=self.dropout, inplace=False) self.drop_mask_te = torch.tensor([1.0]).float()
def __init__( self, input_size, hidden_size, num_layers, batch_size, dropout=0.0, nonlinearity="relu", normalization="batchnorm", bidirectional=False, init_criterion="glorot", weight_init="complex", ): super(CLiGRU_Layer, self).__init__() self.hidden_size = int(hidden_size) // 2 self.input_size = int(input_size) self.batch_size = batch_size self.bidirectional = bidirectional self.dropout = dropout self.init_criterion = init_criterion self.weight_init = weight_init self.normalization = normalization self.nonlinearity = nonlinearity self.w = CLinear( input_shape=self.input_size, n_neurons=self.hidden_size * 2, bias=False, weight_init=self.weight_init, init_criterion=self.init_criterion, ) self.u = CLinear( input_shape=self.hidden_size * 2, # The input size is in real n_neurons=self.hidden_size * 2, bias=False, weight_init=self.weight_init, init_criterion=self.init_criterion, ) if self.bidirectional: self.batch_size = self.batch_size * 2 # Initializing batch norm self.normalize = False if self.normalization == "batchnorm": self.norm = CBatchNorm( input_size=hidden_size * 2, dim=-1, momentum=0.05, ) self.normalize = True elif self.normalization == "layernorm": self.norm = CLayerNorm(input_size=hidden_size * 2, dim=-1) self.normalize = True else: # Normalization is disabled here. self.norm is only formally # initialized to avoid jit issues. self.norm = CLayerNorm(input_size=hidden_size * 2, dim=-1) self.normalize = True # Initial state self.h_init = torch.zeros(1, self.hidden_size * 2, requires_grad=False) # Preloading dropout masks (gives some speed improvement) self._init_drop(self.batch_size) # Initializing dropout self.drop = torch.nn.Dropout(p=self.dropout, inplace=False) self.drop_mask_te = torch.tensor([1.0]).float() # Setting the activation function if self.nonlinearity == "tanh": self.act = torch.nn.Tanh() else: self.act = torch.nn.ReLU()