1. torch.as_tensor(data, dtype=None,device=None)->Tensor : 为data生成tensor。
这里data的数据类型可以是list、tuple、ndarray、scalar等
若data已经是tensor,且dtype和device与参数相同,则生成的tensor会和data共享内存。如果data是ndarray, 且dtype对应,devices为cpu,则同样共享内存。其他情况不共享内存。
import torch
import numpy as np
arr = np.array([1,2,3,4,5,6])
tensor = torch.as_tensor(arr)
这里是pytorch的torchvision中集成的一个检测代码的一个实际例子
class AnchorGenerator(nn.Module):
...
def generate_anchors(self, scales, aspect_ratios, dtype=torch.float32, device="cpu"):
# type: (List[int], List[float], int, Device) # noqa: F821
scales = torch.as_tensor(scales, dtype=dtype, device=device)
aspect_ratios = torch.as_tensor(aspect_ratios, dtype=dtype, device=device)
h_ratios = torch.sqrt(aspect_ratios)
w_ratios = 1 / h_ratios
ws = (w_ratios[:, None] * scales[None, :]).view(-1)
hs = (h_ratios[:, None] * scales[None, :]).view(-1)
base_anchors = torch.stack([-ws, -hs, ws, hs], dim=1) / 2
return base_anchors.round()
2. torch.meshgrid()函数的用法
torch.meshgrid()函数是用来生成网格的,因此也可以用于坐标生成。
函数的输入必须是数据类型相同的一维张量, 输出也是两个张量。其中输出张量的行数为第一个输入张量中元素的个数, 列数为第二个输入张量中元素的个数。
第一个输出张量填充了第一个输入张量中的元素, 每一行的元素相同;第二个输出张量填充了第二个输入张量中的元素, 每一列的元素相同
import torch
a = torch.tensor([1, 2, 3, 4])
b = torch.tensor([5, 6, 7])
x, y = torch.meshgrid(a, b)
print(x)
print(y)
#######
tensor([[1, 1, 1],
[2, 2, 2],
[3, 3, 3]