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)

 

 

發佈了57 篇原創文章 · 獲贊 34 · 訪問量 6483
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章