<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
torch.Tensor
是一種包含單一資料型別元素的多維矩陣,類似於 numpy 的 array
。
Tensor 可以使用 torch.tensor() 轉換 Python 的 list 或序列資料生成,生成的是dtype
預設是 torch.FloatTensor
。
注意
torch.tensor()
總是拷貝 data。如果你有一個 Tensor data 並且僅僅想改變它的requires_grad
屬性,可用requires_grad_()
或者detach()
來避免拷貝。如果你有一個numpy
陣列並且想避免拷貝,請使用torch.as_tensor()
。
1,指定資料型別的 Tensor 可以通過傳遞引數 torch.dtype
和/或者 torch.device
到建構函式生成:
注意為了改變已有的 tensor 的 torch.device 和/或者 torch.dtype, 考慮使用
to()
方法.
>>> torch.ones([2,3], dtype=torch.float64, device="cuda:0") tensor([[1., 1., 1.], [1., 1., 1.]], device='cuda:0', dtype=torch.float64) >>> torch.ones([2,3], dtype=torch.float32) tensor([[1., 1., 1.], [1., 1., 1.]])
2,Tensor 的內容可以通過 Python索引或者切片存取以及修改:
>>> matrix = torch.tensor([[2,3,4],[5,6,7]]) >>> print(matrix[1][2]) tensor(7) >>> matrix[1][2] = 9 >>> print(matrix) tensor([[2, 3, 4], [5, 6, 9]])
3,使用 torch.Tensor.item()
或者 int()
方法從只有一個值的 Tensor中獲取 Python Number:
>>> x = torch.tensor([[4.5]]) >>> x tensor([[4.5000]]) >>> x.item() 4.5 >>> int(x) 4
4,Tensor可以通過引數 requires_grad=True
建立, 這樣 torch.autograd
會記錄相關的運算實現自動求導:
>>> x = torch.tensor([[1., -1.], [1., 1.]], requires_grad=True) >>> out = x.pow(2).sum() >>> out.backward() >>> x.grad tensor([[ 2.0000, -2.0000], [ 2.0000, 2.0000]])
5,每一個 tensor都有一個相應的 torch.Storage
儲存其資料。tensor 類提供了一個多維的、strided 檢視, 並定義了數值操作。
Torch 定義了七種 CPU tensor 型別和八種 GPU tensor 型別:
torch.Tensor
是預設的 tensor 型別(torch.FloatTensor
)的簡稱,即 32
位浮點數資料型別。
Tensor 的屬性
Tensor 有很多屬性,包括資料型別、Tensor 的維度、Tensor 的尺寸。
樣例程式碼如下:
matrix = torch.tensor([[[1,2,3,4],[5,6,7,8]], [[5,4,6,7], [5,6,8,9]]], dtype = torch.float64) print(matrix) # 列印 tensor print(matrix.dtype) # 列印 tensor 資料型別 print(matrix.dim()) # 列印 tensor 維度 print(matrix.size()) # 列印 tensor 尺寸 print(matrix.shape) # 列印 tensor 尺寸 matrix2 = matrix.view(4, 2, 2) # 改變 tensor 尺寸 print(matrix2)
程式輸出結果如下:
兩個方法都是用來改變 tensor 的 shape,view() 只適合對滿足連續性條件(contiguous
)的 tensor 進行操作,而 reshape() 同時還可以對不滿足連續性條件的 tensor 進行操作。在滿足 tensor 連續性條件(contiguous
)時,a.reshape() 返回的結果與a.view() 相同,都不會開闢新記憶體空間;不滿足 contiguous
時, 直接使用 view() 方法會失敗,reshape()
依然有用,但是會重新開闢記憶體空間,不與之前的 tensor 共用記憶體,即返回的是 ”副本“(等價於先呼叫 contiguous()
方法再使用 view()
方法)。
更多理解參考這篇文章
1,張量和 numpy 陣列。可以用 .numpy()
方法從 Tensor 得到 numpy 陣列,也可以用 torch.from_numpy
從 numpy 陣列得到Tensor。這兩種方法關聯的 Tensor 和 numpy 陣列是共用資料記憶體的。可以用張量的 clone
方法拷貝張量,中斷這種關聯。
arr = np.random.rand(4,5) print(type(arr)) tensor1 = torch.from_numpy(arr) print(type(tensor1)) arr1 = tensor1.numpy() print(type(arr1)) """ <class 'numpy.ndarray'> <class 'torch.Tensor'> <class 'numpy.ndarray'> """
2,item()
方法和 tolist()
方法可以將張量轉換成 Python 數值和數值列表
# item方法和tolist方法可以將張量轉換成Python數值和數值列表 scalar = torch.tensor(5) # 標量 s = scalar.item() print(s) print(type(s)) tensor = torch.rand(3,2) # 矩陣 t = tensor.tolist() print(t) print(type(t)) """ 1.0 <class 'float'> [[0.8211846351623535, 0.20020723342895508], [0.011571824550628662, 0.2906131148338318]] <class 'list'> """
建立 tensor ,可以傳入資料或者維度,torch.tensor() 方法只能傳入資料,torch.Tensor() 方法既可以傳入資料也可以傳維度,強烈建議 tensor() 傳資料,Tensor() 傳維度,否則易搞混。
方法名 | 方法功能 | 備註 |
---|---|---|
torch.rand(*sizes, out=None) → Tensor | 返回一個張量,包含了從區間 [0, 1) 的均勻分佈中抽取的一組亂數。張量的形狀由引數sizes定義。 | 推薦 |
torch.randn(*sizes, out=None) → Tensor | 返回一個張量,包含了從標準正態分佈(均值為0,方差為1,即高斯白噪聲)中抽取的一組亂數。張量的形狀由引數sizes定義。 | 不推薦 |
torch.normal(means, std, out=None) → Tensor | 返回一個張量,包含了從指定均值 means 和標準差 std 的離散正態分佈中抽取的一組亂數。標準差 std 是一個張量,包含每個輸出元素相關的正態分佈標準差。 | 多種形式,建議看原始碼 |
torch.rand_like(a) | 根據資料 a 的 shape 來生成亂資料 | 不常用 |
torch.randint(low=0, high, size) | 生成指定範圍(low, hight )和 size 的隨機整數資料 | 常用 |
torch.full([2, 2], 4) | 生成給定維度,全部資料相等的資料 | 不常用 |
torch.arange(start=0, end, step=1, *, out=None) | 生成指定間隔的資料 | 易用常用 |
torch.ones(*size, *, out=None) | 生成給定 size 且值全為1 的矩陣資料 | 簡單 |
zeros()/zeros_like()/eye() | 全 0 的 tensor 和 對角矩陣 | 簡單 |
樣例程式碼:
>>> torch.rand([1,1,3,3]) tensor([[[[0.3005, 0.6891, 0.4628], [0.4808, 0.8968, 0.5237], [0.4417, 0.2479, 0.0175]]]]) >>> torch.normal(2, 3, size=(1, 4)) tensor([[3.6851, 3.2853, 1.8538, 3.5181]]) >>> torch.full([2, 2], 4) tensor([[4, 4], [4, 4]]) >>> torch.arange(0,10,2) tensor([0, 2, 4, 6, 8]) >>> torch.eye(3,3) tensor([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
參考資料
詳解torch.rand和torch.randn和torch.normal和linespace()
到此這篇關於Pytorch中的tensor資料結構的文章就介紹到這了,更多相關Pytorch tensor資料結構內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45