亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pytorch如何實現變量類型轉換?

發布時間:2022-02-24 09:45:58 來源:億速云 閱讀:456 作者:小新 欄目:開發技術

這篇文章主要介紹了Pytorch如何實現變量類型轉換?,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

pytorch變量類型是各種各樣的Tensor,Tensor可以理解為高維矩陣。pytorch變量類型轉換實際上就是矩陣之間的轉換,那么我們真沒進行pytorch變量類型轉換呢?請繼續看下去:

與Numpy中的Array類似。Pytorch中的tensor又包括CPU上的數據類型和GPU上的數據類型,一般GPU上的Tensor是CPU上的Tensor加cuda()函數得到。通過使用Type函數可以查看變量類型。

一般系統默認是torch.FloatTensor類型。

例如data = torch.Tensor(2,3)是一個2*3的張量,類型為FloatTensor; data.cuda()就轉換為GPU的張量類型,torch.cuda.FloatTensor類型。

下面簡單介紹一下Pytorch中變量之間的相互轉換

(1)CPU或GPU張量之間的轉換

一般只要在Tensor后加long(), int(), double(),float(),byte()等函數就能將Tensor進行類型轉換;

例如:Torch.LongTensor--->Torch.FloatTensor, 直接使用data.float()即可

還可以使用type()函數,data為Tensor數據類型,data.type()為給出data的類型,如果使用data.type(torch.FloatTensor)則強制轉換為torch.FloatTensor類型張量。

當你不知道要轉換為什么類型時,但需要求a1,a2兩個張量的乘積,可以使用a1.type_as(a2)將a1轉換為a2同類型。

(2)CPU張量 ----> GPU張量, 使用data.cuda()

(3)GPU張量 ----> CPU張量 使用data.cpu()

(4)Variable變量轉換成普通的Tensor,其實可以理解Variable為一個Wrapper,里頭的data就是Tensor. 如果Var是Variable變量,使用Var.data獲得Tensor變量

(5)Tensor與Numpy Array之間的轉換

Tensor---->Numpy 可以使用 data.numpy(),data為Tensor變量

Numpy ----> Tensor 可以使用torch.from_numpy(data),data為numpy變量

補充:Numpy/Pytorch之數據類型與強制類型轉換

1.數據類型簡介

Numpy

NumPy 支持比 Python 更多種類的數值類型。 下表顯示了 NumPy 中定義的不同標量數據類型。

序號數據類型及描述
1.bool_存儲為一個字節的布爾值(真或假)
2.int_默認整數,相當于 C 的long,通常為int32或int64
3.intc相當于 C 的int,通常為int32或int64
4.intp用于索引的整數,相當于 C 的size_t,通常為int32或int64
5.int8字節(-128 ~ 127)
6.int1616 位整數(-32768 ~ 32767)
7.int3232 位整數(-2147483648 ~ 2147483647)
8.int6464 位整數(-9223372036854775808 ~ 9223372036854775807)
9.uint88 位無符號整數(0 ~ 255)
10.uint1616 位無符號整數(0 ~ 65535)
11.uint3232 位無符號整數(0 ~ 4294967295)
12.uint6464 位無符號整數(0 ~ 18446744073709551615)
13.float_float64的簡寫
14.float16半精度浮點:符號位,5 位指數,10 位尾數
15.float32單精度浮點:符號位,8 位指數,23 位尾數
16.float64雙精度浮點:符號位,11 位指數,52 位尾數
17.complex_complex128的簡寫
18.complex64復數,由兩個 32 位浮點表示(實部和虛部)
19.

complex128復數,由兩個 64 位浮點表示(實部和虛部)

直接使用類型名很可能會報錯,正確的使用方式是np.調用,eg, np.uint8

Pytorch

Torch定義了七種CPU張量類型和八種GPU張量類型,這里我們就只講解一下CPU中的,其實GPU中只是中間加一個cuda即可,如torch.cuda.FloatTensor:

torch.FloatTensor(2,3) 構建一個2*3 Float類型的張量

torch.DoubleTensor(2,3) 構建一個2*3 Double類型的張量

torch.ByteTensor(2,3) 構建一個2*3 Byte類型的張量

torch.CharTensor(2,3) 構建一個2*3 Char類型的張量

torch.ShortTensor(2,3) 構建一個2*3 Short類型的張量

torch.IntTensor(2,3) 構建一個2*3 Int類型的張量

torch.LongTensor(2,3) 構建一個2*3 Long類型的張量

同樣,直接使用類型名很可能會報錯,正確的使用方式是torch.調用,eg,torch.FloatTensor()

2.Python的type()函數

type函數可以由變量調用,或者把變量作為參數傳入。

返回的是該變量的類型,而非數據類型。

data = np.random.randint(0, 255, 300)
print(type(data))

輸出

<class 'numpy.ndarray'>

3.Numpy/Pytorch的dtype屬性

返回值為變量的數據類型

t_out = torch.Tensor(1,2,3)
print(t_out.dtype)

輸出

torch.float32

t_out = torch.Tensor(1,2,3)

print(t_out.numpy().dtype)

輸出

float32

4.Numpy中的類型轉換

先聊聊我為什么會用到這個函數(不看跳過)

為了實施trochvision.transforms.ToPILImage()函數

于是我想從numpy的ndarray類型轉成PILImage類型

我做了以下嘗試

data = np.random.randint(0, 255, 300)
n_out = data.reshape(10,10,3)
print(n_out.dtype)
img = transforms.ToPILImage()(n_out)
img.show()

但是很遺憾,報錯了

raise TypeError('Input type {} is not supported'.format(npimg.dtype))

TypeError: Input type int32 is not supported

因為要將ndarray轉成PILImage要求ndarray是uint8類型的。

于是我認輸了。。。

使用了

n_out = np.linspace(0,255,300,dtype=np.uint8)
n_out = n_out.reshape(10,10,3)
print(n_out.dtype)
img = torchvision.transforms.ToPILImage()(n_out)
img.show()

得到了輸出

uint8

Pytorch如何實現變量類型轉換?

嗯,顯示了一張圖片

但是呢,就很憋屈,和想要的隨機數效果不一樣。

于是我用了astype函數

astype()函數

由變量調用,但是直接調用不會改變原變量的數據類型,是返回值是改變類型后的新變量,所以要賦值回去。

n_out = n_out.astype(np.uint8)
#初始化隨機數種子
np.random.seed(0)
 
data = np.random.randint(0, 255, 300)
print(data.dtype)
n_out = data.reshape(10,10,3)
 
#強制類型轉換
n_out = n_out.astype(np.uint8)
print(n_out.dtype)
 
img = transforms.ToPILImage()(n_out)
img.show()

輸出

int32

uint8

Pytorch如何實現變量類型轉換?

5.Pytorch中的類型轉換

pytorch中沒有astype函數,正確的轉換方法是

Way1 : 變量直接調用類型

tensor = torch.Tensor(3, 5)

torch.long() 將tensor投射為long類型

newtensor = tensor.long()

torch.half()將tensor投射為半精度浮點類型

newtensor = tensor.half()

torch.int()將該tensor投射為int類型

newtensor = tensor.int()

torch.double()將該tensor投射為double類型

newtensor = tensor.double()

torch.float()將該tensor投射為float類型

newtensor = tensor.float()

torch.char()將該tensor投射為char類型

newtensor = tensor.char()

torch.byte()將該tensor投射為byte類型

newtensor = tensor.byte()

torch.short()將該tensor投射為short類型

newtensor = tensor.short()

同樣,和numpy中的astype函數一樣,是返回值才是改變類型后的結果,調用的變量類型不變

Way2 : 變量調用pytorch中的type函數

type(new_type=None, async=False)如果未提供new_type,則返回類型,否則將此對象轉換為指定的類型。 如果已經是正確的類型,則不會執行且返回原對象。

用法如下:

self = torch.LongTensor(3, 5)
# 轉換為其他類型
print self.type(torch.FloatTensor)

Way3 : 變量調用pytorch中的type_as函數

如果張量已經是正確的類型,則不會執行操作。具體操作方法如下:

self = torch.Tensor(3, 5)
tesnor = torch.IntTensor(2,3)
print self.type_as(tesnor)

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Pytorch如何實現變量類型轉換?”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

刚察县| 上思县| 阿图什市| 丹凤县| 伊宁县| 瓮安县| 崇明县| 文山县| 黄山市| 兴宁市| 新巴尔虎左旗| 丰原市| 柘城县| 米林县| 深州市| 栖霞市| 张家界市| 普洱| 广平县| 赤峰市| 航空| 衡水市| 民丰县| 玉田县| 灵石县| 阿勒泰市| 八宿县| 耒阳市| 旌德县| 宁晋县| 克拉玛依市| 伊宁市| 平原县| 逊克县| 陇川县| 望江县| 崇州市| 博客| 祁东县| 广河县| 泗阳县|