Lar*_* Xu 5 machine-learning inverse neural-network tensorflow activation-function
张量流中是否有logit函数,即sigmoid函数的逆函数?我已经搜索过谷歌,但没有找到任何。
小智 5
tf.log_sigmoid()不是一个logit函数。它是逻辑函数的对数。
来自 TF 文档:
y = log(1 / (1 + exp(-x)))
Run Code Online (Sandbox Code Playgroud)
据我所知,TF 没有 logit 函数,因此您必须自己制作,正如第一个答案最初建议的那样。
给定 logit 函数的定义(作为 sigmoidal 逻辑函数的反函数),自己实现它是相当简单的(参见维基百科“Logit”文章):
作为sigmoid(x) = 1 / (1 + exp(-x)),
logit(y) = sigmoid(x)^-1 = log(y / (1 - p)) = -log( 1 / p - 1)
执行:
import tensorflow as tf
def logit(x):
""" Computes the logit function, i.e. the logistic sigmoid inverse. """
return - tf.log(1. / x - 1.)
x = tf.random_uniform((5, ), minval=-10., maxval=10., dtype=tf.float64)
# sigmoid(x):
x_sig = tf.sigmoid(x)
# logit(sigmoid(x)) = x:
x_id = logit(x_sig)
# Verifying the equality:
comp = tf.abs(x - x_id)
with tf.Session() as sess:
a, a_id, co = sess.run([x, x_id, comp])
print(a)
# [ 0.99629643 1.4082849 6.6794731 7.64434123 6.99725702]
print(a_id)
# [ 0.99629643 1.4082849 6.6794731 7.64434123 6.99725702]
print(co)
# [ 2.22044605e-16 0.00000000e+00 7.28306304e-14 4.35207426e-14 7.81597009e-14]
Run Code Online (Sandbox Code Playgroud)
注意:该等式适用于相当小的值(即forx的小值),因为快速收敛到其渐近线极限:nx in [-n, n]sigmoid(x)
import tensorflow as tf
def logit(x):
""" Computes the logit function, i.e. the logistic sigmoid inverse. """
return - tf.log(1. / x - 1.)
x = tf.constant([-1000, -100, -10, -1, 0, 1, 10, 100, 1000], dtype=tf.float64)
# sigmoid(x):
x_sig = tf.sigmoid(x)
# logit(sigmoid(x)) = x:
x_id = logit(x_sig)
with tf.Session() as sess:
a, a_id = sess.run([x, x_id])
print(a)
# [-1000. -100. -10. -1. 0. 1. 10. 100. 1000.]
print(a_id)
# [ -inf -100. -10. -1. 0. 1. 10. inf inf ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4138 次 |
| 最近记录: |