繁体   English   中英

在评估tf.gradients的结果时,Tensorflow卡住了

[英]Tensorflow stuck when evaluating the result of tf.gradients

我正在尝试使用我的网络评估输出的渐变。 在前进道具期间,网络运行得非常好,所以没有问题。 渐变的代码如下所示:

images, labels = inputs(train_dir,
                        True,
                        batch_size,
                        num_batches,
                        one_hot_labels=True)
predictions = InterpolNet(images)
restorer = tf.train.Saver()
with tf.Session() as sess:
    restorer.restore(sess, checkpoint_dir)
    print 'Get grads'
    grad_output = np.zeros((1,h,w,3), dtype=np.float32)
    grad_output[0,0,0,0] = 1
    grad = tf.gradients(predictions, images, grad_output)
    print grad[0]
    res = grad[0].eval()

所以基本上我用inputs函数声明我的网络的inputs ,我通过调用InterpolNet获得我的模型,并使用最新的训练权重恢复检查点。 如果我现在做一个sess.run(predictions, feed_dict=feed_dict) ,在feed_dict中我放了一些输入,一切都很好,运行的输出是网络的预期输出。

当我尝试获取渐变时(使用上面的代码),程序显然卡在res = grad[0].eval()行(0%GPU使用率和没有明显的CPU使用率)上。 print grad[0]打印看起来像正确的张量:

Tensor("gradients/conv1/conv1_1/Conv2D_grad/Conv2DBackpropInput:0", shape=(1, 128, 384, 6), dtype=float32)

但代码没有到达下一行。 难道我做错了什么? 使用grad_output似乎不会影响该问题。 作为参考,我试图从https://arxiv.org/pdf/1603.06041v2.pdf重新实现该论文。

谢谢!

从Yaroslav评论结果来看,我被困在inputs函数内的数据生成队列中。

我所做的是将变量images从队列的输出更改为占位符: images = tf.placeholder(tf.float32, shape=(1, h, w, 6))

这让我计算符号梯度与tf.gradients ,然后使用feed_dictgrad[0].eval()与包含数据,而不是使用该队列(它是一个I一个numpy的阵列喂净用于训练)。

现在一切正常!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM