问题陈述
事实上,为了训练多标签数据集的网络,通常使用单热向量输出。
例子:
狗 [1 0 0]
猫 [0 1 0]
兔子 [0 0 1]
因此,我们增加了权重矩阵的大小以及所需的训练时间。
问题:有没有一种方法可以使用一个输出并将其量化为不同的类?
例子:
0 <= 输出 < =1
狗 [0.0 - 0.33]
猫 [0.33 - 0.66]
兔子 [0.66 - 1]
事实上,为了训练多标签数据集的网络,通常使用单热向量输出。
例子:
狗 [1 0 0]
猫 [0 1 0]
兔子 [0 0 1]
因此,我们增加了权重矩阵的大小以及所需的训练时间。
问题:有没有一种方法可以使用一个输出并将其量化为不同的类?
例子:
0 <= 输出 < =1
狗 [0.0 - 0.33]
猫 [0.33 - 0.66]
兔子 [0.66 - 1]
坏主意,不要那样做。
1)您在不存在的类中引入了排序。基本上,在您的示例中,您是在说:“dog接近cat”,“cat接近rabbit”,但“远离” ,这dog是您的网络需要学习的额外学习功能。rabbit
例如,如果网络输出0.35,那么它是类cat,但它也接近dog和远离rabbit。
2) 另一个问题,有些结果是无法表示的。
例如,如果您将范围更改为:
0 <= 输出 < =1
猫 [0.0 - 0.33]
兔子 [0.33 - 0.66]
狗 [0.66 - 1]
您将如何表示以前的相同示例(“它是类cat,但它也接近dog和远离rabbit。”)?变得不可能了。
使用以前的表示,您可以:
output = [0.5, 0.0, 0.5] # cat, rabbit, dog
您如何将其映射到新范围 wherecat = [0.0-0.33]和dog = [0.66-1.0]?我们可以选择中间的 ( 0.5) 吗?不,因为那是 class rabbit。
通过这样做,您可以减少最终层中的权重数量(很好),但是,您会引入需要学习的依赖关系,并且某些结果是不可表示或不可解释的。
执行一种标签编码,然后对列进行规范化。