pytorch隨機(jī)采樣操作SubsetRandomSampler()
這篇文章記錄一個(gè)采樣器都隨機(jī)地從原始的數(shù)據(jù)集中抽樣數(shù)據(jù)。抽樣數(shù)據(jù)采用permutation。 生成任意一個(gè)下標(biāo)重排,從而利用下標(biāo)來(lái)提取dataset中的數(shù)據(jù)的方法
需要的庫(kù)
import torch
使用方法
這里以MNIST舉例
train_dataset = dsets.MNIST(root='./data', #文件存放路徑
train=True, #提取訓(xùn)練集
transform=transforms.ToTensor(), #將圖像轉(zhuǎn)化為T(mén)ensor
download=True)
sample_size = len(train_dataset)
sampler1 = torch.utils.data.sampler.SubsetRandomSampler(
np.random.choice(range(len(train_dataset)), sample_size))
代碼詳解
np.random.choice() #numpy.random.choice(a, size=None, replace=True, p=None) #從a(只要是ndarray都可以,但必須是一維的)中隨機(jī)抽取數(shù)字,并組成指定大小(size)的數(shù)組 #replace:True表示可以取相同數(shù)字,F(xiàn)alse表示不可以取相同數(shù)字 #數(shù)組p:與數(shù)組a相對(duì)應(yīng),表示取數(shù)組a中每個(gè)元素的概率,默認(rèn)為選取每個(gè)元素的概率相同。
那么這里就相當(dāng)于抽取了一個(gè)全排列
torch.utils.data.sampler.SubsetRandomSampler # 會(huì)根據(jù)后面給的列表從數(shù)據(jù)集中按照下標(biāo)取元素 # class torch.utils.data.SubsetRandomSampler(indices):無(wú)放回地按照給定的索引列表采樣樣本元素。
所以就可以了。
補(bǔ)充知識(shí):Pytorch學(xué)習(xí)之torch----隨機(jī)抽樣、序列化、并行化
1. torch.manual_seed(seed)
說(shuō)明:設(shè)置生成隨機(jī)數(shù)的種子,返回一個(gè)torch._C.Generator對(duì)象。使用隨機(jī)數(shù)種子之后,生成的隨機(jī)數(shù)是相同的。
參數(shù):
seed(int or long) -- 種子
>>> import torch
>>> torch.manual_seed(1)
<torch._C.Generator object at 0x0000019684586350>
>>> a = torch.rand(2, 3)
>>> a
tensor([[0.7576, 0.2793, 0.4031],
[0.7347, 0.0293, 0.7999]])
>>> torch.manual_seed(1)
<torch._C.Generator object at 0x0000019684586350>
>>> b = torch.rand(2, 3)
>>> b
tensor([[0.7576, 0.2793, 0.4031],
[0.7347, 0.0293, 0.7999]])
>>> a == b
tensor([[1, 1, 1],
[1, 1, 1]], dtype=torch.uint8)
2. torch.initial_seed()
說(shuō)明:返回生成隨機(jī)數(shù)的原始種子值
>>> torch.manual_seed(4) <torch._C.Generator object at 0x0000019684586350> >>> torch.initial_seed() 4
3. torch.get_rng_state()
說(shuō)明:返回隨機(jī)生成器狀態(tài)(ByteTensor)
>>> torch.initial_seed() 4 >>> torch.get_rng_state() tensor([4, 0, 0, ..., 0, 0, 0], dtype=torch.uint8)
4. torch.set_rng_state()
說(shuō)明:設(shè)定隨機(jī)生成器狀態(tài)
參數(shù):
new_state(ByteTensor) -- 期望的狀態(tài)
5. torch.default_generator
說(shuō)明:默認(rèn)的隨機(jī)生成器。等于<torch._C.Generator object>
6. torch.bernoulli(input, out=None)
說(shuō)明:從伯努利分布中抽取二元隨機(jī)數(shù)(0或1)。輸入張量包含用于抽取二元值的概率。因此,輸入中的所有值都必須在[0,1]區(qū)間內(nèi)。輸出張量的第i個(gè)元素值,將會(huì)以輸入張量的第i個(gè)概率值等于1。返回值將會(huì)是與輸入相同大小的張量,每個(gè)值為0或者1.
參數(shù):
input(Tensor) -- 輸入為伯努利分布的概率值
out(Tensor,可選) -- 輸出張量
>>> a = torch.Tensor(3, 3).uniform_(0, 1)
>>> a
tensor([[0.5596, 0.5591, 0.0915],
[0.2100, 0.0072, 0.0390],
[0.9929, 0.9131, 0.6186]])
>>> torch.bernoulli(a)
tensor([[0., 1., 0.],
[0., 0., 0.],
[1., 1., 1.]])
7. torch.multinomial(input, num_samples, replacement=False, out=None)
說(shuō)明:返回一個(gè)張量,每行包含從input相應(yīng)行中定義的多項(xiàng)分布中抽取的num_samples個(gè)樣本。要求輸入input每行的值不需要總和為1,但是必須非負(fù)且總和不能為0。當(dāng)抽取樣本時(shí),依次從左到右排列(第一個(gè)樣本對(duì)應(yīng)第一列)。如果輸入input是一個(gè)向量,輸出out也是一個(gè)相同長(zhǎng)度num_samples的向量。如果輸入input是m行的矩陣,輸出out是形如m x n的矩陣。并且如果參數(shù)replacement為T(mén)rue,則樣本抽取可以重復(fù)。否則,一個(gè)樣本在每行不能被重復(fù)。
參數(shù):
input(Tensor) -- 包含概率的張量
num_samples(int) -- 抽取的樣本數(shù)
replacement(bool) -- 布爾值,決定是否能重復(fù)抽取
out(Tensor) -- 結(jié)果張量
>>> weights = torch.Tensor([0, 10, 3, 0]) >>> weights tensor([ 0., 10., 3., 0.]) >>> torch.multinomial(weights, 4, replacement=True) tensor([1, 1, 1, 1])
8. torch.normal(means, std, out=None)
說(shuō)明:返回一個(gè)張量,包含從給定參數(shù)means,std的離散正態(tài)分布中抽取隨機(jī)數(shù)。均值means是一個(gè)張量,包含每個(gè)輸出元素相關(guān)的正態(tài)分布的均值。std是一個(gè)張量。包含每個(gè)輸出元素相關(guān)的正態(tài)分布的標(biāo)準(zhǔn)差。均值和標(biāo)準(zhǔn)差的形狀不須匹配,但每個(gè)張量的元素個(gè)數(shù)必須想聽(tīng)。
參數(shù):
means(Tensor) -- 均值
std(Tensor) -- 標(biāo)準(zhǔn)差
out(Tensor) -- 輸出張量
>>> n_data = torch.ones(5, 2)
>>> n_data
tensor([[1., 1.],
[1., 1.],
[1., 1.],
[1., 1.],
[1., 1.]])
>>> x0 = torch.normal(2 * n_data, 1)
>>> x0
tensor([[1.6544, 0.9805],
[2.1114, 2.7113],
[1.0646, 1.9675],
[2.7652, 3.2138],
[1.1204, 2.0293]])
9. torch.save(obj, f, pickle_module=<module 'pickle' from '/home/lzjs/...)
說(shuō)明:保存一個(gè)對(duì)象到一個(gè)硬盤(pán)文件上。
參數(shù):
obj -- 保存對(duì)象
f -- 類(lèi)文件對(duì)象或一個(gè)保存文件名的字符串
pickle_module -- 用于pickling源數(shù)據(jù)和對(duì)象的模塊
pickle_protocol -- 指定pickle protocal可以覆蓋默認(rèn)參數(shù)
10. torch.load(f, map_location=None, pickle_module=<module 'pickle' from '/home/lzjs/...)
說(shuō)明:從磁盤(pán)文件中讀取一個(gè)通過(guò)torch.save()保存的對(duì)象。torch.load()可通過(guò)參數(shù)map_location動(dòng)態(tài)地進(jìn)行內(nèi)存重映射,使其能從不動(dòng)設(shè)備中讀取文件。一般調(diào)用時(shí),需兩個(gè)參數(shù):storage和location tag。返回不同地址中的storage,或者返回None。如果這個(gè)參數(shù)是字典的話,意味著從文件的地址標(biāo)記到當(dāng)前系統(tǒng)的地址標(biāo)記的映射。
參數(shù):
f -- l類(lèi)文件對(duì)象或一個(gè)保存文件名的字符串
map_location -- 一個(gè)函數(shù)或字典規(guī)定如何remap存儲(chǔ)位置
pickle_module -- 用于unpickling元數(shù)據(jù)和對(duì)象的模塊
torch.load('tensors.pt')
# 加載所有的張量到CPU
torch.load('tensor.pt', map_location=lambda storage, loc:storage)
# 加載張量到GPU
torch.load('tensors.pt', map_location={'cuda:1':'cuda:0'})
11. torch.get_num_threads()
說(shuō)明:獲得用于并行化CPU操作的OpenMP線程數(shù)
12. torch.set_num_threads()
說(shuō)明:設(shè)定用于并行化CPU操作的OpenMP線程數(shù)
以上這篇pytorch隨機(jī)采樣操作SubsetRandomSampler()就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)批量提取Excel數(shù)據(jù)
在數(shù)據(jù)處理和分析的過(guò)程中,Excel 是一種廣泛使用的數(shù)據(jù)存儲(chǔ)格式,本文將詳細(xì)介紹如何使用 pandas、openpyxl 和 xlrd 三種庫(kù)來(lái)批量提取 Excel 數(shù)據(jù),并提供相應(yīng)的示例代碼,需要的可以參考下2024-12-12
Python爬蟲(chóng)進(jìn)階Scrapy框架精文講解
這篇文章主要為大家介紹了Python爬蟲(chóng)進(jìn)階中Scrapy框架精細(xì)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
常見(jiàn)Python AutoEDA工具庫(kù)及功能使用探究
AutoEDA(自動(dòng)探索性數(shù)據(jù)分析)工具庫(kù)是數(shù)據(jù)科學(xué)中至關(guān)重要的一部分,它們能夠自動(dòng)生成數(shù)據(jù)摘要、探查數(shù)據(jù)的基本特征、檢測(cè)異常值和提供可視化,為數(shù)據(jù)科學(xué)家和分析師們提供了解數(shù)據(jù)的便捷方式,本文為大家介紹常見(jiàn)的AutoEDA工具庫(kù)及其功能和示例代碼2024-01-01
Python GUI程序類(lèi)寫(xiě)法與Label介紹
這篇文章主要介紹了Python GUI程序類(lèi)寫(xiě)法與Label介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-09-09
Python實(shí)現(xiàn)字典依據(jù)value排序
新華字典大家都使用過(guò)吧,那么使用python語(yǔ)言是如何實(shí)現(xiàn)字典排序的呢?下面跟著本教程一起學(xué)習(xí)Python實(shí)現(xiàn)字典依據(jù)value排序,需要的朋友參考下吧2016-02-02
python 刪除列表里所有空格項(xiàng)的方法總結(jié)
下面小編就為大家分享一篇python 刪除列表里所有空格項(xiàng)的方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
淺談django model的get和filter方法的區(qū)別(必看篇)
下面小編就為大家?guī)?lái)一篇淺談django model的get和filter方法的區(qū)別(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
深度學(xué)習(xí)環(huán)境搭建anaconda+pycharm+pytorch的方法步驟
本文主要介紹了深度學(xué)習(xí)環(huán)境搭建anaconda+pycharm+pytorch的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09

