共计 661 个字符,预计需要花费 2 分钟才能阅读完成。
现在的项目里普遍使用Estimator一套,使用tf.data构建数据流。听大佬讲代码提到为什么使用前者不用后者?
首先看下两者的定义:
tf.placeholder_with_default(input, shape, name=None)
tf.compat.v1.placeholder(
dtype, shape=None, name=None
)
二者的区别在于传参。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,但是现在
但是现在应该不太建议了。
正文完
请博主喝杯咖啡吧!