2016-12-29 64 views
0

操作MaxPoolWithArgmax定义我想用在TensorFlow max_pool_with_argmax操作,但我得到了下面的错误没有梯度:在tensorflow

LookupError: No gradient defined for operation 'MaxPoolWithArgmax_1' (op type: MaxPoolWithArgmax)

以下是一段我的代码,我使用max_pool_with_argmax

BN_relu13 = tf.nn.relu(tf.nn.batch_normalization(h_conv13,batch_mean13,batch_var13,tf.Variable(tf.zeros([64])),tf.Variable(tf.ones([64])),epsilon)) 
#max pooling 
h_pool1, argmax_1 = max_pool_2x2(BN_relu13) 

这里是max_pool_2x2模块:

def max_pool_2x2(x): 
    return tf.nn.max_pool_with_argmax(x, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME') 

和我建立我的网络后,我正在使用AdamOptimizer来训练我的网络。

顺便说一句,当我使用tf.nn.max_pool(而不是tf.nn.max_pool_with_argmax)一切工作正常。

我在GPU上运行我的代码,我在ubuntu14上使用python 2.7。

谢谢,阿里

+0

并非每个TF函数都具有已定义的梯度。有一个用于花式numpy风格索引的地方,没有渐变。你可能只需要使用别的东西。 –

+0

我以为因为这个函数已经在神经网络库中定义了,所以它必须有一个渐变。你有什么建议我怎么才能计算TF中最大汇集指数?或任何其他功能? –

+0

是否有任何简单的方法来检查给定的tf op是否定义了梯度? –

回答

0

梯度运算实际上是实现here,但不知何故没有注册here。值得提出一个github问题。

与此同时,您可以按照此tutorial(仅限梯度注册部分)自行注册该操作。

+0

谢谢姚明。我会尝试。 –