【问题标题】:Feeding time data to tf.estimator: `input_fn` must be callable向 tf.estimator 提供时间数据:`input_fn` 必须是可调用的
【发布时间】:2020-06-11 17:43:27
【问题描述】:

目标

我想 mod this tutorial 使用 this time series dataset 而不是普通的图像数据。

方法

我已经确定了几种将数据导入tf.estimator API 的方法。 最方便的(因为使用.from_generator 是猜测......)是使用tf.data.Dataset.from_tensor_slices(training_data_ndarray) 如下:

trnX, trnY, tstX, tstY = load_dataset()
trnXl = trnX.tolist()
tstXl = tstX.tolist()
tstYl = tstY.tolist()
trnYl = trnY.tolist()
trndataset = tf.data.Dataset.from_tensor_slices((trnXl, trnYl))
tstdataset = tf.data.Dataset.from_tensor_slices((tstXl, tstYl))
...
def _input_fn(partition):
    if partition == "train":
        dst = trndataset
    elif partition == "predict":
        dst = tstdataset
    else:
        dst = tstdataset

    return dst

错误/问题

TypeError: input_fn 必须是可调用的,给定:DatasetV1Adapter 形状:((128, 9), (6,)),类型:(tf.float32, tf.float32)>

复制

我使用纸空间实例。如果您有帐户,可以查看here

  1. 如果没有,请获取full code in this gist:
  2. 来自2的数据集。

设置:

  • 张量流 1.15
  • Python 3.6.8
  • 急切执行:关闭(adanet 库不会处理它)。

调用时出现错误:

tf.estimator.train_and_evaluate(
estimator,
train_spec=tf.estimator.TrainSpec(
    input_fn=_input_fn("train"),
    max_steps=TRAIN_STEPS),
eval_spec=tf.estimator.EvalSpec(
    input_fn=_input_fn("test"),
    steps=None,
    start_delay_secs=1,
    throttle_secs=1,  
))

现在怎么办?

我认为使用创建 tf.data.Dataset 的方法没有前进的道路,因为输入函数(“创建返回数据集的输入函数”)似乎不正确。

【问题讨论】:

    标签: python tensorflow tensorflow-datasets tensorflow-estimator automl


    【解决方案1】:

    这可能对将来的某人有所帮助,但并不能解决我更深层次的问题。

    为了使 input_fn 可调用但仍接受参数,有两种选择:将函数调用包装在 lambda 运算符中或将实际 input_fn 包装在另一个返回内部函数的 input_fn 中。

    classifier.train(
    input_fn=lambda: input_fn(train, train_y, training=True),
    steps=5000)
    

    请注意,您将 input_fn 调用包装在 lambda 中以捕获参数,同时提供不带参数的输入函数,正如 Estimator 所期望的那样

    来源:https://www.tensorflow.org/tutorials/estimator/premade

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-18
      • 2020-07-08
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多