pytorch2——Pytorch基础数据结构——张量(深度之眼)

前情提要

在上一篇文章中,我们详细介绍了如何搭建一个pytorch的环境,那么本篇文章我们即将揭开pytorch的神秘面纱,了解pytorch中的数据结构——Tensor。


概念问答

张量是什么? 张量是一个多维数组。
张量与矩阵、向量、标量的关系是怎么样的呢 张量是标量、向量、矩阵的高维拓展
什么是Variable? Variable是 torch.autograd 中的数据类型主要用于封装Tensor ,进行 自动求导
Variable“赋予”张量有什么功能? 它赋予了张量一些属性(grad:数据的梯度,grad_fn:创建张量的function,requires_grad:是否需要梯度,is_leaf:是否是叶子节点(张量))

实操(张量的创建)

    方法一:直接创建torch.tensor

     

    
import torch
import numpy as np
    arr = np.ones((3, 3))
    print("ndarray的数据类型:", arr.dtype)
    # t = torch.tensor(arr, device='cuda')在gpu下跑
    t = torch.tensor(arr)

    print(t)
  • 采用torch.from_numpy创建张量,并打印查看ndarray和张量数据的地址
#实验发现:从 torch.from_numpy 创建的 tensor 与原 ndarray 共享内存 ,当修
改其中一个的数据,另外一个也将会被改动
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    t = torch.from_numpy(arr)
    # print("numpy array: ", arr)
    # print("tensor : ", t)

    # print("\n修改arr")
    # arr[0, 0] = 0
    # print("numpy array: ", arr)
    # print("tensor : ", t)

    print("\n修改tensor")
    t[0, 0] = -1
    print("numpy array: ", arr)
    print("tensor : ", t)

 方法二:依据数值创建

    方式比较多,后续会详细罗列,比如torch.zeros()


方法三:依概率分布创建张量

  • 实现torch.normal()创建张量的四种模式(也就是正态分布的四种模式)
mean是标量 std是标量
mean是标量 std是张量
mean是张量 std是标量
mean是张量 std是张量
    #python代码的实现
    # mean:张量 std: 张量
    # mean = torch.arange(1, 5, dtype=torch.float)
    # std = torch.arange(1, 5, dtype=torch.float)
    # t_normal = torch.normal(mean, std)
    # print("mean:{}\nstd:{}".format(mean, std))
    # print(t_normal)

    # mean:标量 std: 标量
    # t_normal = torch.normal(0., 1., size=(4,))
    # print(t_normal)

    # mean:张量 std: 标量
    mean = torch.arange(1, 5, dtype=torch.float)
    std = 1
    t_normal = torch.normal(mean, std)
    print("mean:{}\nstd:{}".format(mean, std))
    print(t_normal)

 

 

你可能感兴趣的:(Pytorch框架)