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
  • 相关阅读:
    【已解决】github中git push origin master出错:error: failed to push some refs to
    好记心不如烂笔头,ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题
    THINKPHP 5.0目录结构
    thinkphp5.0入口文件
    thinkphp5.0 生命周期
    thinkphp5.0 架构
    Django template
    Django queryset
    Django model
    Python unittest
  • 原文地址:https://www.cnblogs.com/monkeyT/p/9838190.html
Copyright © 2011-2022 走看看