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 的输出(最后一层)有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

CNN输出每一层的卷积核,即每一层的权重矩阵和偏移量矩阵

损失函数中带有 SVM 的最后一层 CNN

迁移学习与fine-tuning有什么区别

卷积神经网络(CNN)的整体框架及细节(详细简单)

CNN、RNN、DNN的内部网络结构有啥区别?

Keras Dense 层和 Pytorch 的 nn.linear 层有区别吗?