我正在使用 tensorflow 和 keras 做一个深度学习模型。我对输出架构有疑问。我想在两个类之间进行分类,有缺陷的图像和没有缺陷的图像,我已经构建了一个基于 VGG16 但更小的 CNN。这个问题基本上是一个二元分类。可以在输出上使用一个独特的神经元,使用 sigmoid 激活和二元交叉熵函数作为损失。另一种选择是使用两个神经元,使用 softmax 和分类交叉熵作为损失(当然,使用 onehot 编码器来表示 2 个标签)。我一直在寻找这两个选项之间区别的详细解释,但我还没有找到我真正想知道的答案。
这是我读过的一个相关问题:https : //stats.stackexchange.com/a/260537/295456 这里说二元交叉熵只是分类交叉熵的一个特例。
这种方法有什么好处吗?我想知道这两种选择的优缺点。网络会更快/更慢地收敛吗?会有更多的参数来训练吗?这个选项之一可以被认为是糟糕的设计吗?
这只是表示这两个 aproches 的示意图代码:
## Opt 1.
targets = [[0,1], [1,0],...]
...
model.add(Dense(units = 2, activation = 'softmax'))
model.compile(loss = 'categorical_crossentropy')
## Opt 2.
targets = [1,0,1,...]
...
model.add(Dense(units = 1, activation = 'sigmoid'))
model.compile(loss = 'binary_crossentropy')