Pytorch基礎 一 資料型別和建立資料

2021-10-18 08:37:05 字數 4402 閱讀 4593

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位...