torch基础
一、torch.Tensors https://pytorch-cn.readthedocs.io/zh/latest/package_references/Tensor/
输出格式设置:torch.set_printoptions(precision=3, sci_mode=False) 这里禁用科学计数法输出
1、tensor类型
torch.IntTensor() 接受三种参数
- torch.IntTensor([[1,2,3],[4,5,6]]) #随机初始化
- torch.IntTensor(np.arange(6).reshape(2,3))
- torch.IntTensor(2,3).zero_()
①.zero_()尾巴的使用 常见用法
.add_(value) .abs_() .sin_() .cos_() .eq_(value) .floor() . x.dim()-> int len(x)==x.shape[0]
②类型转换
x.byte()、x.long()、x.float()、x.char()
③设备转换 tensor和numpy转换(numpy只能运行在cpu上)
y = x.cuda() x = y.cpu() n = t.numpy() t = torch.from_numpy(n)
④设备数据
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.to(device) mytensor.to(device)
二、torch基础 https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch
torch.is_tensor(obj)->bool
torch.numel(input)->int #返回张量中元素个数
1、创建Tensor
torch.eye(3)#返回3维单位方阵
torch.from_numpy(np.ones(shape=(2,3)))
torch.linspace(start(float), end(float), steps=100(int))
torch.ones(*sizes) #torch.ones(2,3)
torch.zeros(*sizes)
torch.rand(*sizes) #返回(0,1)的小数
torch.randn(*sizes) #均值为0,方差为1
torch.randperm(n) #返回0到n-1的数列,但随机排列
torch.arange(start(float), end(float), step=1(float))
2、索引,切片,连接,换位
torch.cat( [x, x, x], 0) #沿第0维将这3个x张量拼接,torch.stack(sequence, dim=0)则会增加一个维度
torch.chunk(x, int, dim=0) #沿第0维将x拆分为长为2的tensor list
torch.split(tensor, 2, dim=0) #沿着第0维拆分,每个分片内2行记录
torch.index_select(x, 0, torch.LongTensor([0, 2])) #沿着第0维挑选,第0 2行组成一个新的张量
torch.nonzero(x)->LongTensor #输出非0值元素的坐标list
torch.squeeze(x, 2) #默认去除所有shape=1的维度,如果第2维的shape==1则去掉第2维度,否则啥也不执行
torch.transpose(input, dim0, dim1) #转置torch.transpose(x,0,1) torch.transpose(x,1,0)
torch.unsqueeze(input, dim) #指定维插入一个shape=1
3、序列化 并行化
torch.save(obj,path) model = InceptionV3()
model = torch.load(path) _ = model.load_state_dict(torch.load(model_weight_path), strict=False)
torch.get_num_threads() → int #6 cpu并行线程数
torch.set_num_threads(int)
4、数学操作
①一元
torch.abs(x)、 torch.acos(x)、torch.cos(x)、torch.pow(x, value)、torch.log(x)、torch.ceil(x)
torch.exp(x) #torch.exp(torch.Tensor([0, math.log(2)])) == tensor([1., 2.])
torch.round(x) #四舍五入到最近的整数 torch.neg(x) #返回-x torch.reciprocal(x) #返回1.0/x
torch.sigmoid(x)、 torch.sqrt(x)
②二元
torch.add(x,value) #张量每个元素都加上标量value
+ - * /: 两个运算数维度相同,至少有一个对应的相等
torch.add(x,value=1,y) #x y都是张量,当shape[0]不同时,但元素数量必须相同,返回shape以x为准。value为标量,x += value * y 。
torch.addcdiv(x, value=1, y, z) #x += value* (y/z)
torch.addcmul(x, value=1, y, z) #x += value* (y*z)
torch.div(x, value/y) #当x y的shape[0]不匹配时,但元素数量必须相同
torch.mul(x, value/y)
torch.fmod(x, value) #value可整可浮,torch.fmod(torch.Tensor([1, -2, 3, 4]), 1.5) == torch.FloatTensor([1.0, -0.5, 0.0, 1.0])
torch.frac(x) #返回小数部分
torch.trunc(x) #返回整数部分
torch.maximum(x, y) torch.minimum(x, y)
5、Reduction operation
torch.clamp(x, min, max) #x中元素小于min则置为min
torch.lerp(x, y, weight(float)) #线性插值,x y都是tensor,weight是标量,返回x + weight*(y - x)
torch.reciprocal(x, dim) #指定维度的累计积 yi=x1+x2+x3+...+xi
torch.cumsum(x, dim) #指定维度的累计和 yi=x1+x2+x3+...+xi
torch.dist(x, y, p=2) #返回(x - y)的p范数
torch.norm(x, p=2) #输入张量的p范数
torch.median(x, dim=-1) #指定维度上的中位数
torch.mode(x, dim=-1) #指定维度上的众数值
②均值方差,总和总积
torch.mean(x) # 所有元素的均值, dim表示消去某一维度的意思
torch.mean(x, dim) #指定维度上的均值
torch.sum(x)
torch.sum(x, dim)
torch.var(x) #所有元素的方差
torch.var(x,dim)
torch.prod(x) #所有元素的积
torch.prod(x, dim)
torch.std(x) #所有元素的标准差
torch.std(x, dim)
6、比较操作
torch.eq(x, y) #x = torch.rand(2,3); y = torch.randn(2,3);test = torch.eq(x,y) ,x y test的shape相同,test元素的值为bool类型。
# eq==, ge>=, gt>,ne!=, le<=, ge<
torch.max(x) # 返回x中元素最大值
torch.max(x, dim) #返回x中指定维度上的最大值
torch.kthvalue(x, dim) #返回x中指定维度上的第k小的值
torch.sort(input, dim=None, descending=False) #默认输出 按最后一维降序排序的结果
torch.topk(input, k, dim=None) #默认输出 按最后一维的k个最大值(维度内部降序排好)
2021-10-19 15:32:31