Python Tensorflow无法评估梯度

Python Tensorflow无法评估梯度,python,python-3.x,tensorflow,Python,Python 3.x,Tensorflow,当尝试将tensorflow的boolean_mask函数与梯度优化器(带有Anaconda 3.5的Windows x64上的tensorflow版本0.12.1)一起使用时,我遇到了一个问题 将tensorflow导入为tf 将numpy作为np导入 #测试数据 x_dat=np.arange(1,13)。重塑(4,3)。A型(np.32) y_dat=np.arange(1,9)。重塑(4,2)。aType(np.float32) 将_x_映射到_y=np.array([[True,Fal

当尝试将tensorflow的
boolean_mask
函数与梯度优化器(带有Anaconda 3.5的Windows x64上的tensorflow版本0.12.1)一起使用时,我遇到了一个问题

将tensorflow导入为tf
将numpy作为np导入
#测试数据
x_dat=np.arange(1,13)。重塑(4,3)。A型(np.32)
y_dat=np.arange(1,9)。重塑(4,2)。aType(np.float32)
将_x_映射到_y=np.array([[True,False],[False,False],[True,True]]))
#测试数据
x=tf.placeholder(tf.float32,[None,3])
y=tf.placeholder(tf.float32,[None,2])
#Model:使用x的行获取x元素的列乘积
#将_x_映射到_y作为过滤器。
#map_x_on_y的两列给出了y的两列
转置
fn=lambda t:tf.reduce\u prod(tf.boolean\u掩码(x,t的转置),轴=0)
y=tf.stack([fn(i)表示tf.unstack中的i(映射x在y上,轴=1)])
#训练模型
误差平方和=tf.reduce\u平均值(tf.square(y_u-y))
训练步长=tf.训练梯度降阶优化(0.1).最小化(误差平方和)
init=tf.global_variables_initializer()
使用tf.Session()作为sess:
sess.run(初始化)
feed_dict={x:x_dat,y_:y_dat}
对于范围(10)内的i:
分段运行([训练步骤],进刀指令)
我收到以下错误消息:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-108-cc039c0c3ed9> in <module>()
    21 # Train the model
    22 sum_of_squared_errors = tf.reduce_mean(tf.square(y_-y))
    ---> 23 train_step =                 tf.train.GradientDescentOptimizer(0.1).minimize(sum_of_squared_errors)
    24 init = tf.global_variables_initializer()
    25 

C:\Anaconda3\lib\site-packages\tensorflow\python\training\optimizer.py in minimize(self, loss, global_step, var_list, gate_gradients, aggregation_method, colocate_gradients_with_ops, name, grad_loss)
    274           "No gradients provided for any variable, check your graph for ops"
    275           " that do not support gradients, between variables %s and loss %s." %
    --> 276           ([str(v) for _, v in grads_and_vars], loss))
    277 
    278     return self.apply_gradients(grads_and_vars, global_step=global_step,

    ValueError: No gradients provided for any variable, check your graph for        ops that do not support gradients, between variables ['Tensor("Variable/read:0", shape=(3, 10), dtype=bool)', 'Tensor("Variable_1/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_2/read:0", shape=(3, 10), dtype=bool)', 'Tensor("Variable_3/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_4/read:0", shape=(3, 10), dtype=float64)', 'Tensor("Variable_5/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_6/read:0", shape=(3, 5), dtype=float64)', 'Tensor("Variable_7/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_8/read:0", shape=(3, 5), dtype=float64)', 'Tensor("Variable_9/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_10/read:0", shape=(3, 5), dtype=float64)', 'Tensor("Variable_11/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_12/read:0", shape=(3, 5), dtype=float64)', 'Tensor("Variable_13/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_14/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_15/read:0", shape=(5, 3), dtype=int32)', 'Tensor("Variable_16/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_17/read:0", shape=(5, 3), dtype=int32)', 'Tensor("Variable_18/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_19/read:0", shape=(5, 3), dtype=float32)', 'Tensor("Variable_20/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_21/read:0", shape=(3, 5), dtype=float32)', 'Tensor("Variable_22/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_23/read:0", shape=(3, 5), dtype=float32)', 'Tensor("Variable_24/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_25/read:0", shape=(3, 5), dtype=float32)', 'Tensor("Variable_26/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_27/read:0", shape=(3, 5), dtype=float32)', 'Tensor("Variable_28/read:0", shape=(3, 2), dtype=float32)', 'Tensor("Variable_29/read:0", shape=(3, 5), dtype=float32)', 'Tensor("Variable_30/read:0", shape=(3, 2), dtype=float32)', 'Tensor("Variable_31/read:0", shape=(3, 5), dtype=float32)', 'Tensor("Variable_32/read:0", shape=(3, 2), dtype=float32)', 'Tensor("Variable_33/read:0", shape=(3, 5), dtype=float32)', 'Tensor("Variable_34/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_35/read:0", shape=(5, 3), dtype=float32)', 'Tensor("Variable_36/read:0", shape=(3, 2), dtype=bool)', 'Tensor("Variable_37/read:0", shape=(5, 3), dtype=float32)', 'Tensor("Variable_38/read:0", shape=(3, 2), dtype=bool)'] and loss Tensor("Mean_1:0", shape=(), dtype=float32).
产生正确的输出:

[[  1.   2.   3.]
 [  4.   5.   6.]
 [  7.   8.   9.]
 [ 10.  11.  12.]]
[[ True False]
 [False False]
 [ True  True]]
[[   3.   24.   63.  120.]
 [   3.    6.    9.   12.]]
[[ 0.50838345  0.80531198  0.87862223  0.91182482]
 [ 0.66666669  0.83333331  0.8888889   0.91666669]
 [ 0.76236677  0.86516243  0.90587789  0.92770731]]
[[ 0.38757464  0.76236677]
 [ 0.69672567  0.86516243]
 [ 0.79592443  0.90587789]
 [ 0.84590656  0.92770731]]
作为tensorflow的初学者,我非常感谢您的帮助,定义操作的梯度求值出了什么问题


我设法解决了这个问题。我忘记在示例中添加要优化的参数

将tensorflow导入为tf
将numpy作为np导入
#测试数据
x_dat=np.arange(1,13)。重塑(4,3)。A型(np.32)
y_dat=np.arange(1,9)。重塑(4,2)。aType(np.float32)
#测试数据
x=tf.placeholder(tf.float32,[None,3])
y=tf.placeholder(tf.float32,[None,2])
参数=tf.Variable(tf.ones([3,1],dtype=tf.float32))
#模型:使用map_x_on_y的行作为过滤器,获取x元素的列乘积。
#用于在y上投影x的贴图
将_x_映射到_y=tf.Variable(np.array([[True,False],[False,False],[True,True]]))
intermediate=tf.map_fn(lambda t:tf.div(t[0],tf.add(t[1],t[0])),
(tf.transpose(x),参数),dtype=tf.float32)
fn=lambda t:tf.reduce\u prod(tf.boolean\u mask(中间,t),轴=0)
y=tf.transpose(tf.stack([fn(i)表示tf.unstack中的i(映射y上的x,轴=1)])
#训练模型
误差平方和=tf.减少平均值(tf.平方(y-y))
训练步长=tf.训练梯度降阶优化(0.1).最小化(误差平方和)
init=tf.global_variables_initializer()
使用tf.Session()作为sess:
sess.run(初始化)
feed_dict={x:x_dat,y_:y_dat}
对于范围(1)中的i:
分段运行([训练步骤],进刀指令)
打印(sess.run(中间、进纸)
打印(sess.run(y,feed_dict))
这产生了正确的输出:

[[  1.   2.   3.]
 [  4.   5.   6.]
 [  7.   8.   9.]
 [ 10.  11.  12.]]
[[ True False]
 [False False]
 [ True  True]]
[[   3.   24.   63.  120.]
 [   3.    6.    9.   12.]]
[[ 0.50838345  0.80531198  0.87862223  0.91182482]
 [ 0.66666669  0.83333331  0.8888889   0.91666669]
 [ 0.76236677  0.86516243  0.90587789  0.92770731]]
[[ 0.38757464  0.76236677]
 [ 0.69672567  0.86516243]
 [ 0.79592443  0.90587789]
 [ 0.84590656  0.92770731]]
尽管如此,我仍然得到以下警告:

C:\Anaconda3\lib\site-packages\tensorflow\python\ops\gradients_impl.py:91: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.
  "Converting sparse IndexedSlices to a dense Tensor of unknown shape. "

这是担忧的警告吗?

我设法解决了这个问题。我忘记在示例中添加要优化的参数

将tensorflow导入为tf
将numpy作为np导入
#测试数据
x_dat=np.arange(1,13)。重塑(4,3)。A型(np.32)
y_dat=np.arange(1,9)。重塑(4,2)。aType(np.float32)
#测试数据
x=tf.placeholder(tf.float32,[None,3])
y=tf.placeholder(tf.float32,[None,2])
参数=tf.Variable(tf.ones([3,1],dtype=tf.float32))
#模型:使用map_x_on_y的行作为过滤器,获取x元素的列乘积。
#用于在y上投影x的贴图
将_x_映射到_y=tf.Variable(np.array([[True,False],[False,False],[True,True]]))
intermediate=tf.map_fn(lambda t:tf.div(t[0],tf.add(t[1],t[0])),
(tf.transpose(x),参数),dtype=tf.float32)
fn=lambda t:tf.reduce\u prod(tf.boolean\u mask(中间,t),轴=0)
y=tf.transpose(tf.stack([fn(i)表示tf.unstack中的i(映射y上的x,轴=1)])
#训练模型
误差平方和=tf.减少平均值(tf.平方(y-y))
训练步长=tf.训练梯度降阶优化(0.1).最小化(误差平方和)
init=tf.global_variables_initializer()
使用tf.Session()作为sess:
sess.run(初始化)
feed_dict={x:x_dat,y_:y_dat}
对于范围(1)中的i:
分段运行([训练步骤],进刀指令)
打印(sess.run(中间、进纸)
打印(sess.run(y,feed_dict))
这产生了正确的输出:

[[  1.   2.   3.]
 [  4.   5.   6.]
 [  7.   8.   9.]
 [ 10.  11.  12.]]
[[ True False]
 [False False]
 [ True  True]]
[[   3.   24.   63.  120.]
 [   3.    6.    9.   12.]]
[[ 0.50838345  0.80531198  0.87862223  0.91182482]
 [ 0.66666669  0.83333331  0.8888889   0.91666669]
 [ 0.76236677  0.86516243  0.90587789  0.92770731]]
[[ 0.38757464  0.76236677]
 [ 0.69672567  0.86516243]
 [ 0.79592443  0.90587789]
 [ 0.84590656  0.92770731]]
尽管如此,我仍然得到以下警告:

C:\Anaconda3\lib\site-packages\tensorflow\python\ops\gradients_impl.py:91: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.
  "Converting sparse IndexedSlices to a dense Tensor of unknown shape. "
这是值得关注的警告吗