zoukankan      html  css  js  c++  java
  • 常用的Tensor操作

    常用的Tensor操作

    1、通过tensor.view方法可以调整tensor的形状,但必须保证调整去前后元素总数一致。view不会修改自身的数据,返回新的tensor与原tensor共享内存,即更改其中的一个,另一个也会跟这改变。
    2、实际中经常需要添加或减少某一维度,可用squeeze和unsqueeze这两函数。
    
    import torch as t
    a = t.arange(0,6)
    b = a.view(2,3)     #调整tensor的形状,不会修改自身数据
    c = a.view(-1,3)    #-1自动计算大小
    '''
    a = tensor([0, 1, 2, 3, 4, 5])
    b = tensor([[0, 1, 2],
            [3, 4, 5]])
    c = tensor([[0, 1, 2],
            [3, 4, 5]])'''
    b = b.unsqueeze(1)      #在第一维(下标从0开始)上增加“1”
    '''tensor([[[0, 1, 2]],
    
            [[3, 4, 5]]])'''
    c = c.unsqueeze(-2)
    '''tensor([[[0, 1, 2]],
    
            [[3, 4, 5]]])'''
    d = b.view(1,1,1,2,3)
    '''tensor([[[[[0, 1, 2],
               [3, 4, 5]]]]])'''
    d = d.squeeze(0)    #压缩第0维的“1”
    '''tensor([[[0, 1, 2],
             [3, 4, 5]]])'''
    d = d.squeeze()     #所有维度为“1”的压缩
    '''tensor([[0, 1, 2],
            [3, 4, 5]])'''
    
    3、resize是另一种可用调整size的方法,但与view不同,它可以修改tensor的尺寸。如果新尺寸超过原尺寸,会自动分配新的内存空间,而如果新尺寸小于原尺寸,则之前的数据依旧会被保存。
    b.resize_(1,3)      #resize_调整size,新尺寸小于原尺寸,则之前的保留
    '''tensor([[0, 1, 2]])'''
    b.resize_(3,3)      #resize_调整size,新尺寸大于原尺寸,会自动分配新的内存空间
    '''tensor([[                  0,                   1,                   2],
            [                  3,                   4,                   5],
            [7526747973031060338, 7306812055932138085, 8389969046800051066]])'''

    2018-10-23 17:59:12

    Monkey
  • 相关阅读:
    Python: Lambda Functions
    转:解决Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误
    Python 读取json文件
    (转)The windows boot configuration data file dose not contain a valid OS entry
    Python+PyQt5:停靠组件QDockWidget的实现
    Python零碎(一)
    (转)有关thread线程
    (转)有关Queue队列
    (转)Python中的random模块
    (转)python中的参数:*args和**kwargs
  • 原文地址:https://www.cnblogs.com/monkeyT/p/9838190.html
Copyright © 2011-2022 走看看