pytorch中的資料型別主要是tensor:
這種資料型別與python直譯器本身資料型別可以對應。但str
型別有所不同。一般用一下幾種方式表示字串:
在python直譯器中,資料無論在cpu還是gpu資料型別是相同的。但在pytorch中cpu和gpu中的資料有所不同:
型別檢驗:
a = torch.randn(2,
3)# 輸出a的型別
# 法1
print
(a.type()
)# 'torch.floattensor'
# 法2
print
(type
(a))
# torch.floattensor
# 在程式中做資料型別的合法化檢驗可以用isinstance函式
isinstance
(a, torch.floattensor)
# true
##########放在cpu和gpu上的資料型別會不同##########
isinstance
(a, torch.cuda.floattensor)
# false
a = a.cuda(
)isinstance
(a, torch.cuda.floattensor)
# true
標量(dim 0),常用於loss的值:
# 標量在pytorch中是零維的tensor
a = torch.tensor(
2.2)
print
(a.shape)
# torch.size()
print
(len
(a.shape)
)# 0
print
(a.size())
# torch.size()
dim為1的張量,常用於bias的值或batch為1的全連線層的輸入輸出:
a = torch.tensor(
[1.1
,2.2])
# tensor接受的這個向量具體的資料
a = torch.floattensor(2)
# 帶資料型別的,比如floattensor,接收的是這個向量的長度,這裡長度為2,具體資料為隨機初始化
# 也可從numpy中引入
a = np.ones(2)
torch.from_numpy(a)
dim為2的張量,常用於batch size不為1的全連線層
a = torch.randn(2,
3)print
(a.shape)
# torch.size([2, 3])
print
(a.shape(0)
)# 2
print
(a.shape(1)
)# 3
dim為3的張量,常用於rnn的input batch
a = torch.rand(1,
2,3)
print
(a.shape)
# torch.size([1, 2, 3])
list
(a.shape)
# [1, 2, 3]
dim為4的張量,常用於cnn的input batch補充:
a.numel(
)# 返回a所佔的記憶體數量大小(各個維度相乘)
a.dim(
)# 返回a的維度
方法1: from numpy
a = np.array(
[2.2
,3.3])
# 在np中建立乙個張量
torch.from_numpy(a)
# 將這個array轉化為torch中的tensor(從numpy匯入的float會變成double)
方法2:from list
a = torch.tensor(
[2.2
,3.3])
# 直接將list放入tensor中
# 注意,torch.tensor與torch.tensor不同
# torch.tensor接收的是張量的data
# torch.tensor接收的是張量的shape,在特殊情況下也會接收data
a = torch.tensor(2,
3)# 這種格式是建立兩行三列的乙個二維張量,隨機初始化
a = torch.tensor([2
,3])
# 這種格式是建立乙個資料為[2,3]的張量。
# 為了避免混淆,一般只用torch.tensor接收具體資料,只用torch.tensor/torch.floattensor接受shape
方法3:uninitialized tensor
a = torch.empty(2,
3)# 接收shape
# 下面這種接收shape的方式也是會建立未初始化的張量
a = torch.inttensor(2,
3)a = torch.tensor(2,
3)
方法4:隨機初始化
# 範圍為[min,max)的均勻取樣的隨機張量
a = torch.rand(2,
3)# 接收shape,均勻取樣隨機建立0到1之間的資料(不包括1)
b = torch.rand_like(a)
# 以rand的方式建立乙個shape與a相同的tensor
a = troch.randint(1,
10,[2
,3])
# 整型的隨機張量,均勻取樣範圍1到10(不包括10),shape為[2,3]
#範圍為[min,max)的正態分佈的隨機張量
a = torch.randn(3,
3)# 均值為0標準差為1的正態分佈隨機量,shape為[3,3]
方法5:將張量中的元素全部賦值為乙個數值
a = torch.full([2
,3],
4)# shape為[2,3]的張量,資料全部賦值為4
方法6:等差數列
a = torch.arange(0,
6,2)
# 返回tensor([0,2,4]),前兩個引數是範圍,範圍包括左邊不包括右邊,最後乙個引數是公差
# 返回tensor([0.,1.,2.,3.])。前兩個引數是範圍,範圍左右兩邊都能包括,最後乙個引數是等分的數量
a = torch.linspace(0,
3, steps =4)
# 生成10^1到10^2的,5個數構成的等比數列
a = torch.logspace(1,
2,base =
10, steps =
5)
補充
a = torch.ones(2,
3)# 全部是1的張量
a = torch.zeros(2,
3)# 全部是0的張量
a = torch.eye(2,
3)# 單位矩陣
# 將兩組有對應關係的tensor進行打亂,但不改變對應關係,這時候可以用torch.randperm()
a = torch.tensor([[
100,99,
98],[
61,62,
63]])
b = troch.tensor([[
1,2,
3],[
6,7,
8]])
idx = torch.tensor([1
,0])
a = a[idx]
b = b[idx]
c 基礎(一) 資料型別
c 的資料型別分為兩類 值和引用,值型是乙個長度固定的資料,引用型是乙個長度可變的。具體來說 值 整數型 浮點數 布林型 字元型 結構 列舉 六種 引用 c 預定義引用 陣列 類 介面 下面具體介紹 整數型 8 16 32 64位,每種又有正負和非負兩種整數,共8種,sbyte byte short...
C 基礎(一) 資料型別
using system namespace base 01 endregion 說明 1 每個程式只能有乙個main方法 2 region 摺疊塊,endregion可以實現 塊摺疊 3 c 需要引用命名空間,類似於c 新增標頭檔案,命名空間裡有相關類。例如console是system名字空間裡的...
C 基礎 一 資料型別
常量的定義 1.define 2.const 注意 define 的形式不要在結尾寫分號了 include using namespace std define day 7 int main 資料型別 1.整形 short 短整型2位元組 16bit int 整形4位元組 long 長整型win4位...