【问题标题】:How to get a gradient of a placeholder with default in TensorFlow?如何在TensorFlow中获得默认占位符的渐变?
【发布时间】:2017-01-12 21:00:37
【问题描述】:

我正在使用自动编码器。我的张量流图看起来像这样:(输入图像)--conv2d-->(压缩表示)--deconv2d-->(重构图像)。

我将压缩表示张量更改为 placeholder_with_default,以便我可以插入任何我想要的值并查看重构的内容。当 compressed representation 没有被输入时应该使用的默认值是 conv2d 的结果。

但是,优化器抱怨:

LookupError: gradient registry has no entry for: PlaceholderWithDefault

如何让图表知道在优化阶段只使用通常的梯度?当 压缩表示 不是占位符时,一切正常。

【问题讨论】:

  • 如果你用占位符替换了部分网络,你为什么要使用优化器?我会假设你的网络已经训练过了。
  • 我准备图表时认为它必须能够同时用于表示的优化和探索。训练后如何更改图的结构?我可以轻松地在占位符和计算部分之间切换回来,以便在训练和探索之间切换吗?
  • 您可能需要考虑分别保存您的编码器、表示和解码器。或者您可以尝试构建一个单独的解码器网络并使用get_variable() 函数来重用您训练的变量。
  • 您可以在创建图表后使用tensorflow.contrib.graph_editor更改其结构
  • 另外,您可以使用gradient_override_map为占位符定义渐变

标签: python tensorflow autoencoder


【解决方案1】:

您实际上不需要使用占位符来输入数据 - 任何张量都可以成为 session.run() 中 feed_dict 参数的目标。因此,您应该将压缩表示保留为张量,并在您想在 feed_dict 参数中提供自己的数据时将其分配给您想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2021-07-17
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 2020-09-07
    • 2016-02-18
    相关资源
    最近更新 更多