本文整理汇总了Python中torch.Device方法的典型用法代码示例。如果您正苦于以下问题:Python torch.Device方法的具体用法?Python torch.Device怎么用?Python torch.Device使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类torch
的用法示例。
在下文中一共展示了torch.Device方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: sample_pseudo_labels
# 需要导入模块: import torch [as 别名]
# 或者: from torch import Device [as 别名]
def sample_pseudo_labels(num_classes, batch_size, device):
"""Sample pseudo-labels.
Args:
num_classes (int): number of classes in the dataset.
batch_size (int): size of mini-batch.
device (torch.Device): For compatibility.
Returns:
~torch.LongTensor or torch.cuda.LongTensor.
"""
pseudo_labels = torch.from_numpy(
numpy.random.randint(low=0, high=num_classes, size=(batch_size))
)
pseudo_labels = pseudo_labels.type(torch.long).to(device)
return pseudo_labels
示例2: global_device
# 需要导入模块: import torch [as 别名]
# 或者: from torch import Device [as 别名]
def global_device():
"""Returns the global device that torch.Tensors should be placed on.
Note: The global device is set by using the function
`garage.torch._functions.set_gpu_mode.`
If this functions is never called
`garage.torch._functions.device()` returns None.
Returns:
`torch.Device`: The global device that newly created torch.Tensors
should be placed on.
"""
# pylint: disable=global-statement
global _DEVICE
return _DEVICE
示例3: load_model
# 需要导入模块: import torch [as 别名]
# 或者: from torch import Device [as 别名]
def load_model(self, model_path, device='cpu'):
"""
Loads the model at specified path `model_path`. Uses GPU if
available.
Args:
model_path (str): path to model saved as SeparatonModel.
device (str or torch.Device): loads model on CPU or GPU. Defaults to
'cuda'.
Returns:
model (SeparationModel): Loaded model, nn.Module
metadata (dict): metadata associated with model, used for making
the input data into the model.
"""
model_dict = torch.load(model_path, map_location='cpu')
model = SeparationModel(model_dict['config'])
model.load_state_dict(model_dict['state_dict'])
device = device if torch.cuda.is_available() else 'cpu'
self.device = device
model = model.to(device).eval()
metadata = model_dict['metadata'] if 'metadata' in model_dict else {}
self.model = model
self.config = model_dict['config']
self.metadata = metadata
self.transform = self._get_transforms(
self.metadata['transforms'])
示例4: __init__
# 需要导入模块: import torch [as 别名]
# 或者: from torch import Device [as 别名]
def __init__(self, nn, decoder=kraken.lib.ctc_decoder.greedy_decoder, train: bool = False, device: str = 'cpu') -> None:
"""
Constructs a sequence recognizer from a VGSL model and a decoder.
Args:
nn (kraken.lib.vgsl.TorchVGSLModel): neural network used for recognition
decoder (func): Decoder function used for mapping softmax
activations to labels and positions
train (bool): Enables or disables gradient calculation
device (torch.Device): Device to run model on
"""
self.nn = nn
self.kind = ''
if train:
self.nn.train()
else:
self.nn.eval()
self.codec = self.nn.codec
self.decoder = decoder
self.train = train
self.device = device
if nn.model_type not in [None, 'recognition']:
raise ValueError('Models of type {} are not supported by TorchSeqRecognizer'.format(nn.model_type))
self.one_channel_mode = nn.one_channel_mode
self.seg_type = nn.seg_type
self.nn.to(device)
示例5: get_activations
# 需要导入模块: import torch [as 别名]
# 或者: from torch import Device [as 别名]
def get_activations(images, model, batch_size=64, dims=2048, device=None):
"""Calculates the activations of the pool_3 layer for all images.
Params:
-- images : Numpy array of dimension (n_images, 3, hi, wi). The values
must lie between 0 and 1.
-- model : Instance of inception model
-- batch_size : the images numpy array is split into batches with
batch size batch_size. A reasonable batch size depends
on the hardware.
-- dims : Dimensionality of features returned by Inception
-- device : torch.Device
Returns:
-- A numpy array of dimension (num images, dims) that contains the
activations of the given tensor when feeding inception with the
query tensor.
"""
model.eval()
d0 = images.shape[0]
if batch_size > d0:
print(('Warning: batch size is bigger than the data size. '
'Setting batch size to data size'))
batch_size = d0
n_batches = d0 // batch_size
n_used_imgs = n_batches * batch_size
pred_arr = np.empty((n_used_imgs, dims))
for i in range(n_batches):
start = i * batch_size
end = start + batch_size
batch = torch.from_numpy(images[start:end]).type(torch.FloatTensor)
if device is not None:
batch = batch.to(device)
with torch.no_grad():
pred = model(batch)[0]
# If model output is not scalar, apply global spatial average pooling.
# This happens if you choose a dimensionality not equal 2048.
if pred.shape[2] != 1 or pred.shape[3] != 1:
pred = F.adaptive_avg_pool2d(pred, output_size=(1, 1))
pred_arr[start:end] = pred.cpu().numpy().reshape(batch_size, -1)
return pred_arr
示例6: get_extended_attention_mask
# 需要导入模块: import torch [as 别名]
# 或者: from torch import Device [as 别名]
def get_extended_attention_mask(self, attention_mask: Tensor, input_shape: Tuple, device: device) -> Tensor:
"""Makes broadcastable attention mask and causal mask so that future and maked tokens are ignored.
Arguments:
attention_mask: torch.Tensor with 1 indicating tokens to ATTEND to
input_shape: tuple, shape of input_ids
device: torch.Device, usually self.device
Returns:
torch.Tensor with dtype of attention_mask.dtype
"""
# We can provide a self-attention mask of dimensions [batch_size, from_seq_length, to_seq_length]
# ourselves in which case we just need to make it broadcastable to all heads.
if attention_mask.dim() == 3:
extended_attention_mask = attention_mask[:, None, :, :]
elif attention_mask.dim() == 2:
# Provided a padding mask of dimensions [batch_size, seq_length]
# - if the model is a decoder, apply a causal mask in addition to the padding mask
# - if the model is an encoder, make the mask broadcastable to [batch_size, num_heads, seq_length, seq_length]
if self.config.is_decoder:
batch_size, seq_length = input_shape
seq_ids = torch.arange(seq_length, device=device)
causal_mask = seq_ids[None, None, :].repeat(batch_size, seq_length, 1) <= seq_ids[None, :, None]
# causal and attention masks must have same type with pytorch version < 1.3
causal_mask = causal_mask.to(attention_mask.dtype)
extended_attention_mask = causal_mask[:, None, :, :] * attention_mask[:, None, None, :]
else:
extended_attention_mask = attention_mask[:, None, None, :]
else:
raise ValueError(
"Wrong shape for input_ids (shape {}) or attention_mask (shape {})".format(
input_shape, attention_mask.shape
)
)
# Since attention_mask is 1.0 for positions we want to attend and 0.0 for
# masked positions, this operation will create a tensor which is 0.0 for
# positions we want to attend and -10000.0 for masked positions.
# Since we are adding it to the raw scores before the softmax, this is
# effectively the same as removing these entirely.
extended_attention_mask = extended_attention_mask.to(dtype=self.dtype) # fp16 compatibility
extended_attention_mask = (1.0 - extended_attention_mask) * -10000.0
return extended_attention_mask
示例7: __split0_send_q_to_diag_pr
# 需要导入模块: import torch [as 别名]
# 或者: from torch import Device [as 别名]
def __split0_send_q_to_diag_pr(
col, pr0, pr1, diag_process, comm, q_dict, key, q_dict_waits, q_dtype, q_device
):
"""
This function sends the merged Q to the diagonal process. Buffered send it used for sending
Q. This is needed for the Q calculation when two processes are merged and neither is the diagonal
process.
Parameters
----------
col : int
The current column used in the parent QR loop
pr0, pr1 : int, int
Rank of processes 0 and 1. These are the processes used in the calculation of q
diag_process : int
The rank of the process which has the tile along the diagonal for the given column
comm : MPICommunication (ht.DNDarray.comm)
The communicator used. (Intended as the communication of the DNDarray 'a' given to qr)
q_dict : Dict
dictionary containing the Q values calculated for finding R
key : string
key for q_dict[col] which corresponds to the Q to send
q_dict_waits : Dict
Dictionary used in the collection of the Qs which are sent to the diagonal process
q_dtype : torch.type
Type of the Q tensor
q_device : torch.Device
Device of the Q tensor
Returns
-------
None, sets the values of q_dict_waits with the with *waits* for the values of Q, upper.shape,
and lower.shape
"""
if comm.rank not in [pr0, pr1, diag_process]:
return
# this is to send the merged q to the diagonal process for the forming of q
base_tag = "1" + str(pr1.item() if isinstance(pr1, torch.Tensor) else pr1)
if comm.rank == pr1:
q = q_dict[col][key][0]
u_shape = q_dict[col][key][1]
l_shape = q_dict[col][key][2]
comm.send(tuple(q.shape), dest=diag_process, tag=int(base_tag + "1"))
comm.Isend(q, dest=diag_process, tag=int(base_tag + "12"))
comm.send(u_shape, dest=diag_process, tag=int(base_tag + "123"))
comm.send(l_shape, dest=diag_process, tag=int(base_tag + "1234"))
if comm.rank == diag_process:
# q_dict_waits now looks like a
q_sh = comm.recv(source=pr1, tag=int(base_tag + "1"))
q_recv = torch.zeros(q_sh, dtype=q_dtype, device=q_device)
k = "p0" + str(pr0) + "p1" + str(pr1)
q_dict_waits[col][k] = []
q_wait = comm.Irecv(q_recv, source=pr1, tag=int(base_tag + "12"))
q_dict_waits[col][k].append([q_recv, q_wait])
q_dict_waits[col][k].append(comm.irecv(source=pr1, tag=int(base_tag + "123")))
q_dict_waits[col][k].append(comm.irecv(source=pr1, tag=int(base_tag + "1234")))
q_dict_waits[col][k].append(key[0])