Spaces:
Runtime error
Runtime error
| import torch | |
| import torch.nn as nn | |
| class PositionEmbeddings(nn.Module): | |
| def __init__(self, max_position_embeddings, hidden_size, eps=1e-12, dropout=0.1, inplace=True): | |
| super().__init__() | |
| self.position_embeddings = nn.Embedding( | |
| max_position_embeddings, hidden_size | |
| ) | |
| self.LayerNorm = nn.LayerNorm(hidden_size, eps=eps) | |
| self.dropout = nn.Dropout(dropout, inplace=inplace) | |
| self.register_buffer( | |
| "position_ids", torch.arange(max_position_embeddings).expand((1, -1)) | |
| ) | |
| def forward(self, embeddings, position_ids=None, offset=0): | |
| seq_length = embeddings.size()[1] | |
| if position_ids is None: | |
| position_ids = self.position_ids[:, offset:offset+seq_length].clone() | |
| position_embeddings = self.position_embeddings(position_ids) | |
| embeddings = embeddings + position_embeddings | |
| embeddings = self.LayerNorm(embeddings) | |
| embeddings = self.dropout(embeddings) | |
| return embeddings | |
| class PositionScore(nn.Module): | |
| def __init__(self, seq_len, shape=None, score_type="gaussian"): | |
| assert seq_len is not None or shape is not None, "seq_len or shape must be provided" | |
| self.cls_token = False | |
| if seq_len is not None: | |
| h = w = int(seq_len ** 0.5) | |
| elif isinstance(shape, int): | |
| h = w = shape | |
| else: | |
| h, w = shape | |
| self.h = h | |
| self.w = w | |
| def forward(self, tensor): | |
| bs, chn, m, n = tensor.shape | |