placeholder_with_default与placeholder区别

725次阅读
没有评论

现在的项目里普遍使用Estimator一套,使用tf.data构建数据流。听大佬讲代码提到为什么使用前者不用后者?

首先看下两者的定义:

tf.placeholder_with_default(input, shape, name=None)

<span class="pln">tf</span><span class="pun">.</span><span class="pln">compat</span><span class="pun">.</span><span class="pln">v1</span><span class="pun">.</span><span class="pln">placeholder</span><span class="pun">(</span><span class="pln">
    dtype</span><span class="pun">,</span><span class="pln"> shape</span><span class="pun">=</span><span class="kwd">None</span><span class="pun">,</span><span class="pln"> name</span><span class="pun">=</span><span class="kwd">None</span><span class="pln">
</span><span class="pun">)</span>
二者的区别在于传参。placeholder_with_default 需要传入对应的input,官方文档说output没有被fed时此时获取的是input
的数据。
这句话乍一看还真的不好理解,output是啥?
在这里实际上是 placeholder_with_default 这个函数的返回值,就是定义了一个Tensor 更好听的就是占位符。

给这个Tensor赋值有两种情况:
(1)在模型训练阶段:从数据流可以获取数据喂到这个 Tensor,该值就是与 Input 一致。
(2)在线上推理的时候直接喂到这个 Tensor。
上面的第二点就阐述了官方文档的说明,可以仔细的品一下。

对于 Placeholder 很早以前使用过,那时候的使用还是使用Tf.Session 然后使用feed_dict的方式给Tensor赋值
这个有个问题就是feed_dict要求传入的值都是原始类型,对比 placeholder_with_default 可以传入一个Tensor,
这个很容易与数据流打通,尤其是对Tfrecord数据的读取过程。如果是读取原始数据的确是可以使用Placeholder,但是现在
但是现在应该不太建议了。
admin
版权声明:本站原创文章,由admin2020-12-21发表,共计661字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)