Python torch.ByteTensor() Examples
The following are 30
code examples of torch.ByteTensor().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
torch
, or try the search function
.
Example #1
Source File: options.py From pytorch-distributed with MIT License | 6 votes |
def __init__(self): super(MemoryParams, self).__init__() if self.memory_type == "shared": if self.agent_type == "dqn": self.memory_size = 50000 elif self.agent_type == "ddpg": self.memory_size = 50000 self.enable_per = False # TODO: not completed for now: prioritized experience replay # dtype for states if "mlp" in self.model_type: # self.dtype = torch.float32 # somehow passing in dtype causes error in mp self.tensortype = torch.FloatTensor elif "cnn" in self.model_type: # save image as byte to save space # self.dtype = torch.uint8 # somehow passing in dtype causes error in mp self.tensortype = torch.ByteTensor self.enable_per = False # prioritized experience replay if self.enable_per: self.priority_exponent = 0.5 # TODO: rainbow: 0.5, distributed: 0.6 self.priority_weight = 0.4
Example #2
Source File: __init__.py From sato with Apache License 2.0 | 6 votes |
def decode(self, emissions: torch.Tensor, mask: Optional[torch.ByteTensor] = None) -> List[List[int]]: """Find the most likely tag sequence using Viterbi algorithm. Args: emissions (`~torch.Tensor`): Emission score tensor of size ``(seq_length, batch_size, num_tags)`` if ``batch_first`` is ``False``, ``(batch_size, seq_length, num_tags)`` otherwise. mask (`~torch.ByteTensor`): Mask tensor of size ``(seq_length, batch_size)`` if ``batch_first`` is ``False``, ``(batch_size, seq_length)`` otherwise. Returns: List of list containing the best tag sequence for each batch. """ self._validate(emissions, mask=mask) if mask is None: mask = emissions.new_ones(emissions.shape[:2], dtype=torch.uint8) if self.batch_first: emissions = emissions.transpose(0, 1) mask = mask.transpose(0, 1) return self._viterbi_decode(emissions, mask)
Example #3
Source File: functional.py From torch-toolbox with BSD 3-Clause "New" or "Revised" License | 6 votes |
def to_tensor(pic): """Convert a ``numpy.ndarray`` image to tensor. See ``ToTensor`` for more details. Args: pic (numpy.ndarray): Image to be converted to tensor. Returns: Tensor: Converted image. """ if _is_numpy_image(pic): if pic.ndim == 2: pic = cv2.cvtColor(pic, cv2.COLOR_GRAY2RGB) img = torch.from_numpy(pic.transpose((2, 0, 1))) # backward compatibility if isinstance(img, torch.ByteTensor): return img.float().div(255) else: return img else: raise TypeError('pic should be ndarray. Got {}.'.format(type(pic)))
Example #4
Source File: functional.py From opencv_transforms with MIT License | 6 votes |
def to_tensor(pic): """Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor. See ``ToTensor`` for more details. Args: pic (PIL Image or numpy.ndarray): Image to be converted to tensor. Returns: Tensor: Converted image. """ if not(_is_numpy_image(pic)): raise TypeError('pic should be ndarray. Got {}'.format(type(pic))) # handle numpy array img = torch.from_numpy(pic.transpose((2, 0, 1))) # backward compatibility if isinstance(img, torch.ByteTensor) or img.dtype==torch.uint8: return img.float().div(255) else: return img
Example #5
Source File: densepose_uv.py From Parsing-R-CNN with MIT License | 6 votes |
def __getitem__(self, item): if isinstance(item, torch.ByteTensor): if item.sum() == len(item): dp_uvs = self.dp_uvs else: dp_uvs = [] for i in range(len(self.dp_uvs)): if item[i]: dp_uvs.append(self.dp_uvs[i]) else: dp_uvs = [] for i in range(len(item)): dp_uvs.append(self.dp_uvs[item[i]]) uv = DenseposeUVs(dp_uvs, self.size, self.flip) return uv
Example #6
Source File: w2l_decoder.py From fairseq with MIT License | 6 votes |
def decode(self, emissions): B, T, N = emissions.size() hypos = [] if self.asg_transitions is None: transitions = torch.FloatTensor(N, N).zero_() else: transitions = torch.FloatTensor(self.asg_transitions).view(N, N) viterbi_path = torch.IntTensor(B, T) workspace = torch.ByteTensor(CpuViterbiPath.get_workspace_size(B, T, N)) CpuViterbiPath.compute( B, T, N, get_data_ptr_as_bytes(emissions), get_data_ptr_as_bytes(transitions), get_data_ptr_as_bytes(viterbi_path), get_data_ptr_as_bytes(workspace), ) return [ [{"tokens": self.get_tokens(viterbi_path[b].tolist()), "score": 0}] for b in range(B) ]
Example #7
Source File: __init__.py From yolo2-pytorch with GNU Lesser General Public License v3.0 | 6 votes |
def fit_positive(rows, cols, yx_min, yx_max, anchors): device_id = anchors.get_device() if torch.cuda.is_available() else None batch_size, num, _ = yx_min.size() num_anchors, _ = anchors.size() valid = torch.prod(yx_min < yx_max, -1) center = (yx_min + yx_max) / 2 ij = torch.floor(center) i, j = torch.unbind(ij.long(), -1) index = i * cols + j anchors2 = anchors / 2 iou_matrix = utils.iou.torch.iou_matrix((yx_min - center).view(-1, 2), (yx_max - center).view(-1, 2), -anchors2, anchors2).view(batch_size, -1, num_anchors) iou, index_anchor = iou_matrix.max(-1) _positive = [] cells = rows * cols for valid, index, index_anchor in zip(torch.unbind(valid), torch.unbind(index), torch.unbind(index_anchor)): index, index_anchor = (t[valid] for t in (index, index_anchor)) t = utils.ensure_device(torch.ByteTensor(cells, num_anchors).zero_(), device_id) t[index, index_anchor] = 1 _positive.append(t) return torch.stack(_positive)
Example #8
Source File: help_function.py From ext_portrait_segmentation with MIT License | 6 votes |
def __call__(self, gray_image): size = gray_image.size() #print(size) color_image = torch.ByteTensor(3, size[1], size[2]).fill_(0) #color_image = torch.ByteTensor(3, size[0], size[1]).fill_(0) #for label in range(1, len(self.cmap)): for label in range(0, len(self.cmap)): mask = gray_image[0] == label #mask = gray_image == label color_image[0][mask] = self.cmap[label][0] color_image[1][mask] = self.cmap[label][1] color_image[2][mask] = self.cmap[label][2] return color_image
Example #9
Source File: opencv_functional.py From deep-smoke-machine with BSD 3-Clause "New" or "Revised" License | 6 votes |
def to_tensor(pic): """Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor. See ``ToTensor`` for more details. Args: pic (PIL Image or numpy.ndarray): Image to be converted to tensor. Returns: Tensor: Converted image. """ if not(_is_numpy_image(pic)): raise TypeError('pic should be ndarray. Got {}'.format(type(pic))) # handle numpy array img = torch.from_numpy(pic.transpose((2, 0, 1))) # backward compatibility if isinstance(img, torch.ByteTensor) or img.dtype==torch.uint8: return img.float() else: return img
Example #10
Source File: multilingual_masked_lm.py From fairseq with MIT License | 6 votes |
def _get_whole_word_mask(self): # create masked input and targets if self.args.mask_whole_words: bpe = encoders.build_bpe(self.args) if bpe is not None: def is_beginning_of_word(i): if i < self.source_dictionary.nspecial: # special elements are always considered beginnings return True tok = self.source_dictionary[i] if tok.startswith('madeupword'): return True try: return bpe.is_beginning_of_word(tok) except ValueError: return True mask_whole_words = torch.ByteTensor(list( map(is_beginning_of_word, range(len(self.source_dictionary))) )) else: mask_whole_words = None return mask_whole_words
Example #11
Source File: dynamic_crf_layer.py From fairseq with MIT License | 6 votes |
def forward(self, emissions, targets, masks, beam=None): """ Compute the conditional log-likelihood of a sequence of target tokens given emission scores Args: emissions (`~torch.Tensor`): Emission score are usually the unnormalized decoder output ``(batch_size, seq_len, vocab_size)``. We assume batch-first targets (`~torch.LongTensor`): Sequence of target token indices ``(batch_size, seq_len) masks (`~torch.ByteTensor`): Mask tensor with the same size as targets Returns: `~torch.Tensor`: approximated log-likelihood """ numerator = self._compute_score(emissions, targets, masks) denominator = self._compute_normalizer(emissions, targets, masks, beam) return numerator - denominator
Example #12
Source File: utils.py From fairseq with MIT License | 6 votes |
def get_whole_word_mask(args, dictionary): bpe = encoders.build_bpe(args) if bpe is not None: def is_beginning_of_word(i): if i < dictionary.nspecial: # special elements are always considered beginnings return True tok = dictionary[i] if tok.startswith('madeupword'): return True try: return bpe.is_beginning_of_word(tok) except ValueError: return True mask_whole_words = torch.ByteTensor(list( map(is_beginning_of_word, range(len(dictionary))) )) return mask_whole_words return None
Example #13
Source File: model.py From LipReading with MIT License | 6 votes |
def forward(self, x, lengths): """ :param x: The input of size BxCxDxT :param lengths: The actual length of each sequence in the batch :return: Masked output from the module """ for module in self.seq_module: x = module(x) mask = torch.ByteTensor(x.size()).fill_(0) if x.is_cuda: mask = mask.cuda() for i, length in enumerate(lengths): length = length.item() if (mask[i].size(2) - length) > 0: mask[i].narrow(2, length, mask[i].size(2) - length).fill_(1) x = x.masked_fill(mask, 0) return x, lengths
Example #14
Source File: test_attention.py From ITDD with MIT License | 6 votes |
def test_masked_global_attention(self): source_lengths = torch.IntTensor([7, 3, 5, 2]) # illegal_weights_mask = torch.ByteTensor([ # [0, 0, 0, 0, 0, 0, 0], # [0, 0, 0, 1, 1, 1, 1], # [0, 0, 0, 0, 0, 1, 1], # [0, 0, 1, 1, 1, 1, 1]]) batch_size = source_lengths.size(0) dim = 20 memory_bank = Variable(torch.randn(batch_size, source_lengths.max(), dim)) hidden = Variable(torch.randn(batch_size, dim)) attn = onmt.modules.GlobalAttention(dim) _, alignments = attn(hidden, memory_bank, memory_lengths=source_lengths) # TODO: fix for pytorch 0.3 # illegal_weights = alignments.masked_select(illegal_weights_mask) # self.assertEqual(0.0, illegal_weights.data.sum())
Example #15
Source File: transform.py From LEDNet with MIT License | 6 votes |
def __call__(self, gray_image): size = gray_image.size() #print(size) color_image = torch.ByteTensor(3, size[1], size[2]).fill_(0) #color_image = torch.ByteTensor(3, size[0], size[1]).fill_(0) #for label in range(1, len(self.cmap)): for label in range(0, len(self.cmap)): mask = gray_image[0] == label #mask = gray_image == label color_image[0][mask] = self.cmap[label][0] color_image[1][mask] = self.cmap[label][1] color_image[2][mask] = self.cmap[label][2] return color_image
Example #16
Source File: distributed_util.py From ClassyVision with MIT License | 6 votes |
def broadcast_object(obj: Any) -> Any: if is_master(): buffer = io.BytesIO() torch.save(obj, buffer) data = bytearray(buffer.getbuffer()) length_tensor = torch.LongTensor([len(data)]) length_tensor = broadcast(length_tensor) data_tensor = torch.ByteTensor(data) data_tensor = broadcast(data_tensor) else: length_tensor = torch.LongTensor([0]) length_tensor = broadcast(length_tensor) data_tensor = torch.empty([length_tensor.item()], dtype=torch.uint8) data_tensor = broadcast(data_tensor) buffer = io.BytesIO(data_tensor.numpy()) obj = torch.load(buffer) return obj
Example #17
Source File: crf.py From fastNLP with Apache License 2.0 | 6 votes |
def forward(self, feats, tags, mask): r""" 用于计算CRF的前向loss,返回值为一个batch_size的FloatTensor,可能需要mean()求得loss。 :param torch.FloatTensor feats: batch_size x max_len x num_tags,特征矩阵。 :param torch.LongTensor tags: batch_size x max_len,标签矩阵。 :param torch.ByteTensor mask: batch_size x max_len,为0的位置认为是padding。 :return: torch.FloatTensor, (batch_size,) """ feats = feats.transpose(0, 1) tags = tags.transpose(0, 1).long() mask = mask.transpose(0, 1).float() all_path_score = self._normalizer_likelihood(feats, mask) gold_path_score = self._gold_score(feats, tags, mask) return all_path_score - gold_path_score
Example #18
Source File: seq2seq_decoder.py From fastNLP with Apache License 2.0 | 6 votes |
def init_state(self, encoder_output, encoder_mask): """ 初始化一个TransformerState用于forward :param torch.FloatTensor encoder_output: bsz x max_len x d_model, encoder的输出 :param torch.ByteTensor encoder_mask: bsz x max_len, 为1的位置需要attend。 :return: TransformerState """ if isinstance(encoder_output, torch.Tensor): encoder_output = encoder_output elif isinstance(encoder_output, (list, tuple)): encoder_output = encoder_output[0] # 防止是LSTMEncoder的输出结果 else: raise TypeError("Unsupported `encoder_output` for TransformerSeq2SeqDecoder") state = TransformerState(encoder_output, encoder_mask, num_decoder_layer=self.num_layers) return state
Example #19
Source File: dataloder.py From BeautyGAN_pytorch with MIT License | 6 votes |
def ToTensor(pic): # handle PIL Image if pic.mode == 'I': img = torch.from_numpy(np.array(pic, np.int32, copy=False)) elif pic.mode == 'I;16': img = torch.from_numpy(np.array(pic, np.int16, copy=False)) else: img = torch.ByteTensor(torch.ByteStorage.from_buffer(pic.tobytes())) # PIL image mode: 1, L, P, I, F, RGB, YCbCr, RGBA, CMYK if pic.mode == 'YCbCr': nchannel = 3 elif pic.mode == 'I;16': nchannel = 1 else: nchannel = len(pic.mode) img = img.view(pic.size[1], pic.size[0], nchannel) # put it from HWC to CHW format # yikes, this transpose takes 80% of the loading time/CPU img = img.transpose(0, 1).transpose(0, 2).contiguous() if isinstance(img, torch.ByteTensor): return img.float() else: return img
Example #20
Source File: crf.py From fastNLP with Apache License 2.0 | 5 votes |
def _normalizer_likelihood(self, logits, mask): r"""Computes the (batch_size,) denominator term for the log-likelihood, which is the sum of the likelihoods across all possible state sequences. :param logits:FloatTensor, max_len x batch_size x num_tags :param mask:ByteTensor, max_len x batch_size :return:FloatTensor, batch_size """ seq_len, batch_size, n_tags = logits.size() alpha = logits[0] if self.include_start_end_trans: alpha = alpha + self.start_scores.view(1, -1) flip_mask = mask.eq(False) for i in range(1, seq_len): emit_score = logits[i].view(batch_size, 1, n_tags) trans_score = self.trans_m.view(1, n_tags, n_tags) tmp = alpha.view(batch_size, n_tags, 1) + emit_score + trans_score alpha = torch.logsumexp(tmp, 1).masked_fill(flip_mask[i].view(batch_size, 1), 0) + \ alpha.masked_fill(mask[i].eq(True).view(batch_size, 1), 0) if self.include_start_end_trans: alpha = alpha + self.end_scores.view(1, -1) return torch.logsumexp(alpha, 1)
Example #21
Source File: comm.py From Res2Net-maskrcnn with MIT License | 5 votes |
def all_gather(data): """ Run all_gather on arbitrary picklable data (not necessarily tensors) Args: data: any picklable object Returns: list[data]: list of data gathered from each rank """ world_size = get_world_size() if world_size == 1: return [data] # serialized to a Tensor buffer = pickle.dumps(data) storage = torch.ByteStorage.from_buffer(buffer) tensor = torch.ByteTensor(storage).to("cuda") # obtain Tensor size of each rank local_size = torch.IntTensor([tensor.numel()]).to("cuda") size_list = [torch.IntTensor([0]).to("cuda") for _ in range(world_size)] dist.all_gather(size_list, local_size) size_list = [int(size.item()) for size in size_list] max_size = max(size_list) # receiving Tensor from all ranks # we pad the tensor because torch all_gather does not support # gathering tensors of different shapes tensor_list = [] for _ in size_list: tensor_list.append(torch.ByteTensor(size=(max_size,)).to("cuda")) if local_size != max_size: padding = torch.ByteTensor(size=(max_size - local_size,)).to("cuda") tensor = torch.cat((tensor, padding), dim=0) dist.all_gather(tensor_list, tensor) data_list = [] for size, tensor in zip(size_list, tensor_list): buffer = tensor.cpu().numpy().tobytes()[:size] data_list.append(pickle.loads(buffer)) return data_list
Example #22
Source File: transform.py From LEDNet with MIT License | 5 votes |
def __call__(self, gray_image): size = gray_image.size() color_image = torch.ByteTensor(3, size[1], size[2]).fill_(0) #for label in range(1, len(self.cmap)): for label in range(0, len(self.cmap)): mask = gray_image[0] == label color_image[0][mask] = self.cmap[label][0] color_image[1][mask] = self.cmap[label][1] color_image[2][mask] = self.cmap[label][2] return color_image
Example #23
Source File: train.py From sscdnet with MIT License | 5 votes |
def __call__(self, gray_image): size = gray_image.size() color_image = torch.ByteTensor(3, size[1], size[2]).fill_(0) for label in range(0, len(self.cmap)): mask = gray_image[0] == label color_image[0][mask] = self.cmap[label][0] color_image[1][mask] = self.cmap[label][1] color_image[2][mask] = self.cmap[label][2] return color_image
Example #24
Source File: comm.py From Parsing-R-CNN with MIT License | 5 votes |
def all_gather(data): """ Run all_gather on arbitrary picklable data (not necessarily tensors) Args: data: any picklable object Returns: list[data]: list of data gathered from each rank """ world_size = get_world_size() if world_size == 1: return [data] # serialized to a Tensor buffer = pickle.dumps(data) storage = torch.ByteStorage.from_buffer(buffer) tensor = torch.ByteTensor(storage).to("cuda") # obtain Tensor size of each rank local_size = torch.LongTensor([tensor.numel()]).to("cuda") size_list = [torch.LongTensor([0]).to("cuda") for _ in range(world_size)] dist.all_gather(size_list, local_size) size_list = [int(size.item()) for size in size_list] max_size = max(size_list) # receiving Tensor from all ranks # we pad the tensor because torch all_gather does not support # gathering tensors of different shapes tensor_list = [] for _ in size_list: tensor_list.append(torch.ByteTensor(size=(max_size,)).to("cuda")) if local_size != max_size: padding = torch.ByteTensor(size=(max_size - local_size,)).to("cuda") tensor = torch.cat((tensor, padding), dim=0) dist.all_gather(tensor_list, tensor) data_list = [] for size, tensor in zip(size_list, tensor_list): buffer = tensor.cpu().numpy().tobytes()[:size] data_list.append(pickle.loads(buffer)) return data_list
Example #25
Source File: spatial_transforms.py From TKP with Apache License 2.0 | 5 votes |
def __call__(self, pic): """ Args: pic (PIL.Image or numpy.ndarray): Image to be converted to tensor. Returns: Tensor: Converted image. """ if isinstance(pic, np.ndarray): # handle numpy array img = torch.from_numpy(pic.transpose((2, 0, 1))) # backward compatibility return img.float().div(self.norm_value) if accimage is not None and isinstance(pic, accimage.Image): nppic = np.zeros( [pic.channels, pic.height, pic.width], dtype=np.float32) pic.copyto(nppic) return torch.from_numpy(nppic) # handle PIL Image if pic.mode == 'I': img = torch.from_numpy(np.array(pic, np.int32, copy=False)) elif pic.mode == 'I;16': img = torch.from_numpy(np.array(pic, np.int16, copy=False)) else: img = torch.ByteTensor(torch.ByteStorage.from_buffer(pic.tobytes())) # PIL image mode: 1, L, P, I, F, RGB, YCbCr, RGBA, CMYK if pic.mode == 'YCbCr': nchannel = 3 elif pic.mode == 'I;16': nchannel = 1 else: nchannel = len(pic.mode) img = img.view(pic.size[1], pic.size[0], nchannel) # put it from HWC to CHW format # yikes, this transpose takes 80% of the loading time/CPU img = img.transpose(0, 1).transpose(0, 2).contiguous() if isinstance(img, torch.ByteTensor): return img.float().div(self.norm_value) else: return img
Example #26
Source File: crf.py From fastNLP with Apache License 2.0 | 5 votes |
def _gold_score(self, logits, tags, mask): r""" Compute the score for the gold path. :param logits: FloatTensor, max_len x batch_size x num_tags :param tags: LongTensor, max_len x batch_size :param mask: ByteTensor, max_len x batch_size :return:FloatTensor, batch_size """ seq_len, batch_size, _ = logits.size() batch_idx = torch.arange(batch_size, dtype=torch.long, device=logits.device) seq_idx = torch.arange(seq_len, dtype=torch.long, device=logits.device) # trans_socre [L-1, B] mask = mask.eq(True) flip_mask = mask.eq(False) trans_score = self.trans_m[tags[:seq_len - 1], tags[1:]].masked_fill(flip_mask[1:, :], 0) # emit_score [L, B] emit_score = logits[seq_idx.view(-1, 1), batch_idx.view(1, -1), tags].masked_fill(flip_mask, 0) # score [L-1, B] score = trans_score + emit_score[:seq_len - 1, :] score = score.sum(0) + emit_score[-1].masked_fill(flip_mask[-1], 0) if self.include_start_end_trans: st_scores = self.start_scores.view(1, -1).repeat(batch_size, 1)[batch_idx, tags[0]] last_idx = mask.long().sum(0) - 1 ed_scores = self.end_scores.view(1, -1).repeat(batch_size, 1)[batch_idx, tags[last_idx, batch_idx]] score = score + st_scores + ed_scores # return [B,] return score
Example #27
Source File: dynamic_crf_layer.py From fairseq with MIT License | 5 votes |
def forward_decoder(self, emissions, masks=None, beam=None): """ Find the most likely output sequence using Viterbi algorithm. Args: emissions (`~torch.Tensor`): Emission score are usually the unnormalized decoder output ``(batch_size, seq_len, vocab_size)``. We assume batch-first masks (`~torch.ByteTensor`): Mask tensor with the same size as targets Returns: `~torch.LongTensor`: decoded sequence from the CRF model """ return self._viterbi_decode(emissions, masks, beam)
Example #28
Source File: __init__.py From sato with Apache License 2.0 | 5 votes |
def _validate( self, emissions: torch.Tensor, tags: Optional[torch.LongTensor] = None, mask: Optional[torch.ByteTensor] = None) -> None: if emissions.dim() != 3: raise ValueError(f'emissions must have dimension of 3, got {emissions.dim()}') if emissions.size(2) != self.num_tags: raise ValueError( f'expected last dimension of emissions is {self.num_tags}, ' f'got {emissions.size(2)}') if tags is not None: if emissions.shape[:2] != tags.shape: raise ValueError( 'the first two dimensions of emissions and tags must match, ' f'got {tuple(emissions.shape[:2])} and {tuple(tags.shape)}') if mask is not None: if emissions.shape[:2] != mask.shape: raise ValueError( 'the first two dimensions of emissions and mask must match, ' f'got {tuple(emissions.shape[:2])} and {tuple(mask.shape)}') no_empty_seq = not self.batch_first and mask[0].all() no_empty_seq_bf = self.batch_first and mask[:, 0].all() if not no_empty_seq and not no_empty_seq_bf: raise ValueError('mask of the first timestep must all be on')
Example #29
Source File: __init__.py From sato with Apache License 2.0 | 5 votes |
def _compute_score( self, emissions: torch.Tensor, tags: torch.LongTensor, mask: torch.ByteTensor) -> torch.Tensor: # emissions: (seq_length, batch_size, num_tags) # tags: (seq_length, batch_size) # mask: (seq_length, batch_size) assert emissions.dim() == 3 and tags.dim() == 2 assert emissions.shape[:2] == tags.shape assert emissions.size(2) == self.num_tags assert mask.shape == tags.shape assert mask[0].all() seq_length, batch_size = tags.shape mask = mask.float() # Start transition score and first emission # shape: (batch_size,) score = self.start_transitions[tags[0]] score += emissions[0, torch.arange(batch_size), tags[0]] for i in range(1, seq_length): # Transition score to next tag, only added if next timestep is valid (mask == 1) # shape: (batch_size,) score += self.transitions[tags[i - 1], tags[i]] * mask[i] # Emission score for next tag, only added if next timestep is valid (mask == 1) # shape: (batch_size,) score += emissions[i, torch.arange(batch_size), tags[i]] * mask[i] # End transition score # shape: (batch_size,) seq_ends = mask.long().sum(dim=0) - 1 # shape: (batch_size,) last_tags = tags[seq_ends, torch.arange(batch_size)] # shape: (batch_size,) score += self.end_transitions[last_tags] return score
Example #30
Source File: utils.py From BCQ with MIT License | 5 votes |
def sample(self): ind = np.random.randint(0, self.crt_size, size=self.batch_size) # Note + is concatenate here state = np.zeros(((self.batch_size, self.state_history) + self.state.shape[1:]), dtype=np.uint8) next_state = np.array(state) state_not_done = 1. next_not_done = 1. for i in range(self.state_history): # Wrap around if the buffer is filled if self.crt_size == self.max_size: j = (ind - i) % self.max_size k = (ind - i + 1) % self.max_size else: j = ind - i k = (ind - i + 1).clip(min=0) # If j == -1, then we set state_not_done to 0. state_not_done *= (j + 1).clip(min=0, max=1).reshape(-1, 1, 1) #np.where(j < 0, state_not_done * 0, state_not_done) j = j.clip(min=0) # State should be all 0s if the episode terminated previously state[:, i] = self.state[j] * state_not_done next_state[:, i] = self.state[k] * next_not_done # If this was the first timestep, make everything previous = 0 next_not_done *= state_not_done state_not_done *= (1. - self.first_timestep[j]).reshape(-1, 1, 1) return ( torch.ByteTensor(state).to(self.device).float(), torch.LongTensor(self.action[ind]).to(self.device), torch.ByteTensor(next_state).to(self.device).float(), torch.FloatTensor(self.reward[ind]).to(self.device), torch.FloatTensor(self.not_done[ind]).to(self.device) )