sigmoid 函数是不是只适用于dense() 层之后?

Posted

技术标签:

【中文标题】sigmoid 函数是不是只适用于dense() 层之后?【英文标题】:Is sigmoid function only applicable after dense() layer?sigmoid 函数是否只适用于dense() 层之后? 【发布时间】:2021-12-16 17:51:29 【问题描述】:

我正在制作一个类似于 SE-Net(https://github.com/titu1994/keras-squeeze-excite-network/blob/master/se.py) 的网络 使用 keras,但与它完全不同。

假设我想制作一些图层序列,例如:

import keras

Input = keras.model.Input((None,None,3))
x1 = keras.layers.Conv2d(filters = 32, kernel_size = (3,3))(Input)
x_gp = keras.layers.GlobalAveragePooling()(x1)
x2 = keras.layers.Conv2d(filters = 32, kernel_size = (1,1))(x_gp)
x3 = keras.layers.Conv2d(filters = 8, kernel_size = (1,1))(x2)
x2_ = keras.layers.Conv2d(filters = 32, kernel_size = (1,1))(x3)
x_se = keras.activation.sigmoid()(x2_)

我想知道像这样应用 x_se 是可编程的。如果我做错了,请告诉我。

【问题讨论】:

“可编程”是什么意思? @Dr.Snoopy 抱歉这个词含糊不清。我想知道它是否没有错误,原始 SE-net 使用了 reshape 和dense 层,所以我想知道 reshape-and-dense 过程可以用 conv 层替换 【参考方案1】:

您当然也可以试验 sigmoid 作为 cnn 层的激活,但 sigmoid 不与 cnn 层一起使用的原因是:

1. Sigmoid 函数是单调的,但它的导数不是,因此您的训练可能会卡住

2。 Sigmoid 范围:[0,1]

如果你正在用 cnn 层试验 sigmoid,那么我建议你只在几层上使用它。 你可以试试swish

【讨论】:

感谢您的建议。我还有一个问题。在 dense() 上应用 sigmoid 与在 conv2d() 上应用不同吗? 不,没有什么不同。在稠密中,我们使用 sigmoid 来获得 0 到 1 之间的概率进行二元分类。

以上是关于sigmoid 函数是不是只适用于dense() 层之后?的主要内容,如果未能解决你的问题,请参考以下文章

pytorch中BCEWithLogitsLoss&CrossEntropyLoss函数

机器学习

sigmoid有啥作用

sigmoid函数与softmax函数

Keras 在激活函数之前检索节点的值

ReLU为什么比Sigmoid效果好