Tensor與tensor深入分析與異同
在Pytorch官方文件中,對於 Tensor
與 tensor
是這樣定義的:
A
torch.Tensor
is a multi-dimensional matrix containing elements of a single data typeTo create a tensor with pre-existing data, use
torch.tensor()
Tensor
是多維矩陣,矩陣的元素都是同一種資料型別。
tensor
需要確切的資料對它進行賦值。
對於變數,建立的方式有兩種:建立變數的資料形狀大小並初始化;直接賦值確切的資料值
接下來,就討論 Tensor
與 tensor
建立的特點:
方式一:建立變數的資料形狀大小並初始化
指定形狀的大小時,會發生這種情況:對於多維矩陣,(3,4)可以表示三行四列的矩陣,這是沒有歧義的。對於 Tensor
會建立一個三行四列的矩陣,但是對於 tensor
卻無法建立相應的變數。因為它需要卻確定的資料值。
但當輸入(5)時,Tensor
是一個矩陣,所以將這個5理解為是(1,5),一行五列的矩陣。
tensor
會將這個5認為是一個確定的資料。它會建立出一個值為5的變數。
程式碼:
輸入為5時:
Input:
>>>x = torch.Tensor(3, 4)
>>>y = torch.tensor(3, 4) #這行是錯誤的,因為tensor需要確切的資料值
>>>print(x)
Output:
tensor([[1.3733e-14, 6.4076e+07, 2.0706e-19, 7.3909e+22],
[2.4176e-12, 1.1625e+33, 8.9605e-01, 1.1632e+33],
[5.6003e-02, 7.0374e+22, 1.0284e+21, 1.0596e-38]])
輸入為(5)時:
Input:
>>>x = torch.Tensor(5)
>>>y = torch.tensor(5)
>>>print(x.size())
>>>print(y.size())
>>>print(x.type())
>>>print(y.type())
Output:
torch.Size([5]) #這個表示,x是一個一維張量,就像數學中的向量
torch.Size([]) #這個表示,y是一個標量,是一個0維度的張量
torch.FloatTensor #x在未指定資料型別的時候,預設是FloatTensor型別
torch.LongTensor #tensor在未指定資料型別的時候,會根據賦值資料的形式,選擇相應的型別
方式二:直接賦值確切的資料值
Tensor
與tensor
都可以通過這種方式進行建立變數。但有一種特殊情況,就是 torch.Tensor(5.6)
是錯誤的。你可以這樣理解,因為Tensor建立的是多維矩陣,從嚴格意義上說,標量(一個數字),不是矩陣。所以Tensor
無法建立。而這種方式就是允許的,torch.Tensor([5.6])
。
Input:
>>>a = torch.Tensor([[5.6, 5.8],[2, 4]])
>>>b = torch.tensor([[5.6, 5.8],[2, 4]])
>>>print(a)
>>>print(b)
>>>print(a.size())
>>>print(b.size())
>>>print(a.type())
>>>print(b.type())
Output:
tensor([[5.6000, 5.8000],
[2.0000, 4.0000]])
tensor([[5.6000, 5.8000],
[2.0000, 4.0000]])
torch.Size([2, 2])
torch.Size([2, 2])
torch.FloatTensor
torch.FloatTensor
接下來示範下錯誤的一些方式
Error:
>>>a = torch.tensor(3, 4) #tensor是從已有資料中建立矩陣的,這種形式,tensor無法對矩陣中的元素進行初始化,所以無法進行建立。如果是Tensor時,Tensor預設的資料型別是FloatTensor,可以對其進行初始化
>>>a = torch.Tensor(5.6)
總結:
Tensor
主要是建立多維矩陣的,標量從某種意義上,不算矩陣。所以Tensor
可以通過賦值多維矩陣的方式建立,但是無法指定標量值進行建立。如果想建立單個值,採用[5.6] 這種形式,指定一行一列的矩陣。
同時,Tensor
可以指定多維矩陣形狀的大小,並且預設的資料型別是FloatTensor
。
tensor
主要是根據確定的資料值進行建立,無法直接指定形狀大小,需要根據資料的大小進行建立。但同時,tensor
沒有賦值資料值是矩陣的限制,可以直接使用tensor(5.6)
Input:
a = torch.tensor(5.6)
print(a)
print(a.size())
Output:
tensor(5.6000)
torch.Size([]) #pytorch對標量(0維矩陣)的表示
Github: https://github.com/zhiyaozhou/Pytorch-Tutorial
相關文章
- 釋出Tensor2Tensor,加快深度學習研究深度學習
- 前沿AI:Tensor2Tensor | Google 開發者大會 2018AIGo
- OpenVINO(get_output_tensor())
- treevalue——Master Nested Data Like TensorAST
- PIL影像轉torch的tensor
- 05_pytorch的Tensor操作PyTorch
- pytorch tensor的基本函式PyTorch函式
- tensor.view(*shape) 函式View函式
- Pytorch框架之tensor.gradPyTorch框架
- “變形金剛”為何強大:從模型到程式碼全面解析Google Tensor2Tensor系統模型Go
- oracle與infomix異同點Oracle
- session與cookie的異同SessionCookie
- Pytorch基礎-tensor資料結構PyTorch資料結構
- pytorch入門- tensor基礎操作(1)PyTorch
- JSF與Struts的異同JS
- tensorflow+入門筆記︱基本張量tensor理解與tensorflow執行結構與相關報錯筆記
- Tensor:Pytorch神經網路界的NumpyPyTorch神經網路
- Google Pixel 7渲染圖曝光:全新Tensor晶片加持Go晶片
- tf.shape()和tensor.get_shape()
- Pytorch入門:tensor張量的構建PyTorch
- 策略模式和模板方法同與異模式
- [譯] 同中有異的 Webpack 與 RollupWeb
- 張量(Tensor)、標量(scalar)、向量(vector)、矩陣(matrix)矩陣
- matlab練習程式(結構張量structure tensor)MatlabStruct
- 配置管理與IT資產管理:差異與協同共生
- 執行時異常與一般異常有何異同?
- Objective-C 與 C++ 的異同ObjectC++
- JavaScript中var與let的異同點JavaScript
- 編譯器GCC與Clang的異同編譯GC
- JAVA與C++的多型異同JavaC++多型
- Pytorch框架之tensor型別轉換(type, type_as)PyTorch框架型別
- 深度學習--PyTorch定義Tensor以及索引和切片深度學習PyTorch索引
- 張量tensor:機器學習的基本資料結構介紹 - Santiago機器學習資料結構Go
- TypeError: Tensor objects are only iterable when eager execution is enabled. To iterate over this tErrorObject
- DevOps與敏捷異同 - DZone DevOpsdev敏捷
- java與php區別或異同(整理、整合)JavaPHP
- margin系列之與相對偏移的異同
- 內容管理與知識管理的異同