估计器的自定义输入函数,而不是tf.data.dataset

时间:2018-11-13 15:24:16

标签: python tensorflow deep-learning tensorflow-estimator

我想知道是否有人为tensorflow的估计器创建了自己的自定义输入函数?就像(link)中的这张图片:enter image description here

建议使用tf.data.dataset。但是我不想使用那个,因为我想编写自己的迭代器,该迭代器可以批量生成数据,也可以对其进行混洗。

    def data_in(train_data):
      data = next(train_data)
      ff = list(data)
      tf.enable_eager_execution()
      imgs = tf.stack([tf.convert_to_tensor(np.reshape(f[0], [img_size[0], img_size[1], img_size[2]])) for f
                                        in ff])
      lbls = tf.stack([f[1] for f in ff])
      print('TRAIN data: %s %s ' % (imgs.get_shape(), lbls.get_shape()))
      return imgs, lbls

输出:TRAIN data: (10, 32, 32, 3) (10,)

其中train_data是一个生成器对象,它使用 iter 和np.reshape(f [0],[img_size [0],img_size 2,img_size {{3 }}]基本上将提取的数据整形为所需的维度,并且它是整个数据集的一部分。我使用堆栈将张量列表转换为堆叠张量,但是当我将其与估计量一起使用时,我得到一个错误模型提供的功能说这些功能没有get_shape()。当我在没有估算器的情况下对其进行测试时,它可以很好地工作,并且get_shape()也可以很好地工作。

1 个答案:

答案 0 :(得分:1)

嘿kvish我知道了怎么做。我只需要添加这些行

experiment = tf.contrib.learn.Experiment(
cifar_classifier,
train_input_fn=lambda: data_in(),
eval_input_fn=lambda: data_in_eval(),
train_steps=train_steps)

我知道实验已被弃用,现在我也将使用estimator来做它:)