def repeat_rows(x, num_reps): """Each row of tensor `x` is repeated `num_reps` times along leading dimension.""" if not utils2.is_positive_int(num_reps): raise TypeError('Number of repetitions must be a positive integer.') shape = x.shape x = x.unsqueeze(1) x = x.expand(shape[0], num_reps, *shape[1:]) return merge_leading_dims(x, num_dims=2)
def __init__(self, permutation, dim=1): if permutation.ndimension() != 1: raise ValueError('Permutation must be a 1D tensor.') if not utils.is_positive_int(dim): raise ValueError('dim must be a positive integer.') super().__init__() self._dim = dim self.register_buffer('_permutation', permutation)
def tile(x, n): if not utils2.is_positive_int(n): raise TypeError('Argument \'n\' must be a positive integer.') x_ = x.reshape(-1) x_ = x_.repeat(n) x_ = x_.reshape(n, -1) x_ = x_.transpose(1, 0) x_ = x_.reshape(-1) return x_
def merge_leading_dims(x, num_dims): """Reshapes the tensor `x` such that the first `num_dims` dimensions are merged to one.""" if not utils2.is_positive_int(num_dims): raise TypeError('Number of leading dims must be a positive integer.') if num_dims > x.dim(): raise ValueError( 'Number of leading dims can\'t be greater than total number of dims.' ) new_shape = torch.Size([-1]) + x.shape[num_dims:] return torch.reshape(x, new_shape)
def __init__(self, features, using_cache=False): if not utils.is_positive_int(features): raise TypeError('Number of features must be a positive integer.') super().__init__() self.features = features self.bias = nn.Parameter(torch.zeros(features)) # Caching flag and values. self.using_cache = using_cache self.cache = LinearCache()
def __init__(self, features, dim=1): if not utils.is_positive_int(features): raise ValueError('Number of features must be a positive integer.') super().__init__(torch.arange(features - 1, -1, -1), dim)