精华内容
下载资源
问答
  • 看代码,tensornumpy: a = torch.ones(2,2) b = a.numpy() c=np.array(a) #也可以转numpy数组 print(type(a)) print(type(b)) print(a) print(b) 输出tensor([[1., 1.], [1., 1.]]) [[1. 1.] [1. 1.]] ...
  • 主要介绍了PytorchTensorNumpy之间的转换的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • PytorchTensorNumpy数组的相互转化分为两种,第一种转化...使用numpy()函数可以将Tensor转化为Numpy数组: a=torch.ones(5) b=a.numpy() print(type(a)) print(type(b)) 输出: <class 'torch.Tensor'> &

    Pytorch中Tensor和Numpy数组的相互转化分为两种,第一种转化前后的对象共享相同的内存区域(即修改其中另外一个也会改变);第二种是二者并不共享内存区域。

    共享内存区域的转化

    这种涉及到numpy()from_numpy()两个函数。

    使用numpy()函数可以将Tensor转化为Numpy数组:

    a=torch.ones(5)
    b=a.numpy()
    print(type(a))
    print(type(b))
    

    输出:

    <class 'torch.Tensor'>
    <class 'numpy.ndarray'>
    

    与这个过程相反,使用from_numpy()函数可以将Numpy数组转化为Tensor:

    a=np.ones(5)
    b=torch.from_numpy(a)
    

    不共享内存区域的转化

    第二种方式就是通过torch.tensor()将Numpy转化为Tensor,这种方式会进行数据的拷贝,返回的Tensor与原来的数据并不共享内存。

    这个函数的具体介绍如下:

    函数原型:

    torch.tensor(data, *, dtype=None, device=None, requires_grad=False, pin_memory=False) → Tensor
    

    注意事项:

    torch.tensor()总会进行数据拷贝,如果我们有一个Tensor数据并且希望避免数据拷贝,那么需要使用torch.Tensor.requires_grad_()或torch.Tensor.detach()。如果我们有一个Numpy ndarray数据并且希望避免数据拷贝,那么需要使用torch.as_tensor()。

    When data is a tensor x, torch.tensor() reads out ‘the data’ from whatever it is passed, and constructs a leaf variable. Therefore torch.tensor(x) is equivalent to x.clone().detach() and torch.tensor(x, requires_grad=True) is equivalent to x.clone().detach().requires_grad_(True). The equivalents using clone() and detach() are recommended.

    参数:

    • data:(array_like) – Initial data for the tensor. Can be a list, tuple, NumPy ndarray, scalar, and other types.
    • dtype (torch.dtype, optional) – the desired data type of returned tensor. Default: if None, infers data type from data.
    • device (torch.device, optional) – the desired device of returned tensor. Default: if None, uses the current device for the default tensor type (see torch.set_default_tensor_type()). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.
    • requires_grad (bool, optional) – If autograd should record operations on the returned tensor. Default: False.
    • pin_memory (bool, optional) – If set, returned tensor would be allocated in the pinned memory. Works only for CPU tensors. Default: False.

    使用示例:

    #根据输入数据创建tensor
    torch.tensor([[0.1,1.2],[2.2,3.1],[4.9,5.2]])
    
    #创建tensor时指定数据类型及device
    torch.tensor([[0.1111,0.2222,0.3333]],dtype=torch.float64,device=torch.device('cuda:0'))
    
    #创建一个空tensor
    torch.tensor([])
    
    展开全文
  • pytorch如何Variable或Tensor转换为numpy

    万次阅读 2019-05-17 19:23:13
    当我们使用pytorch时候,我们常常需要Variable转换为numpyTensor转换为numpy;比如我们使用torch.Tensor和torch.FloatTensor的时候,我们 一、Tensornumpy之间的相互转化 1、Tensor张量转化numpy a = torch....

    当我们使用pytorch时候,我们常常需要将Variable转换为numpyTensor转换为numpy;比如我们使用torch.Tensortorch.FloatTensor的时候,我们

    一、Tensornumpy之间的相互转化

    1、Tensor张量转化为numpy

    a = torch.FloatTensor(2,3)
    print a.numpy();
    

    2、将numpy转换为Tensor张量

    a = np.ones(5)
    torch.from_numpy(a)
    

    二、Variablenumpy之间的相互转化

    1、Variable张量转化为numpy
    其实这里的转换和Tensornumpy之间的相互转化差不多,只是我们的需要先提取出来我们Variable中的数据即可,我们可以使用variable.data来将Variable转为Tensor

    import torch
    from torch.autograd import Variable
    
    a = Variable(torch.FloatTensor(2,3))
    print a.data.numpy()
    

    2、将numpy转换为Variable
    其实这个不需要过多的介绍,这个只是把numpy转化为torch并且再将torch转化为Variable

    import torch
    import numpy as np
    from torch.autograd import Variable
    
    a = np.ones(5)
    print Variable(torch.from_numpy(a))
    

    转自pytorch中文网

    实例

    # input numpy array
    In [91]: arr = np.arange(10, dtype=float32).reshape(5, 2)
    
    # input tensors in two different ways
    In [92]: t1, t2 = torch.Tensor(arr), torch.from_numpy(arr)
    
    # their types
    In [93]: type(arr), type(t1), type(t2)
    Out[93]: (numpy.ndarray, torch.FloatTensor, torch.FloatTensor)
    
    # ndarray 
    In [94]: arr
    Out[94]: 
    array([[ 0.,  1.],
           [ 2.,  3.],
           [ 4.,  5.],
           [ 6.,  7.],
           [ 8.,  9.]], dtype=float32)
    

    我知道PyTorch张量器共享 NumPy ndarrays 的内存缓冲区。因此,改变一个将反映在另一个。所以,在这里我正在切片并更新Tensor中的一些值t2

    In [98]: t2[:, 1] = 23.0
    

    正如预期的那样,它已经更新t2,arr因为它们共享相同的内存缓冲区。

    In [99]: t2
    Out[99]: 
    
      0  23
      2  23
      4  23
      6  23
      8  23
    [torch.FloatTensor of size 5x2]
    
    
    In [101]: arr
    Out[101]: 
    array([[  0.,  23.],
           [  2.,  23.],
           [  4.,  23.],
           [  6.,  23.],
           [  8.,  23.]], dtype=float32)
    

    但是,t1也在更新。请记住,t1使用torch.Tensor()while t2构建使用torch.from_numpy()

    In [100]: t1
    Out[100]: 
    
      0  23
      2  23
      4  23
      6  23
      8  23
    [torch.FloatTensor of size 5x2]
    
    展开全文
  • Pytorch:TensorNumpy

    2021-01-06 16:43:45
    由于Numpy历史悠久,支持丰富的操作,所以当遇到Tensor不支持的操作时,可先转成Numpy数组,处理后再转回tensor,其转换开销很小。 In[90]: import numpy as np a = np.ones([2, 3],dtype=np.float32) a Out[90...

    3.1.2 Tensor和Numpy

    Tensor和Numpy数组之间具有很高的相似性,彼此之间的互操作也非常简单高效。需要注意的是,Numpy和Tensor共享内存。由于Numpy历史悠久,支持丰富的操作,所以当遇到Tensor不支持的操作时,可先转成Numpy数组,处理后再转回tensor,其转换开销很小。

    In [90]:

    import numpy as np
    a = np.ones([2, 3],dtype=np.float32)
    a
    

    Out[90]:

    array([[1., 1., 1.],
           [1., 1., 1.]], dtype=float32)

    In [91]:

    b = t.from_numpy(a)
    b
    

    Out[91]:

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

    In [92]:

    b = t.Tensor(a) # 也可以直接将numpy对象传入Tensor
    b
    

    Out[92]:

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

    In [93]:

    a[0, 1]=100
    b
    

    Out[93]:

    tensor([[  1., 100.,   1.],
            [  1.,   1.,   1.]])

    In [94]:

    c = b.numpy() # a, b, c三个对象共享内存
    c
    

    Out[94]:

    array([[  1., 100.,   1.],
           [  1.,   1.,   1.]], dtype=float32)

    注意: 当numpy的数据类型和Tensor的类型不一样的时候,数据会被复制,不会共享内存。

    In [95]:

    a = np.ones([2, 3])
    # 注意和上面的a的区别(dtype不是float32)
    a.dtype
    

    Out[95]:

    dtype('float64')

    In [96]:

    b = t.Tensor(a) # 此处进行拷贝,不共享内存
    b.dtype
    

    Out[96]:

    torch.float32

    In [97]:

    c = t.from_numpy(a) # 注意c的类型(DoubleTensor)
    c
    

    Out[97]:

    tensor([[1., 1., 1.],
            [1., 1., 1.]], dtype=torch.float64)

    In [98]:

    a[0, 1] = 100
    b # b与a不共享内存,所以即使a改变了,b也不变
    

    Out[98]:

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

    In [99]:

    c # c与a共享内存
    

    Out[99]:

    tensor([[  1., 100.,   1.],
            [  1.,   1.,   1.]], dtype=torch.float64)

    注意: 不论输入的类型是什么,t.tensor都会进行数据拷贝,不会共享内存

    In [100]:

    tensor = t.tensor(a)
    

    In [101]:

    tensor[0,0]=0
    a
    

    Out[101]:

    array([[  1., 100.,   1.],
           [  1.,   1.,   1.]])

    广播法则(broadcast)是科学运算中经常使用的一个技巧,它在快速执行向量化的同时不会占用额外的内存/显存。 Numpy的广播法则定义如下:

    • 让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分通过在前面加1补齐
    • 两个数组要么在某一个维度的长度一致,要么其中一个为1,否则不能计算
    • 当输入数组的某个维度的长度为1时,计算时沿此维度复制扩充成一样的形状

    PyTorch当前已经支持了自动广播法则,但是笔者还是建议读者通过以下两个函数的组合手动实现广播法则,这样更直观,更不易出错:

    • unsqueeze或者view,或者tensor[None],:为数据某一维的形状补1,实现法则1
    • expand或者expand_as,重复数组,实现法则3;该操作不会复制数组,所以不会占用额外的空间。

    注意,repeat实现与expand相类似的功能,但是repeat会把相同数据复制多份,因此会占用额外的空间。

    In [102]:

    a = t.ones(3, 2)
    b = t.zeros(2, 3,1)
    

    In [103]:

    # 自动广播法则
    # 第一步:a是2维,b是3维,所以先在较小的a前面补1 ,
    #               即:a.unsqueeze(0),a的形状变成(1,3,2),b的形状是(2,3,1),
    # 第二步:   a和b在第一维和第三维形状不一样,其中一个为1 ,
    #               可以利用广播法则扩展,两个形状都变成了(2,3,2)
    a+b
    

    Out[103]:

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

    In [104]:

    # 手动广播法则
    # 或者 a.view(1,3,2).expand(2,3,2)+b.expand(2,3,2)
    a[None].expand(2, 3, 2) + b.expand(2,3,2)
    

    Out[104]:

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

    In [105]:

    # expand不会占用额外空间,只会在需要的时候才扩充,可极大节省内存
    e = a.unsqueeze(0).expand(10000000000000, 3,2)
    
    
    展开全文
  • TensorNumPy数据类型基础转换 TensorNumPy import torch # input x = torch.ones(5) y = x.numpy() # output print(x) tensor([1., 1., 1., 1., 1.]) print(y) array([1., 1., 1., 1., 1.], dtype=float32) ...

    Tensor与NumPy数据类型基础转换

    Tensor转NumPy

    import torch
    # input
    x = torch.ones(5)
    y = x.numpy()
    # output
    print(x)
    tensor([1., 1., 1., 1., 1.])
    print(y)
    array([1., 1., 1., 1., 1.], dtype=float32)
    print(x + 1)
    tensor([2., 2., 2., 2., 2.])
    print(y + 1)
    [2. 2. 2. 2. 2.]
    

    NumPy转Tensor(一)

    import numpy as np
    import torch
    # input
    x = np.ones(5)
    y = torch.from_numpy(x)
    # output
    print(x)
    array([1., 1., 1., 1., 1.])
    print(y)
    tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
    print(x + 1)
    [2. 2. 2. 2. 2.]
    print(y + 1)
    tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
    

    NumPy转Tensor(二)

    # input
    x = np.ones(5)
    z = torch.tensor(x)
    # output
    print(x)
    array([1., 1., 1., 1., 1.])
    print(z)
    tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
    print(x + 1)
    [2. 2. 2. 2. 2.]
    print(z + 1)
    tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
    
    展开全文
  • pytorch: tensornumpy之间的转换

    万次阅读 2020-11-13 15:49:53
    训练时,输入一般为tensor,但在计算误差时一般用numpytensornumpy转换采用numpy()和from_numpy这两个函数机型转换。值得注意的是,这两个函数所产生的tensornumpy是共享相同内存的,而且两者之间转换很快。...
  • pytorchtensornumpy数组转换

    千次阅读 2020-10-08 10:46:07
    看代码,tensornumpy: a = torch.ones(2,2) b = a.numpy() c=np.array(a) #也可以转numpy数组 print(type(a)) print(type(b)) print(a) print(b) 输出: <class ‘torch.Tensor’> <class ‘numpy....
  • pytorchtensornumpy互相转换

    千次阅读 2020-03-19 14:53:33
    numpy转化为tensor. pytorch 基本函数中的 dim【详细说明】:以torch.argmaxtensor转化numpy model_corr = model_corr.numpy() 参考链接: ...
  • pytorchtensor、list、numpy之间的转换

    千次阅读 2021-01-19 15:41:06
    list转tensor tensor=torch.Tensor(list) ...numpytensor tensor = torch.from_numpy(ndarray) tensor转list # 先转numpy,后转list list = tensor.numpy().tolist() tensornumpy nd..
  • pytorchtensor转换numpy,不同方式 第一种方式 import torch import numpy tensor = torch.ones(3,4) n = tensor.data n = n+1 print(tensor) print(n) 输出 tensor([[1., 1., 1., 1.], [1., 1., 1., 1.], ...
  • 因为tensornumpy不是一种数据类型,所以,在数据输出保存之前,需要将tensor的数据类型进行转换,否则会报一下的错误 TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy ...
  • import torch import torchvision import torch.nn as nn import numpy as np import torchvision.transforms as transforms # 创造一个numpy数组 x = np.array([[1, 2], [3, 4]]) # 2行2列...# 转化numpy数组tor...
  • PytorchTensorNumpy之间的转换

    万次阅读 多人点赞 2018-12-29 12:54:21
    学习链接:https://github.com/chenyuntc/pytorch-book 特别提醒[注意Tensor大小写] ...t.Tensor()与Numpy共享内存,但当Numpy的数据类型和Tensor的类型不一样的时候,数据会被复制,不会共享内存。 可使用t.fro...
  • pytorch中,把numpy.array数据转换到张量tensor数据的常用函数是torch.from_numpy(array)或者torch.Tensor(array),第一种函数更常用,然而在pytorch0.4中已经舍弃了这种函数,下面一个简单的编程实验说明这两种...
  • YDOOK AI : Pytorch : tensornumpy 的 ndarray 相互转化 pytorch 张量与 numpy 数组之间转化 转换方法: 1. tensor => ndarray : tensor.numpy() 2. ndarray => tensor : torch.from_numpy(ndarray)
  • tensornumpy t = torch.ones(5) print(f"t: {t}") n = t.numpy() print(f"n: {n}") 输出: t: tensor([1., 1., 1., 1., 1.], dtype=torch.float64) n: [2. 2. 2. 2. 2.] cpu上的tensor可以和numpy array共享内存...
  • Pytorch 将tensor转化为array数组

    千次阅读 2021-02-20 22:04:34
    out_probability.detach().numpy()
  • pytorch tensornumpy转换

    2020-03-07 15:16:44
    tensor to numpy a = torch.ones(5) print(a) 输出 tensor([1., 1., 1., 1., 1.]) ...注意,转换后的tensornumpy指向同一地址,所以,对一方的值改变另一方也随之改变 a.add_(1) print(...
  • pytorchtensornumpy数组的对比

    千次阅读 2019-11-15 22:33:54
    创建Tensor下表给了一些常用的作参考。 函数 功能 Tensor(*sizes) 基础构造函数 tensor(data,) 类似np.array的构造函数 ones(*sizes) ... 对角线1,其他0 arange(s,e,step) 从...
  • 使用 numpy 里的 array ...在基于 PyTorch 的模型中也会经常用到,难免会张量 tensor 和 数组 array 进行互相转换 牢记以下转换方式很有必要 1、array 转 tensor from_numpy() 2、tensor 转 array numpy() ...
  • 文章目录cpu,gpu, torch.tensornumpy.array转换torch(tensor)&numpy(array)的min,maxtorch(tensor)&numpy(array)的索引异同torch(tensor)&numpy(array)的索引中的Noneexpand, repeat cpu,gpu, torch....
  • pytorchtensor,PIL和numpy的相互转换

    千次阅读 2019-05-02 14:23:53
    原图: # coding: utf-8 """ create by ljf on 2019/3/8 15:02 """ import torch from torchvision import transforms from PIL import Image ...transform = transforms.ToTensor() img = Image.open("s...
  • Pytorch cuda上的tensornumpy

    千次阅读 2021-02-09 17:55:57
    # model_outCUDA上的tensor model_out = model_out.cpu() # detach():去除梯度 model_out = model_out.detach().numpy()
  • pytorch里面的tensornumpy,variable区别

    千次阅读 2018-07-05 22:42:43
    # torch.Tensor(1,2,3) 与 torch.Tensor([1,2,3]) 的区别torch.Tensor(1,2,3) # 生成一个 shape [1,2,3] 的 tensortorch.Tensor([1,2,3]) # 生成一个值 [1,2,3] 的 tensor
  • Tensor时张量的英文,表示多维矩阵,和numpy对应,PyTorch中的Tensor可以和numpy的ndarray相互转换,唯一不同的是PyTorch可以在GPU上运行,而numpy的ndarray只能在cpu上运行。   常用的不同数据类型的Tensor,有32...
  • 1.CPU tensor转GPU tensor: cpu_imgs.cuda() ...3. numpy转为CPU tensor: torch.from_numpy( imgs ) 4.CPU tensor转为numpy数据: cpu_imgs.numpy() 5.GPU tensor转为numpy数据: gpu_imgs.cpu().numpy()

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,363
精华内容 9,745
关键字:

pytorch将tensor转化为numpy