【发布时间】:2016-08-27 16:06:34
【问题描述】:
我正在尝试在 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>),)
我认为这可能与 Tensorflow 无法计算逻辑运算符的梯度有关。我对任何给定 A 值的分类应该是这样的:
给定一个数据点 x 和一个 A 值:
[1,0] : 如果 x
[0,1] : 如果 x >= A
鉴于这个想法,这是我在 Tensorflow 中对输出的计算:
my_output = tf.concat(0,[tf.to_float(tf.less(x_data, A)), tf.to_float(tf.greater_equal(x_data, A))])
这是实现此输出的错误方法吗?是否存在非逻辑功能等价物?
谢谢。如果您想查看我的整个代码,这里有一个要点: https://gist.github.com/nfmcclure/46c323f0a55ae1628808f7a58b5d437f
编辑: 全栈跟踪:
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>),)
【问题讨论】:
-
完整的堆栈跟踪可能会有所帮助
标签: python classification tensorflow logical-operators gradient-descent