首页 > 解决方案 > 如何在tensorflow的Estimator的input_fn中读取和处理我的图像文件?

问题描述

我是使用 TF 的新手。.ppm由于某些原因,我必须使用TF1.10 ,但我发现tf.image.decode_image.

我的网络的最终目标是读取 RGBD 输入,并使用它来生成更多特征(通过手工制作方法,例如采样法线),最后使用这些额外特征和基本事实计算损失。

由于我的数据集很大,我曾经在我tf.data.TextLineDataset的 中获取文件路径列表的数据集input_fn,并尝试使用它Dataset.map来生成特征。当我尝试解码.ppm文件时,我发现了这个问题。(代码如下所示。)

或者,有没有其他方法可以避免在读取图像之前将路径转移strings到,然后我可以使用?但是如果我这样做,我想我必须使用 all来构建我的数据集和迭代器,这可能会花费大量内存。(也许我错了。)Tensorinput_fncv2.imreadTensors

或者,如果您认为我完全误解了 and 的用法datasetEstimator请告诉我正确的方法。谢谢你。

def input_fn(self, dataset, mode="train"):
    self.dict_dataset_lists = {}
    ds_rgb = os.path.expandvars(dataset["rgb"])
    ds_d = os.path.expandvars(dataset["d"])
    ds_gt = os.path.expandvars(dataset["gt"])

    self.dict_dataset_lists["rgb"] = tf.data.TextLineDataset(ds_rgb)
    self.dict_dataset_lists["d"] = tf.data.TextLineDataset(ds_d)
    self.dict_dataset_lists["gt"] = tf.data.TextLineDataset(ds_gt)

    with tf.name_scope("Dataset_API"):
        tf_dataset = tf.data.Dataset.zip(self.dict_dataset_lists)

        # load path to imgs(tensor)
        if mode == "train":
            tf_dataset = tf_dataset.repeat(self.parameters.max_epochs)
            if self.parameters.shuffle:
                tf_dataset = tf_dataset.shuffle(
                        buffer_size=self.parameters.steps_per_epoch * self.parameters.batch_size)
            tf_dataset = tf_dataset.map(load_img, num_parallel_calls=1) 
            tf_dataset = tf_dataset.batch(self.parameters.batch_size)
            tf_dataset = tf_dataset.prefetch(buffer_size=self.parameters.prefetch_buffer_size)

    # make iterator
    iterator = tf_dataset.make_one_shot_iterator()

    dict_tf_input = iterator.get_next()

标签: pythontensorflowdeep-learningtensorflow-datasetstensorflow-estimator

解决方案


推荐阅读