Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow中逻辑算子的梯度_Python_Classification_Tensorflow_Logical Operators_Gradient Descent - Fatal编程技术网

Python Tensorflow中逻辑算子的梯度

Python Tensorflow中逻辑算子的梯度,python,classification,tensorflow,logical-operators,gradient-descent,Python,Classification,Tensorflow,Logical Operators,Gradient Descent,我试图在Tensorflow中创建一个非常简单的二进制分类器,用于生成数据 我从两个独立的正态分布生成随机数据。然后,如果结果数据小于或大于一个数字a,我将其分类为一个二进制类 理想情况下,A将是两个法线中间的一个截止点。例如,如果我的数据是由N(1,1)+N(-1,1)生成的,那么A应该大约为0 我遇到了一个“没有为任何变量提供梯度…”的错误。具体而言: No gradients provided for any variable: ((None, <tensorflow.python.

我试图在Tensorflow中创建一个非常简单的二进制分类器,用于生成数据

我从两个独立的正态分布生成随机数据。然后,如果结果数据小于或大于一个数字a,我将其分类为一个二进制类

理想情况下,A将是两个法线中间的一个截止点。例如,如果我的数据是由N(1,1)+N(-1,1)生成的,那么A应该大约为0

我遇到了一个“没有为任何变量提供梯度…”的错误。具体而言:

No gradients provided for any variable: ((None, <tensorflow.python.ops.variables.Variable object at 0x7fd9e3fae710>),)
这是实现此输出的错误方法吗?是否存在非逻辑功能等价物

谢谢。如果您想查看我的全部代码,这里有一个要点:


编辑: 完整堆栈跟踪:

Traceback (most recent call last):

  File "<ipython-input-182-f8837927493d>", line 1, in <module>
    runfile('/.../back_propagation.py', wdir='/')

  File "/usr/local/lib/python3.4/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 699, in runfile
execfile(filename, namespace)

  File "/usr/local/lib/python3.4/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 88, in execfile
exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)

  File "/.../back_propagation.py", line 94, in <module>
train_step = my_opt.minimize(xentropy)

  File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/training/optimizer.py", line 192, in minimize
name=name)

  File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/training/optimizer.py", line 286, in apply_gradients
(grads_and_vars,))

ValueError: No gradients provided for any variable: ((None, <tensorflow.python.ops.variables.Variable object at 0x7fd9e3fae710>),)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
运行文件('/…/back_propagation.py',wdir='/'))
runfile中的文件“/usr/local/lib/python3.4/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py”,第699行
execfile(文件名、命名空间)
execfile中的文件“/usr/local/lib/python3.4/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py”,第88行
exec(编译(打开(文件名'rb').read(),文件名'exec'),命名空间)
文件“/…/back_propagation.py”,第94行,在
训练步骤=我的选择最小化(xentropy)
文件“/usr/local/lib/python3.4/dist packages/tensorflow/python/training/optimizer.py”,第192行
名称=名称)
文件“/usr/local/lib/python3.4/dist packages/tensorflow/python/training/optimizer.py”,第286行,应用梯度
(毕业生和毕业生)
ValueError:没有为任何变量提供渐变:((无,),)

通常,您会使用一个sigmoid函数将函数的输出固定在0到1的范围内。您希望培训以下功能:

y=a*x_输入+b,其中a和b是可训练变量

然后,您将使用的损失函数是tf.sigmoid\u cross\u entropy\u with\u logits


为了评估等级,你需要评估sigmoid(y)>0.5。大于逻辑运算符没有创建优化函数的梯度

您尝试使用的阈值函数在阈值处是不可微的,其他地方的导数都是零。正如szabadaba提到的,您通常会使用一个sigmoidal函数作为二进制分类器的输出。对于多类分类,请使用softmax函数。这些函数可以解释为给你一个类值的概率或置信度(这比得到一个硬值要好)。重要的是,渐变表现良好。但是,您必须注意不要使单元饱和

例如,请参见:

LeCun(1998年)。高效的后支柱

在二元分类w/sigmoidal输出的情况下,他通过选择特定的sigmoid函数、正确映射到该sigmoid的类标签等,提出了一些关于保持非饱和状态的有趣观点


阅读逻辑回归教程可能会有所帮助。这里有一个用于和一个用于。

我认为您不应该使用my\u output计算损耗,因为tf可能无法支持在tf.lesstf.greater操作中计算后向梯度
您可以尝试在x\u数据中计算损失函数

只需更改我的\u输出,如下所示

my_output = tf.concat(0,[tf.to_float(tf.less(tf.div(x_data,A), 1.)), 
tf.to_float(tf.greater_equal(tf.div(x_data, A),1.0)])

完整的堆栈跟踪可能会有所帮助谢谢,我可能会切换到sigmoid或阶跃函数的连续近似。
my_output = tf.concat(0,[tf.to_float(tf.less(tf.div(x_data,A), 1.)), 
tf.to_float(tf.greater_equal(tf.div(x_data, A),1.0)])