序號 | 數(shù)據(jù)類型及描述 |
---|---|
1. | bool_存儲(chǔ)為一個(gè)字節(jié)的布爾值(真或假) |
2. | int_默認(rèn)整數(shù),相當(dāng)于 C 的long,通常為int32或int64 |
3. | intc相當(dāng)于 C 的int,通常為int32或int64 |
4. | intp用于索引的整數(shù),相當(dāng)于 C 的size_t,通常為int32或int64 |
5. | int8字節(jié)(-128 ~ 127) |
6. | int1616 位整數(shù)(-32768 ~ 32767) |
7. | int3232 位整數(shù)(-2147483648 ~ 2147483647) |
8. | int6464 位整數(shù)(-9223372036854775808 ~ 9223372036854775807) |
9. | uint88 位無符號整數(shù)(0 ~ 255) |
10. | uint1616 位無符號整數(shù)(0 ~ 65535) |
11. | uint3232 位無符號整數(shù)(0 ~ 4294967295) |
12. | uint6464 位無符號整數(shù)(0 ~ 18446744073709551615) |
13. | float_float64的簡寫 |
14. | float16半精度浮點(diǎn):符號位,5 位指數(shù),10 位尾數(shù) |
15. | float32單精度浮點(diǎn):符號位,8 位指數(shù),23 位尾數(shù) |
16. | float64雙精度浮點(diǎn):符號位,11 位指數(shù),52 位尾數(shù) |
17. | complex_complex128的簡寫 |
18. | complex64復(fù)數(shù),由兩個(gè) 32 位浮點(diǎn)表示(實(shí)部和虛部) |
19. |
complex128復(fù)數(shù),由兩個(gè) 64 位浮點(diǎn)表示(實(shí)部和虛部) |
直接使用類型名很可能會(huì)報(bào)錯(cuò),正確的使用方式是np.調(diào)用,eg, np.uint8
Torch定義了七種CPU張量類型和八種GPU張量類型,這里我們就只講解一下CPU中的,其實(shí)GPU中只是中間加一個(gè)cuda即可,如torch.cuda.FloatTensor:
torch.FloatTensor(2,3) 構(gòu)建一個(gè)2*3 Float類型的張量
torch.DoubleTensor(2,3) 構(gòu)建一個(gè)2*3 Double類型的張量
torch.ByteTensor(2,3) 構(gòu)建一個(gè)2*3 Byte類型的張量
torch.CharTensor(2,3) 構(gòu)建一個(gè)2*3 Char類型的張量
torch.ShortTensor(2,3) 構(gòu)建一個(gè)2*3 Short類型的張量
torch.IntTensor(2,3) 構(gòu)建一個(gè)2*3 Int類型的張量
torch.LongTensor(2,3) 構(gòu)建一個(gè)2*3 Long類型的張量
同樣,直接使用類型名很可能會(huì)報(bào)錯(cuò),正確的使用方式是torch.調(diào)用,eg,torch.FloatTensor()
type函數(shù)可以由變量調(diào)用,或者把變量作為參數(shù)傳入。
返回的是該變量的類型,而非數(shù)據(jù)類型。
data = np.random.randint(0, 255, 300) print(type(data))
輸出
class 'numpy.ndarray'>
返回值為變量的數(shù)據(jù)類型
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
為了實(shí)施trochvision.transforms.ToPILImage()函數(shù)
于是我想從numpy的ndarray類型轉(zhuǎn)成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()
但是很遺憾,報(bào)錯(cuò)了
raise TypeError('Input type {} is not supported'.format(npimg.dtype))
TypeError: Input type int32 is not supported
因?yàn)橐獙darray轉(zhuǎn)成PILImage要求ndarray是uint8類型的。
于是我認(rèn)輸了。。。
使用了
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
嗯,顯示了一張圖片
但是呢,就很憋屈,和想要的隨機(jī)數(shù)效果不一樣。
于是我用了astype函數(shù)
由變量調(diào)用,但是直接調(diào)用不會(huì)改變原變量的數(shù)據(jù)類型,是返回值是改變類型后的新變量,所以要賦值回去。
n_out = n_out.astype(np.uint8)
#初始化隨機(jī)數(shù)種子 np.random.seed(0) data = np.random.randint(0, 255, 300) print(data.dtype) n_out = data.reshape(10,10,3) #強(qiáng)制類型轉(zhuǎn)換 n_out = n_out.astype(np.uint8) print(n_out.dtype) img = transforms.ToPILImage()(n_out) img.show()
int32
uint8
pytorch中沒有astype函數(shù),正確的轉(zhuǎn)換方法是
tensor = torch.Tensor(3, 5)
torch.long() 將tensor投射為long類型
newtensor = tensor.long()
torch.half()將tensor投射為半精度浮點(diǎn)類型
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函數(shù)一樣,是返回值才是改變類型后的結(jié)果,調(diào)用的變量類型不變
type(new_type=None, async=False)如果未提供new_type,則返回類型,否則將此對象轉(zhuǎn)換為指定的類型。 如果已經(jīng)是正確的類型,則不會(huì)執(zhí)行且返回原對象。
用法如下:
self = torch.LongTensor(3, 5) # 轉(zhuǎn)換為其他類型 print self.type(torch.FloatTensor)
如果張量已經(jīng)是正確的類型,則不會(huì)執(zhí)行操作。具體操作方法如下:
self = torch.Tensor(3, 5) tesnor = torch.IntTensor(2,3) print self.type_as(tesnor)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
標(biāo)簽:益陽 上海 常德 惠州 鷹潭 黔西 黑龍江 四川
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Pytorch 實(shí)現(xiàn)變量類型轉(zhuǎn)換》,本文關(guān)鍵詞 Pytorch,實(shí)現(xiàn),變量,類型,轉(zhuǎn)換,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。