为了账号安全,请及时绑定邮箱和手机立即绑定

我应该使用 softmax 还是 tf.nn.sigmoid_cross_entropy

我应该使用 softmax 还是 tf.nn.sigmoid_cross_entropy

素胚勾勒不出你 2022-10-25 14:50:27
我正在阅读有关 NN 的内容,并且还想同时生成我的第一个 NN(以补充我的阅读内容)。我有一个这样的数据集:DNA_seq  Sample1Name  Sample1Name  ConcOfDNAInSample  DNASeqFoundInProcessCatAGGAG     cat_0     cat_1    0.1   found_in_0  AGGAG     cat_1     cat_2    0.4   found_in_3ACCCC     cat_1     cat_7    0.1   found_in_2AGAGAGA   cat_2     cat_10   1.9   found_in_1ADAS      cat_332   cat_103  8.9   found_in_1列:DNASeq -> 一串 DNA 序列(即“序列”)Sample1Name -> 分类值,解释 DNASeq 所在溶液的化学性质。Sample2Name -> 分类值,解释 DNASeq 所在溶液的化学性质。ConcOfDNAInSample -> Sample2SName 中 DNA 浓度的定量值。DNASeqFoundInProcessCat -> 这是我要预测的标签。它是一个具有四个类别(found_in_0 -> found_in_3)的分类值。这是我对每个 DNASeq 进行三个测试以查看我是否操纵原始解决方案(即 found_in_0)的输出,DNASeq 是否仍然存在。我的问题:对于一组看不见的序列,我希望输出标签集是“found_in_1”、“found_in_2”、“found_in_3”的多类概率。即,如果上面的示例是我的测试集的输出,那么我的输出理想情况下应该是这样的:DNA_seq  Sample1Name  Sample1Name  ConcOfDNAInSample  DNASeqFoundInProcessCatAGGAG     cat_0     cat_1    0.1   (0.9,0.5,0.1)  AGGAG     cat_1     cat_2    0.4   (0.8,0.7,0.3)ACCCC     cat_1     cat_7    0.1   (0.2,0.5,0.3)AGAGAGA   cat_2     cat_10   1.9   (0.7,0.2,0.9)ADAS      cat_332   cat_103  8.9   (0.6,0.8,0.7)有一些注意事项:有可能因为我正在做的过程,一些序列不能在原始解决方案中(found_in_0),但是因为 DNA 位可以粘在一起,它们随后可以在其他类中(found_in_1、found_in_2、found_in_3 )我只对found_in_1、found_in_2 和found_in_3 类的输出感兴趣(即我想要最后的三类概率,而不是found_in_0 的四类概率)。我能够从 DNA 序列中生成其他特征,这只是一个例子。从我的数据可以看出,我的数据集是不平衡的,found_in_3中的数据量明显低于其他(我的完整训练数据大约80000行;但是其中只有大约10000行是found_in_3;其他的都是found_in_0、found_in_1 或 found_in_2)。我要解决的是算法,特别是针对一个特定点。我的想法是:1.读入数据。df = pd.read_csv('data')2.将数据集拆分为训练和测试import sklearnfrom sklearn.model_selection import train_test_splitX_train,X_test,Y_train,Y_test = train_test_split(X,y,test_size=0.2,random_state=42)3.了解数据集(即我在上面第 4 点中看到的代表性不足的地方)。我有一系列的功能......所以假设我有一个标准化的数据集,即上表。所以我知道我想为我的数据复制一组类似的步骤,并且我正在尝试解决如何做到这一点,我无法理解的是我是否必须使用 tf.nn.sigmoid_cross_entropy_with_logits 来解决这个问题(因为每个输入都可以属于移动而不是一个标签,即可以存在于found_in_1、found_in_2和found_in_3中,这可以产生每个类的概率输出?)或者我可以只使用这样的softmax函数吗?
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

如果每个输入可以属于多个标签/类,则需要使用tf.nn.sigmoid_cross_entropy_with_logits. 如果您sigmoid在模型输出上使用,您将获得标签3的概率。您可以在此处3阅读更多详细信息。



查看完整回答
反对 回复 2022-10-25
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

softmax和之间有根本的区别sigmoid_cross_entropy_with_logits。第一个应用softmax函数。本质上,您提供输入的非标准化分数(logits)并输出可以解释为概率的标准化值。

另一方面,sigmoid_cross_entropy_with_logits首先会得到一个 sigmoid,然后labales以数值稳定的方式计算交叉熵(反对 ,它的第一个参数!)。

更详细的解释可以在这里找到,例如。我猜你追求的是softmax.


查看完整回答
反对 回复 2022-10-25
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

经验法则:假设您有多个类/标签,每个样本是否恰好属于一个类(只有一个标签)?

是的:多类。使用 softmax 进行激活,使用 [sparse] 分类交叉熵进行损失。

,对象可以同时属于多个类:多标签。使用 sigmoid 进行激活,使用二元交叉熵进行损失。

根据描述,我不确定您的情况是什么情况。


查看完整回答
反对 回复 2022-10-25
  • 3 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信