【问题标题】:Tensorflow 2.6.0: How do I Map One Element into Multiple ElementsTensorflow 2.6.0:如何将一个元素映射到多个元素
【发布时间】:2022-01-03 20:08:14
【问题描述】:

我正在尝试制作一个用于分类医学图像的 CNN。这些图像很大(~50k x ~30k)。作为我管道的一部分,我想将图像分成 256 x 256 的补丁。 我想使用Dataset.map 运算符来执行此操作,因此我可以稍后缓存数据以便于训练。

我发现 this thread 解决了 tensorflow 1 中的问题,但我无法将其转换为 tensorflow 2。

对于提出这个问题,我深表歉意,但我能否获得一些帮助来转换代码,以便让它在 tensorflow 2 中工作?我是一个新手,所以非常感谢您的帮助

【问题讨论】:

    标签: python tensorflow tensorflow-datasets


    【解决方案1】:

    tf.data.Dataset.maptf.data.Dataset.unbatch和官方中随意使用tf.stack documentation

    import tensorflow as tf
    
    some_image_dataset = tf.random.normal(shape=[10, 1024, 768]) 
    dataset = tf.data.Dataset.from_tensor_slices(some_image_dataset)
    
    def some_patches_map_func(image):
        return tf.stack([
            image[10 : 10 + 256, 20 : 20 + 256], 
            image[100 : 100 + 256, 100 : 100 + 256], 
            image[500 : 500 + 256, 200 : 200 + 256],
        ]) 
    
    dataset = dataset.map(some_patches_map_func)
    dataset = dataset.unbatch().shuffle(10)
    dataset = dataset.batch(2) 
        
    iterator = iter(dataset)
            
    print(next(iterator).shape) # (2, 256, 256)
    print(next(iterator).shape) # (2, 256, 256)
    print(next(iterator).shape) # (2, 256, 256)
    

    【讨论】:

    • 感谢您的帮助!如果我正确理解您的方法,您的函数some_patches_map_func 可以是任何东西,只要它以tf.stack(PATCH_LIST) 结尾,它应该可以工作吗?而在你的例子中,你随意打了一些补丁?
    • 是的,您理解正确。 some_patches_map_func 必须返回一个形状为 (num_patches, patch_height, patch_width) 的张量。 tf.stack 函数适用于静态补丁数量。对于动态数量的补丁,需要更高级的方法。
    猜你喜欢
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多