You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在PyTorch 0.4.0中从NumPy数组创建requires_grad=True的FloatTensor?

从NumPy数组创建带requires_grad=True的FloatTensor(PyTorch 0.4.0+)

嗨,在PyTorch 0.4.0把Tensor和Variable合并之后,这个操作其实变得更简洁了,给你分享几种常用的方法:

  • 方法一:链式调用一步完成
    这是最简洁的写法,先把NumPy数组转成Tensor,转成float类型后,直接用requires_grad_()这个in-place方法开启自动求导:

    import numpy as np
    import torch
    
    # 示例NumPy数组
    np_array = np.random.rand(2, 3)
    # 一步完成转换、转float、开启autograd
    float_tensor = torch.from_numpy(np_array).float().requires_grad_(True)
    

    这里requires_grad_()的下划线表示这是一个会修改Tensor本身的方法,比单独赋值更直观。

  • 方法二:分步设置属性
    如果需要先对Tensor做一些其他操作,再开启自动求导,可以先转换,再手动设置requires_grad属性:

    np_array = np.random.rand(2, 3)
    float_tensor = torch.from_numpy(np_array).float()
    # 后续需要时开启自动求导
    float_tensor.requires_grad = True
    
  • 方法三:创建不共享内存的新Tensor
    上面两种方法用torch.from_numpy()会和原NumPy数组共享内存,如果不想共享数据(比如担心原数组被意外修改),可以用torch.tensor()直接创建,同时指定类型和自动求导:

    np_array = np.random.rand(2, 3)
    # 创建新的FloatTensor并开启autograd,和原NumPy数组不共享内存
    float_tensor = torch.tensor(np_array, dtype=torch.float32, requires_grad=True)
    

需要注意的是,现在完全不需要再用Variable来包装Tensor了,所有原Variable的功能(比如自动求导)都已经整合到Tensor里,直接操作Tensor就可以啦。

内容的提问来源于stack exchange,提问作者HBeel

火山引擎 最新活动