TensorFlow

时间:2015-12-17 15:34:01

标签: tensorflow

是否有规范的方法可以重用TensorFlow中先前提供的占位符的计算?我的具体用例:

  • 同时提供许多输入(使用一个占位符),所有输入都通过网络提供以获得更小的表示
  • 基于这些较小表示的各种组合来定义损失
  • 一次训练一个批次,其中每个批次使用输入的一些子集,而不重新计算较小的表示

以下是代码中的目标,但由于一次又一次地执行相同的计算,因此存在缺陷:

X_in = some_fixed_data
combinations_in = large_set_of_combination_indices
for combination_batch_in in batches(combinations_in, batch_size=128):
    session.run(train_op, feed_dict={X: X_in, combinations: combination_batch_in})

感谢。

2 个答案:

答案 0 :(得分:6)

在sess.Run()调用之间共享计算值的规范方法是使用Variable。在这种情况下,您可以设置图形,以便在添加占位符时,它们会计算保存到变量中的表示的新值。图的单独部分读取那些变量以计算损失。如果您需要通过计算表示的图形部分计算渐变,则此方法无效。计算这些梯度将需要重新计算编码器中的每个Op。

答案 1 :(得分:1)

这是应该通过CSE(公共子表达式消除)自动解决的问题。不确定TensorFlow目前的支持是什么,可能有点不稳定,但是Graph选项的optimizer_do_cse标志默认为false,你可以使用GraphConstructorOptions将其设置为true。这是C++ example使用GraphConstructorOptions(对不起,找不到Python)

如果这不起作用,你可以做手动CSE",即弄清楚哪个部分被不必要地重新计算,将其分解为单独的Tensor,并参考所有的张量计算