【问题标题】:TypeError: <lambda>() takes 1 positional argument but 2 were givenTypeError: <lambda>() 接受 1 个位置参数,但给出了 2 个
【发布时间】:2020-12-29 21:33:15
【问题描述】:

这是我的代码:

img_gen = tf.keras.preprocessing.image.ImageDataGenerator()
gen = img_gen.flow_from_directory('/train/',(224, 224),'rgb', batch_size = 2)
training_set = tf.data.Dataset.from_generator(lambda : gen, output_types=(tf.float32, tf.float32), output_shapes = ([2,224,224,3],[2,2]))

def read_images(features):
    return features['image']

training_set = training_set.map(lambda x: read_images(x), num_parallel_calls=tf.data.experimental.AUTOTUNE)

错误是:

    TypeError: <lambda>() takes 1 positional argument but 2 were given 

那么我该如何解决函数 read_images 中的问题。

【问题讨论】:

    标签: tensorflow2.0 tensorflow2.x


    【解决方案1】:

    flow_from_directory 的文档 -

    退货
    一个 DirectoryIterator 产生 (x, y) 的元组,其中 x 是 numpy 数组,包含一批形状为 (batch_size, *target_size, channels) 和 y 是对应标签的 numpy 数组。

    你可以看到它返回一个包含 2 个元素的元组,所以你的 map 函数需要处理它。

    def read_images(features):
        # some processing
        output = features
        return output
    
    training_set = training_set.map(lambda image, label: read_images(image), num_parallel_calls=tf.data.experimental.AUTOTUNE)
    

    ImageDataGenerator 本身有很多可用的处理选项。 你也可以在 tensorflow 页面查看其他教程 - load images

    查看数据集内容也有助于调试问题

    for line in training_set.take(1):
        print(len(line))
        print(line)
    

    【讨论】:

      猜你喜欢
      • 2017-01-12
      • 2017-04-22
      • 2019-07-07
      • 2021-09-13
      • 2020-05-05
      • 2021-07-19
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多