pytorch 切片(上)

作者: zidea | 来源:发表于2020-08-17 21:26 被阅读0次
    slice.jpeg

    切片的英文是 slice,是将整体进行切分,成为切片之后我们就可以从中任意取数据。使用 slice 技术我们可以多维度空间内随意获取想要的数据块。今天我们来看一看如何通过 pytorch 提供 api 来对数据进行自由获取数据。

    a = torch.rand(4,3,28,28)
    

    使用 torch 随机生产一个数据,模拟图片数据集 4 张图片,3 表示通道数据,在图片数据集最后两个维度通常是图片宽度和高度。怎么理解高纬度数据结构,通常将最后两个维度看成一个平面,然后倒数 3 维度形成一个立方体,最后 4 维度可以理解为多个立方体罗列而得到。如何在多出一个维度就可以将其后面维度看成一个整理,这个维度就是装载这些集合容器。

    container.jpeg
    a[0,0].shape
    

    输出torch.Size([28, 28]) 表示图片大小是28 \times 28,如何理解这次查找,0 表示第一张图片,第二个 0 表示 1 通道,所得就得到第 1 张图片的第 1 个通道的数据。

    a[0,0,2,4]
    

    表示第 1 张图片第 1 通道的 2 列 4 行处像素值。

    tensor(0.3626)
    
    a[:2].shape
    

    这里拿的前两张图片数据数据,这里冒号表示取值范围,在此例冒号前省略表示从 0 开始到1 结束,在计算机中通常是左闭右开表示一个区间。所以0 和 1 两张图片的数据集,没有限制范围表示全部都取

    torch.Size([2, 3, 28, 28])
    
    a[:2,:1].shape
    

    这里在上面基础对通道也进行限制,仅取第 1 通道,这里:1表示取 0 通道这个应该不难理解

    torch.Size([2, 1, 28, 28])
    

    如果在某一个维度上使用冒号,而且冒号两边不给任何值表示没有任何限制,这种情也可以省略不写。

    a[:2,1:,:,:].shape
    

    这里在第 2 维度使用 -1 作为起始值,在数值前面加符号表示从后面计算位数向前1 位

    a[:2,-1:,:,:].shape
    
    torch.Size([2, 1, 28, 28])
    

    这里重点说一下,0:28:2表示从 0 取到 28 然后紧接着冒号后的 2 表示步进就是 2 作为步进进行取值。

    a[:,:,0:28:2,0:28:2].shape
    
    torch.Size([4, 3, 14, 14])
    

    相关文章

      网友评论

        本文标题:pytorch 切片(上)

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