App下載

pytorch為什么要使用float64訓練?怎么使用?

來源: 你是我的所有夢 2021-07-15 11:54:42 瀏覽數(shù) (6305)
反饋

在神經(jīng)網(wǎng)絡的推理過程中,我們默認是將pytorch的tensor的精度指定為單精度的float32,但是在有些時候不管是float16還是float32,在訓練模型的時候都會導致精度丟失,從而引發(fā)訓練效果的損失。那么pytorch怎么使用float64訓練呢?接下來這篇文章告訴你。

首先我們要知道,pytorch默認使用單精度float32訓練模型,

原因在于:

使用float16訓練模型,模型效果會有損失,而使用double(float64)會有2倍的內(nèi)存壓力,且不會帶來太多的精度提升。

本人,最近遇到需要使用double數(shù)據(jù)類型訓練模型的情況,具體實現(xiàn)需要把模型的權重參數(shù)數(shù)據(jù)類型和輸入數(shù)據(jù)類型全部設置為torch.float64即可。

可使用torch的一個函數(shù),輕松地把模型參數(shù)轉(zhuǎn)化為float64

torch.set_default_dtype(torch.float64)

輸入類型可使用

tensor.type(torch.float64)

補充:float32和float64的本質(zhì)區(qū)別

首先我們需要知道何為bits和bytes?

bits:名為位數(shù)bytes:為字節(jié)簡單的數(shù)就是MB和G的關系!

那么8bits=1bytes,下面是各個單位的相互轉(zhuǎn)化!

存儲單位轉(zhuǎn)化

那么float32和float64有什么區(qū)別呢?

數(shù)位的區(qū)別一個在內(nèi)存中占分別32和64個bits,也就是4bytes或8bytes數(shù)位越高浮點數(shù)的精度越高它會影響深度學習計算效率?

float64占用的內(nèi)存是float32的兩倍,是float16的4倍;

比如對于CIFAR10數(shù)據(jù)集,如果采用float64來表示,需要60000*32*32*3*8/1024**3=1.4G,光把數(shù)據(jù)集調(diào)入內(nèi)存就需要1.4G;

如果采用float32,只需要0.7G,如果采用float16,只需要0.35G左右;

占用內(nèi)存的多少,會對系統(tǒng)運行效率有嚴重影響;(因此數(shù)據(jù)集文件都是采用uint8來存在數(shù)據(jù),保持文件最?。?/p>

小結

在了解了float32和float64有什么區(qū)別之后,相信各位讀者心中已經(jīng)知道應該如何選擇訓練模型時要使用哪種精度了。以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持W3Cschool。



0 人點贊