首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flux.jl中的多标签分类?

Flux.jl中的多标签分类?
EN

Stack Overflow用户
提问于 2021-09-13 14:06:45
回答 1查看 75关注 0票数 2

我目前正在处理一个数据集,其中类之间的边界定义得不是很好。我不想使用常规分类,因为这些类的细微差别重叠可能无法使用该设置来表示。

我在PyTorch中看到过类似的设置,其中使用了二进制交叉熵损失函数,但除此之外,我不确定需要做些什么才能将我的问题从分类转变为Flux中的多标签分类。从Flux.jl docs上看,我可能想要使用自定义拆分标签?

EN

回答 1

Stack Overflow用户

发布于 2021-09-15 13:21:05

这个问题让我思考如何在我自己的ML库BetaML中实现多标签分类,最终它变得相对容易:

(编辑:只需使用几个DenseLayer和第二层的激活函数f=x -> (tanh(x) + 1)/2即可简化模型)

代码语言:javascript
复制
using BetaML

# Creating test data..
X = rand(2000,2)
# note that the Y are 0.0/1.0 floats
Y = hcat(round.(tanh.(0.5 .* X[:,1] + 0.8 .* X[:,2])),
         round.(tanh.(0.5 .* X[:,1] + 0.3 .* X[:,2])),
         round.(tanh.(max.(0.0,-3 .* X[:,1].^2 + 2 * X[:,1] + 0.5 .* X[:,2]))))
# Creating the NN model...
l1 = DenseLayer(2,10,f = relu)
l2 = DenseLayer(10,3,f = x -> (tanh(x) + 1)/2)
mynn = buildNetwork([l1,l2],squaredCost,name="Multinomial multilabel regression Model")
# Train of the model...
train!(mynn,X,Y,epochs=100,batchSize=8)
# Predictions...
ŷ = round.(predict(mynn,X))
(nrec,ncat) = size(Y) 
# Just a basic accuracy measure. I could think to extend the ConfusionMatrix measures to multi-label classification if needed..
overallAccuracy = sum(ŷ .== Y)/(nrec*ncat) # 0.999

我最初考虑使用带有可学习beta参数的softmax,但后来我意识到这种方法是不可能的:模型如何能够区分Y = [0 0 0]Y = [1 1 1]?因此,我最终得到了一个具有调整后的tanh函数的层,该函数保证每个标签的输出“独立”在0,1范围内,并将阈值设置为0.5,这是最大化损失的值(在BetaML中,如果最后一层有多个节点,则输出已经是一个向量)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69164122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档