不平衡数据研究:分配权重 合并2个loader

 分配权重(基于实例分配,基于类分配)

import numpy as np
import torch
from torch.utils.data import DataLoader, WeightedRandomSampler, Dataset# Mock dataset class
class MockDataset(Dataset):def __init__(self, data, targets):self.data = dataself.targets = targetsself.dr = targets  # mimicking the 'dr' attribute in the original datasetdef __len__(self):return len(self.data)def __getitem__(self, idx):return self.data[idx], self.targets[idx]# Mock get_sampling_probabilities function
def get_sampling_probabilities(class_count, mode='instance', ep=None, n_eps=None):if mode == 'instance':q = 0elif mode == 'class':q = 1elif mode == 'sqrt':q = 0.5elif mode == 'cbrt':q = 0.125elif mode == 'prog':assert ep is not None and n_eps is not None, 'progressive sampling requires to pass values for ep and n_eps'relative_freq_imbal = class_count ** 0 / (class_count ** 0).sum()relative_freq_bal = class_count ** 1 / (class_count ** 1).sum()sampling_probabilities_imbal = relative_freq_imbal ** (-1)sampling_probabilities_bal = relative_freq_bal ** (-1)return (1 - ep / (n_eps - 1)) * sampling_probabilities_imbal + (ep / (n_eps - 1)) * sampling_probabilities_balelse:sys.exit('not a valid mode')relative_freq = class_count ** q / (class_count ** q).sum()sampling_probabilities = relative_freq ** (-1)return sampling_probabilities# Mock modify_loader function
def modify_loader(loader, mode, ep=None, n_eps=None):# 计算每个类别的样本数class_count = np.unique(loader.dataset.dr, return_counts=True)[1]print(f"class_count: {class_count}")# 获取每个类别的采样概率sampling_probs = get_sampling_probabilities(class_count, mode=mode, ep=ep, n_eps=n_eps)print(f"sampling_probs: {sampling_probs}")# 计算每个样本的权重sample_weights = sampling_probs[loader.dataset.dr]print(f"loader.dataset.dr:{loader.dataset.dr}")print(f"sample_weights: {sample_weights}")# 创建加权随机采样器mod_sampler = WeightedRandomSampler(weights=sample_weights, num_samples=len(sample_weights))# 创建新的数据加载器mod_loader = DataLoader(loader.dataset, batch_size=loader.batch_size, sampler=mod_sampler, num_workers=loader.num_workers)return mod_loader# 模拟数据和标签
data = np.random.randn(100, 3, 32, 32)
targets = np.random.choice([0, 1, 2], size=100, p=[0.7, 0.2, 0.1])  # imbalanced classesdataset = MockDataset(data, targets)
loader = DataLoader(dataset, batch_size=10, num_workers=1)# 使用 'class' 模式进行均衡采样
modified_loader = modify_loader(loader, mode='class')# 打印修改后的加载器中的一些样本
for i, (data, target) in enumerate(modified_loader):print(f"Batch {i}:")print(f"Data shape: {data.shape}, Targets: {target}")if i == 2:  # 仅打印前3个批次以简洁break

 合并2个loader

import numpy as np
import torch
from torch.utils.data import DataLoader, Dataset
import torch.nn.functional as F# 定义一个简单的数据集类
class SimpleDataset(Dataset):def __init__(self, data, targets):self.data = dataself.targets = targetsdef __len__(self):return len(self.data)def __getitem__(self, idx):return self.data[idx], self.targets[idx]# 定义 ComboIter 类
class ComboIter(object):"""An iterator."""def __init__(self, my_loader):self.my_loader = my_loaderself.loader_iters = [iter(loader) for loader in self.my_loader.loaders]def __iter__(self):return selfdef __next__(self):# 获取每个 loader 的一个 batchbatches = [loader_iter.__next__() for loader_iter in self.loader_iters]# 返回合并后的 batchreturn self.my_loader.combine_batch(batches)def __len__(self):return len(self.my_loader)# 定义 ComboLoader 类
class ComboLoader(object):"""This class wraps several pytorch DataLoader objects, allowing each timetaking a batch from each of them and then combining these several batchesinto one. This class mimics the `for batch in loader:` interface ofpytorch `DataLoader`.Args:loaders: a list or tuple of pytorch DataLoader objects"""def __init__(self, loaders):self.loaders = loadersdef __iter__(self):return ComboIter(self)def __len__(self):return min([len(loader) for loader in self.loaders])# 自定义合并批次的方法def combine_batch(self, batches):return batches# 创建两个数据集和 DataLoader
data1 = torch.randn(100, 3, 32, 32)
targets1 = torch.randint(0, 2, (100,))
dataset1 = SimpleDataset(data1, targets1)
loader1 = DataLoader(dataset1, batch_size=10)data2 = torch.randn(100, 3, 32, 32)
targets2 = torch.randint(0, 2, (100,))
dataset2 = SimpleDataset(data2, targets2)
loader2 = DataLoader(dataset2, batch_size=10)# 使用 ComboLoader 合并两个 DataLoader
combo_loader = ComboLoader([loader1, loader2])# 打印合并后的批次数据格式
print("\nCombined Loader batches:")
for i, batches in enumerate(combo_loader):print(f"Batch {i}:")for j, batch in enumerate(batches):print(f" Sub-Batch {j}: Data shape: {batch[0].shape}, Targets: {batch[1]}")if i == 2:  # 仅打印前3个批次以简洁break

 

import numpy as np
import torch
from torch.utils.data import DataLoader, Dataset# 定义一个简单的数据集类
class SimpleDataset(Dataset):def __init__(self, data, targets):self.data = dataself.targets = targetsdef __len__(self):return len(self.data)def __getitem__(self, idx):return self.data[idx], self.targets[idx]# 定义 ComboIter 类
class ComboIter(object):"""An iterator."""def __init__(self, my_loader):self.my_loader = my_loaderself.loader_iters = [iter(loader) for loader in self.my_loader.loaders]def __iter__(self):return selfdef __next__(self):# 获取每个 loader 的一个 batchbatches = [loader_iter.__next__() for loader_iter in self.loader_iters]# 返回合并后的 batchreturn self.my_loader.combine_batch(batches)def __len__(self):return len(self.my_loader)# 定义 ComboLoader 类
class ComboLoader(object):"""This class wraps several pytorch DataLoader objects, allowing each timetaking a batch from each of them and then combining these several batchesinto one. This class mimics the `for batch in loader:` interface ofpytorch `DataLoader`.Args:loaders: a list or tuple of pytorch DataLoader objects"""def __init__(self, loaders):self.loaders = loadersdef __iter__(self):return ComboIter(self)def __len__(self):return min([len(loader) for loader in self.loaders])# 自定义合并批次的方法def combine_batch(self, batches):combined_data = torch.cat([batch[0] for batch in batches], dim=0)combined_targets = torch.cat([batch[1] for batch in batches], dim=0)return combined_data, combined_targets# 创建两个数据集和 DataLoader
data1 = torch.randn(100, 3, 32, 32)
targets1 = torch.randint(0, 2, (100,))
dataset1 = SimpleDataset(data1, targets1)
loader1 = DataLoader(dataset1, batch_size=10)data2 = torch.randn(100, 3, 32, 32)
targets2 = torch.randint(0, 2, (100,))
dataset2 = SimpleDataset(data2, targets2)
loader2 = DataLoader(dataset2, batch_size=10)# 打印每个加载器中的一些批次数据
print("Loader 1 batches:")
for i, (data, targets) in enumerate(loader1):print(f"Batch {i}:")print(f"Data shape: {data.shape}, Targets: {targets}")if i == 2:  # 仅打印前3个批次以简洁breakprint("\nLoader 2 batches:")
for i, (data, targets) in enumerate(loader2):print(f"Batch {i}:")print(f"Data shape: {data.shape}, Targets: {targets}")if i == 2:  # 仅打印前3个批次以简洁break# 使用 ComboLoader 合并两个 DataLoader
combo_loader = ComboLoader([loader1, loader2])# 打印合并后的批次数据
print("\nCombined Loader batches:")
for i, (data, targets) in enumerate(combo_loader):print(f"Batch {i}:")print(f"Data shape: {data.shape}, Targets: {targets}")if i == 2:  # 仅打印前3个批次以简洁break

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/840174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玩转OpenHarmony智能家居:如何实现开发版“碰一碰”设备控制

一、简介 “碰一碰”设备控制,依托NFC短距通信协议,通过碰一碰的交互方式,将OpenAtom OpenHarmony(简称“OpenHarmony”)标准系统设备和全场景设备连接起来,解决了应用与设备之间接续慢、传输难的问题&…

什么是DDoS流量清洗?

随着互联网的飞速发展,网络安全问题日益凸显,其中分布式拒绝服务(DDoS)攻击尤为引人关注。为了有效应对这一威胁,流量清洗服务应运而生,成为网络安全领域的一项重要技术。 流量清洗服务是一种专门针对DDoS…

昔日辉煌不再,PHP老矣,尚能饭否?

导语 | 近期 TIOBE 最新指数显示,PHP 的流行度降至了历史最低,排在第 17 名,同时,在年度 Stack Overflow 开发者调查报告中,PHP 在开发者中的受欢迎程度已经从之前的约 30% 萎缩至现在的 18%。“PHP 是世界上最好的语言…

WiFi蓝牙模块开发配置过程中需要注意的细节

在很多产品的应用场景中,WIFI网络会给我们提供很多便捷,MCU开发中大多使用串口WIFI蓝牙模块来实现产品接入WIFI网络中。   具体的使用模型如下图所示:整个系统涉及到WIFI网络、手机、服务器平台以及我们设计的产品,一个完整的生…

Docker技术搭建Grafana监控平台

centos7虚拟机和docker的安装:可以参考之前的博文 CPU、mysql-exporter、docker监控模板:百度网盘 提取码:0000 先查看服务器时间是否和当前时间一致,如果不一致,查看对应设置:centos7时间同步博文 一、…

拆分盘投资深度解析:投资逻辑、风险探讨与投资建议

随着互联网技术的飞速发展,金融领域也迎来了诸多创新。其中,拆分盘作为一种新型投资模式,以其独特的“只涨不跌”机制,吸引了众多投资者的目光。本文将深入探讨拆分盘的投资逻辑,并通过一个实际案例进行解析&#xff0…

BUUCTF [GUET-CTF2019]zips 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。 密文: 得到一个attachment.zip文件 解题思路: 1、解压attachment.zip,得到222.zip文件。尝试解压需要密码,使用Ziperello爆破密码…

Elementui里使用el-date-picker来选择多个日期(日期数量不超过31个)

<el-date-picker style"width:350px;"v-model"selectedDates" type"dates" :picker-options"pickerOptionsMul" placeholder"选择日期"> </el-date-picker>data(){return{selectedDates: [],pickerOptionsMul: …

CATIA入门操作——萌新宝宝遇到的奇奇怪怪的问题解决,持续更新中。。。

目录 引出发生肾么事了&#xff1f;&#xff1f;鼠标中键旋转不了解决&#xff1a;特征树不显示参数关系 我的窗口去哪了&#xff1f;插曲&#xff1a;草图工具的调出插曲&#xff1a;颜色工具栏显示 弹窗警告警告&#xff1a;创建约束是临时的 操作技巧技巧&#xff1a;快速隐…

unity 常用工具和代码

GitHub - edcasillas/unity-missing-references-finder: A tool to find missing references in Unity ASE MagicaCloth PostProcessing GPU culling AmplifyColor Bakery

Unity功能——设置图片渐显渐掩

两种方式&#xff1a; 本质都是 根据时间修改图片透明度 达到动态显示或掩藏图片的效果 1、监测图片透明度&#xff0c;根据图片透明度值来显示或掩藏图片&#xff1b; 2、监测时间&#xff0c;根据时间长短来显示或掩藏图片&#xff1b; 可根据项目需求进行选择和细节修改。 …

微软必应全球宕机事件分析及其对ChatGPT、Copilot等服务的影响

微软必应全球宕机事件分析及其对ChatGPT、Copilot等服务的影响 一、引言 在数字化时代&#xff0c;云计算和在线服务已成为人们日常生活和工作不可或缺的一部分。然而&#xff0c;当这些服务遭遇故障或宕机时&#xff0c;其影响范围往往远超出人们的想象。近期&#xff0c;微…

Bytebase 2.17.0 - 支持为工单设置标签

&#x1f680; 新功能 支持为工单设置标签。 支持显示工单任务执行日志&#xff0c;如影响行数或错误&#xff08;支持 MySQL 和 PostgreSQL&#xff09;。 支持在数据库页面为表或列配置分类分级。之前的版本需要通过 DDL 实现&#xff0c;且只支持 MySQL 和 PostgreSQL。…

C语言从头学11——运算符优先级

前面曾提及多使用圆括号来回避运算符优先级的问题&#xff0c;这里还是大致介绍一下运算符优先级的主要内容。优先级是指如果一个表达式包含多个运算符&#xff0c;哪个运算符优先执行的顺序问题。各种运算符的优先级是不一样的。下面是部分常用运算符的优先级顺序(从高到低)&a…

【传知代码】Modnet 人像抠图-论文复现

文章目录 概述原理介绍核心逻辑ModNet 的结构 环境配置WebUI 小结 论文地址 论文GitHub 本文涉及的源码可从Modnet 人像抠图该文章下方附件获取 概述 人像抠图技术在多个领域有着广泛的应用场景&#xff0c;包括但不限于&#xff1a; 展馆互动拍照&#xff1a;展馆中使用的抠…

【高阶数据结构】 B树 -- 详解

一、常见的搜索结构 适合做内查找&#xff1a; 以上结构适合用于数据量相对不是很大&#xff0c;能够一次性存放在内存中&#xff0c;进行数据查找的场景。如果数据量很大&#xff0c;比如有 100G 数据&#xff0c;无法一次放进内存中&#xff0c;那就只能放在磁盘上了。 如果…

计算机系统基础 8 循环程序

概要 两种实现方法——分支指令实现和专门的循环语句实现以及有关循环的优化。 分支指令实现 倒计数 …… MOV ECX&#xff0c;循环次数 LOOPA&#xff1a;…… …… DEC ECX JNE LOOPA 正计数 …… MOV ECX&#xff0c;0 LOOPA&#xff1a; …… INC ECX CMP …

向郭老师学习研发项目管理

学习研发项目管理思路 通过以下思路来学习研发项目管理&#xff1a; 1、研发项目管理分3级 2、研发项目管理分4类 3、研发项目管理分5大过程组 4、新产品开发项目生命周期分6个阶段 5、研发项目管理分10大知识体系 项目组合、项目集、简单项目3级管理 针对Portfolio组合…

Nodejs及stfshow相关例题

Nodejs及stfshow相关例题 Node.js 是一个基于 Chrome V8 引擎的 Javascript 运行环境。可以说nodejs是一个运行环境&#xff0c;或者说是一个 JS 语言解释器而不是某种库。 Node.js可以生成动态页面内容Node.js 可以在服务器上创建、打开、读取、写入、删除和关闭文件Node.js…