pyTorch 数据运算

1.张量的简介

张量也可以称为多维矩阵。例如,标量: 为0维张量         向量:为1维张量           矩阵:为2维张量 .......

张量除了有维度、大小和元素个数之外,还有元素的类型,例如: torch.float16, torch.float32, torch.int16, torch.int32......

:在pyTorch中,函数名都是小写,类名的首字母大写。

torch.arange()和torch.range()的区别:

torch.arange(start, end, step)   返回一个以start为首项, 以end为尾项,以step为公差的等差数列。"不包含end"

torch.range(start, end, step)  返回一个以start为首项, 以end为尾项,以step为公差的等差数列。"但是包含end"

另外,torch.linspace(start, end, steps)   也可以返回一个等差数列,但是该数列以start 为起点,以end为终点,等间距地取steps个数。(包含start和end)

(1)张量的重排

tensor.reshape(r, c, k)    将张量tensor各个维度的大小改变为(r, c, k)

tensor.squeeze()    表示将张量tensor中大小为1的维度去掉

tensor.unsqueeze(dim)    表示在张量tensor指定的维度dim上增加一个大小为1的维度

tensor.permute(2, 0, 1,3)    表示对张量tensor的维度进行重新排列

tensor.transpose(0, 2)     表示将张量tensor指定的两个维度0 和 2 进行互换

(2)张量中部分数据的选择

tensor.index_select(1, [1, 4, 5])    表示将张量tensor第二个维度,索引为1,4,5的数据挑选出来,其余数据丢掉

tensor.masked_select(mask)     其中mask是一个与tensor大小相同的张量,且其所有元素为1或者0,该函数的作用是将mask张量中值为1的位置的数据挑选出来,将其余数据丢掉,返回值由挑选出来的元素组成的1维张量。 

(3)张量的扩张与拼接

tensor.repeat(x, y, z)   表示将张量tensor在三个维度上分别重复x, y, z次, 重复之后只是各个维度元素的数量增加了,张量的维度并没有改变

torch.cat([t1, t2], k)      表示将张量他t1和t2在维度k上进行拼接,注意:拼接完后张量的维度并没有变化。

torch.stack([t1, t2], k)      表示将张量t1和t2在维度k上进行拼接,拼接之后维度会增加1。 这种方式要求被拼接的张量t1, t2必须大小形状相同,增加的维度的大小等于拼接的张量的个数。

tensor.expand(x, y, z ...)   表示将张量tensor进行扩张,例如:

>>> x = torch.Tensor([[1], [2], [3]])

>>> x.size()

torch.Size([3, 1])

>>> x.expand(3, 4)

tensor([[ 1., 1., 1., 1.],

[ 2., 2., 2., 2.],

[ 3., 3., 3., 3.]])

(4)scatter 函数

torch.Tensor scatter_(dimindexsrc) → Tensor分散操作

将张量src中的各个元素,按照index张量中指定的索引位置,写入到张量Tensor中。此函数中index张量的大小一般大于或等于src张量。例如,该函数可以用来进行one-hot编码:

y_vec_ = torch.zeros((self.batch_size, self.class_num)).scatter_(1, y_.type(torch.LongTensor).unsqueeze(1), 1)    

其中,class_num=10, y_= [ 5, 2, 6, 2, 9, 3, 0, 8, 2, ...... ] 的数字向量, y_vec便是对y_进行one-hot编码的结果。 

2.张量的运算

(1)张量的初等运算

加法 +  , 减法 - , 乘法 *   , 除法 / , 乘方 **k   , 开方  **  。 这些运算要求参与运算的张量必须大小形状相同,张量的这些运算都是逐个元素进行运算,运算的结果为大小和形状都相同的张量。


3. pyTorch中使用GPU

(1)使用GPU进行运算

首先,可以根据语句 torch.cuda.is_available() 的返回值来判断GPU是否可用;通过torch.cuda.device_count()可以获得能够使用的GPU数量。然后调用GPU进行运算的方法为:

1)通过cuda() 方法将Tensor迁移到现存中去,具体操作为: Tensor.cuda()

2)使用.cuda() 将Variable迁移到显存中去,具体操作为:Variable.cuda()

3)对于模型来说,也是同样的方式,使用.cuda() 方法可以将网络模型放到显存上去, 具体操作为: model.cuda()

(2)使用指定的GPU运算

1)通过以下语句设置使用的GPU的id

import  os

os.environ["CUDA_VISIBLE_DEVICES"] ="id"

2)使用函数set_device

import  torch 

torch.cuda.set_device(id)

(3)同时使用多GPU进行训练

Pytorch 的多 GPU 处理接口是torch.nn.DataParallel(module, device_ids),其中module参数是所要执行的模型,而device_ids则是指定并行的 GPU id 列表。

你可能感兴趣的:(pyTorch 数据运算)