NN 和 CNN 的输出(最后一层)有区别吗?
Posted
技术标签:
【中文标题】NN 和 CNN 的输出(最后一层)有区别吗?【英文标题】:Is there a difference in the output (final layer) between NN and CNN? 【发布时间】:2020-09-12 18:15:48 【问题描述】:在多类分类的情况下,如果类的数量是N
,那么一个NN就有N
的输出节点。然而,对于使用 NN 的二元分类,输出节点只有一个。
困惑:对于使用带有整数值标签(0/1 或 1/2)的 CNN 的二进制分类,输出节点的数量是否为 2?或者使用 one-hot 编码方案 0-0、0-1、1-0 和 1-1,输出节点的数量将为 2,否则为 1 个输出节点。
这种混淆也来自实现语法。在下面使用 CNN 的代码中,对于二进制分类,当类是整数值 0/1 或 1/2 时,我必须提到 numClasses =2
。这是否意味着有 2 个输出节点?错的地方请指正。
inputSize = [28 28 1];
numClasses = 2;
layers = [
imageInputLayer(inputSize)
convolution2dLayer(5,20)
batchNormalizationLayer
reluLayer
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];
【问题讨论】:
【参考方案1】:实现语法正确。但是对于二元分类,只使用 sigmoid 激活而不是 softmax,最后一层只有一个节点。
使用 sigmoid 时,输出节点数为 1,不使用一种热编码。 sigmoid 的输出是概率,如果概率大于 0.5,则输出类为 1 类 否则为 2 级。
使用softmax时,输出节点数为2,需要1个热编码。 两个输出节点代表每个相应类别的概率。
【讨论】:
感谢您的回答。只是澄清一下,如果我正确地跟随你(1)使用conv NN进行二进制分类,如果numclasses = 2
那么我会使用softmax
;对于相同的二进制分类,如果numclasses=1
那么我应该使用sigmoid
对吗? (2) sigmoid 和 softmax 的选择完全取决于设计者吗?或者是否存在性能差异从而产生偏好?
(1) 没有 numclasses 相同,即在两个激活中都为 2。 softmax 的输出是概率,这些概率的总和为 1。因此,在二进制分类的情况下,一个输出节点的概率可以通过从 1 中减去另一个节点的概率来计算,因此一个节点变得多余。因此,在二进制分类的情况下,sigmoid 激活是首选,因为它直接输出一个可以分配给一个类的概率,而其他类的概率可以通过从 1 中减去来计算。
(2) 由于 softmax 有两个输出节点,一个用于 sigmoid,用于二进制分类。因此,带有 softmax 的 NN 有更多的权重偏差需要训练。在性能方面,两个 NN 可以相同,但对于具有 softmax 的那个,需要更多的训练时间(epoch)。以上是关于NN 和 CNN 的输出(最后一层)有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章