【发布时间】:2021-09-30 12:00:13
【问题描述】:
给定一个网络, 输入 -> 带有 ReLU 激活的隐藏层 -> 带有 Sigmoid 激活的输出层
我想知道如何输出 0 到 0.5 之间的值,因为 ReLU 根据定义返回正值,而 sigmoid 由 1/(1+e^-x) 定义,最小值为 1/(1+ e^-0) = 0.5
Sigmoid 激活是否发生了变化?因为我得到了 0 和 1 之间的输出(如手册所述),但为什么呢?
编辑
这是一段代码,它在控制台中打印函数输出,它显示了我的预期:它从 0.5 开始,当 x>0 时增加。
import numpy as np
import tensorflow as tf
x = np.array([x/10 for x in range(-20,20)])
y = tf.keras.activations.sigmoid(
tf.keras.activations.relu(x)
)
for a,b in zip(x,y):
print(a,"\t",float(b))
输出
-0.2 0.5
-0.1 0.5
0.0 0.5
0.1 0.52497918747894
0.2 0.549833997312478
0.3 0.574442516811659
0.4 0.5986876601124521
如果我这样做了
x = Dense(64, activation="relu")(input)
output = Dense(1, activation="sigmoid")(x)
我收到介于 0 和 1 之间的值。
【问题讨论】:
-
你试过绘制函数吗?
-
这方面有大量的链接 - 但请尝试例如images.app.goo.gl/TBWdN8i8sLEEKhNo9
-
x 可以是负数,所以 x ->
-inf函数趋向于 0。ReLU 也可以有一个负数 x - 它只是将输出设置为零低于 x = 0,这就是为什么你可能不这么认为。 -
是的,现在我已经打印了这个函数,它按照我说的做了,它的 0.5 代表 x=0
-
据我所知,它确实应用了偏差 (
use_bias=True) - 但默认偏差为零,所以你可以在那里。 keras.io/api/layers/core_layers/dense
标签: python tensorflow keras