美文网首页
pyTorch 数据运算

pyTorch 数据运算

作者: baiyang白杨 | 来源:发表于2019-05-15 19:27 被阅读0次

    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   , 开方  **\frac{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 数据运算

          本文链接:https://www.haomeiwen.com/subject/ixxmaqtx.html