• 导入
    1. import torch

    函数

    基本操作

    创建tensor

    1. # 创建未初始化的tensor
    2. x = torch.empty(5, 3)
    3. # 该创建方法可以用于指定运算输出
    4. result = torch.empty(5, 3)
    5. torch.add(x, y, out=result)
    1. # 创建随机初始化的tensor
    2. x = torch.rand(5, 3)
    1. # 创建全为0,并指定数据类型的tensor
    2. x = torch.zeros(5, 3, dtype=torch.long)
    3. x = torch.zeros(1000) # 1000行一列
    4. x = torch.ones(1000)
    1. # 直接根据数据创建
    2. x = torch.tensor([5.5, 3])
    1. # 通过现有tensor创建
    2. x = x.new_ones(5, 3, dtype=torch.float)
    3. x = torch.randn_like(x, dtype=torch.float)
    4. # 会默认继承原tensor的一些属性,例如数据类型

    获取、改变tensor的形状

    ```python

    获取

    x.size() x.shape

    返回的torch.Size其实是一个tuple元组,支持所有tuple的操作

    x.shape[0]是最高维,越往后面走维度越低

改变

y = x.view(15) z = x.view(-1, 5)# -1所指的维度可以根据其它维度的值推出来

view具有共享data但不共享内存的特征

如果不想共享数据,可以使用clone函数

x_cp = x.clone().view(15)

  1. <a name="WzMPN"></a>
  2. ### 加法
  3. ```python
  4. z = x + y
  5. z = torch.add(x, y)
  6. y.add_(x)
  7. # 广播机制

索引

  • 索引具有共享内存的特征

    1. # 索引出来的结果与原数据共享内存,也即修改一个,另一个会跟着修改。
    2. y = x[0, :]
    3. y += 1 # x也会跟着修改

    转换tensor

  • 将tensor转换成python number

    1. x = torch.randn(1)
    2. y = x.item()
  • 将tensor转换成numpy

    1. a = torch.ones(5)
    2. b = a.numpy()
    3. # 共享内存
  • 将numpy转换为tensor ```python

    共享内存

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

不共享内存

c = torch.tensor(a)

  1. <a name="qG3LD"></a>
  2. ### 求平均值
  3. ```python
  4. y = torch.tenser([0., 1.])
  5. y = y.mean()
  6. print(y) # tensor(0.50000)

和机器学习有关的

  • detach()
    • 从当前计算图中分离下来的,但是仍指向原变量的存放位置,不同之处只是requires_grad为false,得到的这个Variable永远不需要计算其梯度,不具有grad。即使之后重新将它的requires_grad置为true,它也不会具有梯度grad。
    • 这样我们就会继续使用这个新的Variable进行计算,后面当我们进行反向传播时,到该调用detach()的Variable就会停止,不能再继续向前进行传播。
      1. torch.arange(-8.0, 8.0, 0.1, requires_grad=True).numpy()