Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pytorch中的多标签分类_Pytorch - Fatal编程技术网

pytorch中的多标签分类

pytorch中的多标签分类,pytorch,Pytorch,我有一个多标签分类问题。我有11门课,大约4k的例子。每个示例可以有1到4-5个标签。目前,我正在为每个日志丢失的类分别训练一个分类器。正如您所期望的,训练11个分类器需要相当长的时间,我想尝试另一种方法,只训练1个分类器。其思想是,该分类器的最后一层将有11个节点,并将按类输出一个实数,该实数将由一个sigmoid转换为proba。我想优化的损失是所有类的log_损失的平均值 不幸的是,我对pytorch有些不了解,即使通过阅读损失的源代码,我也不知道已经存在的损失是否完全符合我的要求,或者我

我有一个多标签分类问题。我有11门课,大约4k的例子。每个示例可以有1到4-5个标签。目前,我正在为每个日志丢失的类分别训练一个分类器。正如您所期望的,训练11个分类器需要相当长的时间,我想尝试另一种方法,只训练1个分类器。其思想是,该分类器的最后一层将有11个节点,并将按类输出一个实数,该实数将由一个sigmoid转换为proba。我想优化的损失是所有类的log_损失的平均值

不幸的是,我对pytorch有些不了解,即使通过阅读损失的源代码,我也不知道已经存在的损失是否完全符合我的要求,或者我是否应该创建一个新的损失,如果是这样,我真的不知道如何做

具体来说,我想为批次的每个元素提供一个大小为11的向量(每个标签包含一个实数(越接近无穷大,该类预计越接近1),以及一个大小为11的向量(每个真实标签包含一个1),并能够计算所有11个标签上的平均对数损失,并基于该损失优化我的分类器

任何帮助都将不胜感激:)

您正在寻找。下面是示例代码:

导入火炬
批量大小=2
num_classes=11
损耗=火炬.nn.BCELoss()
sigmoid之前的输出=torch.randn(批量大小,数量类)
sigmoid_输出=火炬。sigmoid(sigmoid前的输出)
target_classes=torch.randint(0,2,(批量大小,数量类))#randints在[0,2]中。
损耗=损耗fn(sigmoid输出、目标类)
#或者,在sigmoid之前的输出上使用BCE和logits。
loss_fn_2=torch.nn.BCEWithLogitsLoss()
loss2=loss_fn_2(输出在sigmoid之前,目标类)
断言损失==损失2

谢谢你的回答,我相信这实际上是我想要的损失。我在我的网络中不做sigmoid,所以我选择使用BCEWithLogitsLoss。但是,我仍然遇到一个问题,当我运行代码时,我得到一个错误“->1651 loss=input-input*target+max\u val+(-max\u val.exp()+(-input-max\u val.exp())。log()RuntimeError:预期对象的类型为torch.cuda.FloatTensor,但发现参数#2“other”的类型为torch.cuda.LongTensor,此错误来自BCEWithLogitsLoss的源代码。有什么见解吗?我自己设法解决了这个问题,加载目标时,我将其类型更改为float,它修复了我的错误。