[英]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_dict
在grad[0].eval()
与包含数据,而不是使用该队列(它是一个I一个numpy的阵列喂净用于训练)。
现在一切正常!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.