当前位置: 首页 > 编程笔记 >

在Pytorch中使用样本权重(sample_weight)的正确方法

云正信
2023-03-14
本文向大家介绍在Pytorch中使用样本权重(sample_weight)的正确方法,包括了在Pytorch中使用样本权重(sample_weight)的正确方法的使用技巧和注意事项,需要的朋友参考一下

step:

1.将标签转换为one-hot形式。

2.将每一个one-hot标签中的1改为预设样本权重的值

即可在Pytorch中使用样本权重。

eg:

对于单个样本:loss = - Q * log(P),如下:

P = [0.1,0.2,0.4,0.3]
Q = [0,0,1,0]
loss = -Q * np.log(P)

增加样本权重则为loss = - Q * log(P) *sample_weight

P = [0.1,0.2,0.4,0.3]
Q = [0,0,sample_weight,0]
loss_samle_weight = -Q * np.log(P)

在pytorch中示例程序

train_data = np.load(open('train_data.npy','rb'))
train_labels = []
for i in range(8):
  train_labels += [i] *100
train_labels = np.array(train_labels)
train_labels = to_categorical(train_labels).astype("float32")
sample_1 = [random.random() for i in range(len(train_data))]
for i in range(len(train_data)):
  floor = i / 100
  train_labels[i][floor] = sample_1[i]
train_data = torch.from_numpy(train_data) 
train_labels = torch.from_numpy(train_labels) 
dataset = dataf.TensorDataset(train_data,train_labels) 
trainloader = dataf.DataLoader(dataset, batch_size=batch_size, shuffle=True)

对应one-target的多分类交叉熵损失函数如下:

def my_loss(outputs, targets):
  
  output2 = outputs - torch.max(outputs, 1, True)[0]
 
 
  P = torch.exp(output2) / torch.sum(torch.exp(output2), 1,True) + 1e-10
 
 
  loss = -torch.mean(targets * torch.log(P))
 
 
  return loss

以上这篇在Pytorch中使用样本权重(sample_weight)的正确方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 问题内容: 我刚刚在我的项目中发现了一些这样的sql查询构建: 这是否达到其目标,即减少内存使用量? 我对此表示怀疑,因为在构造函数中使用了“ +”(字符串concat运算符)。像下面的代码那样,将占用与使用String相同的内存量吗?我了解,使用时有所不同。 两条语句的内存使用量是否相等?请澄清。 提前致谢! 编辑: 顺便说一句, 这不是我的代码 。在一个旧项目中发现它。而且,查询的大小不如我的

  • 问题内容: 如何在PyTorch中的网络中初始化权重和偏差(例如,使用He或Xavier初始化)? 问题答案: 要初始化单层的权重,请使用中的函数。例如: 或者,您可以通过写入(是)来修改参数。例: 偏见也是如此: 或自定义 将初始化函数传递给。它将以递归方式初始化整个权重。 申请( FN ): 适用递归到每个子模块(通过返回的),以及自我。典型的用法包括初始化模型的参数(另请参见torch-nn

  • 我使用torch的标准数据加载器。乌提尔斯。数据我创建dataset类,然后按以下方式构建DataLoader: 它运行完美,但是数据集足够大——300k图像。因此,使用DataLoader读取图像需要大量时间。所以在调试阶段构建这么大的DataLoader真的很糟糕!我只是想测试一些我的假设,想快点做!我不需要为此加载整个数据集。 我试图找到一种方法,如何只加载数据集的一小部分,而不在整个数据集

  • 问题内容: 我现在正在做一些React,我想知道是否有一种“正确的”方式来进行条件样式设计。在本教程中,他们使用 我不想使用内联样式,因此我想使用一个类来控制条件样式。一个人将如何以React的思维方式来实现这一目标?还是应该只使用这种内联样式方式? 问题答案: 如果您更喜欢使用类名,请务必使用类名。 您可能还会发现类名称包很有用。有了它,您的代码将如下所示: 没有“正确”的方法来进行条件样式设计

  • 我来自像angular、react和vue这样的前端webframeworks,我很难找到编写可重用小部件样式的最佳方法。让我用一个例子来演示这个问题。 假设我们有这个小部件: 现在让我们假设我想让属性像、等可以通过参数改变。如果没有传递属性的某个参数,则应该使用其默认值,如下所示:

  • 问题内容: 使用cron运行脚本时,在内部调用的任何可执行文件都必须具有完整路径。我发现这种尝试运行wondershaper的方法时,尝试调用tc时出现许多错误。所以我的问题是,克服这个问题的正确方法是什么? 可能的解决方案: cd到可执行文件文件夹,并在其中准备指向任何其他称为可执行文件的符号链接(不确定它是否有效-可移植性低) 在脚本中使用完整路径(有效-不同发行版之间的可移植性较低) 在脚本

  • 本文向大家介绍Linux中Homebrew的正确使用方法,包括了Linux中Homebrew的正确使用方法的使用技巧和注意事项,需要的朋友参考一下 很多人都在使用Linux Homebrew ,有三个技巧可以帮助你更好的使用它: 避免环境污染 首先要避免将 Homebrew 的 bin 目录添加到 $PATH ,而仅仅将你需要使用的几个可执行做软连接放到 ~/bin 下面(这个目录在 $PATH

  • 问题内容: 我正在尝试学习如何在PyQt Gui应用程序中使用QThreads。我有一些可以运行一段时间的东西,(通常)可以在其中更新Gui的点,但是我想将主要工作拆分为自己的线程(有时东西会卡住,最终有一个取消/重试按钮,如果Gui被冻结(因为主循环被阻塞),则该按钮显然不起作用)。 我已阅读https://mayaposch.wordpress.com/2011/11/01/how-to-re