无法从tf.data.Dataset.from_generator读取数据

时间:2018-08-21 07:17:03

标签: python tensorflow deep-learning

我希望使用tf.data.Dataset.from_generator来帮助我生成输入数据流。

    @RunWith(SpringRunner.class)
    @RestClientTest(PostClient.class)
    public class PostClientMockTest {

        // class under test
        @Autowired
        private PostClient postClient;

        // autowired mock server from the spring context
        @Autowired
        private MockRestServiceServer mockRestServiceServer;

        @Test
        public void readPosts() throws Exception {

            String mockJsonResponse = "My response";

            mockRestServiceServer.expect(requestTo("https://myurl.com/posts?userId=1"))
                    .andRespond(withSuccess(mockJsonResponse, MediaType.APPLICATION_JSON_UTF8));

            List<Post> posts = postClient.readPosts(1);
            assertEquals(9, posts.size());
            mockRestServiceServer.verify();
        }

    }

sample_generator函数可以生成具有建议形状的三个numpy数组。

上述部分没有问题。 但是,tf.data.Dataset.from_generator只能生成数据流,我需要将生成的数据馈送到网络。

代码如下:

dataset = tf.data.Dataset.from_generator(sample_generator,
                                         output_types=(tf.float32, tf.float32, tf.float32), 
                                         output_shapes=(tf.TensorShape([size_image, size_image, 3]),tf.TensorShape([size_image,size_image,3]), tf.TensorShape([size_gt, size_gt])))

而迭代器是

dataset = dataset.map(transform_fn, num_parallel_calls=self.config['prefetch_threads']) # transform_fn just returns the input

dataset = dataset.prefetch(self.config['prefetch_capacity'])
dataset = dataset.repeat()
dataset = dataset.batch(self.config['batch_size'])

谢谢!

1 个答案:

答案 0 :(得分:0)

问题已解决。 将from_generator更改为生成元数据,例如,即您所需文件的名称/路径。

然后,使用     tf.Py_func 以普通/ numpy方式预处理数据。 我只想说:“ tf.Pyfunc非常方便!” 谢谢!