创建tensorflow图像数据集&;来自简单python列表的标签

创建tensorflow图像数据集&;来自简单python列表的标签,python,tensorflow,tensorflow-datasets,Python,Tensorflow,Tensorflow Datasets,我一直在尝试使用各种灵感——特别是——创建一个标记的图像数据集,以传递给用户 我的代码似乎与问题中给出的代码相同。。。与问题的OP相比,使用稍微不同的\u parse_function(): def load_image( path, label ): file_contents = tf.io.read_file( path ) image = tf.image.decode_image( file_contents ) image = tf.image.convert_image

我一直在尝试使用各种灵感——特别是——创建一个标记的图像数据集,以传递给用户

我的代码似乎与问题中给出的代码相同。。。与问题的OP相比,使用稍微不同的
\u parse_function()

def load_image( path, label ):
  file_contents = tf.io.read_file( path )
  image = tf.image.decode_image( file_contents )
  image = tf.image.convert_image_dtype( image, tf.float32 )
  return image, label
我可以在python命令行中独立测试此函数,例如,使用
image,label=load\u image(“tiger.jpg”,“tiger”)
,最后得到一个
“tiger”
标签和一个与图像左上角像素正确对应的
图像[0][0]

>>> image[0][0]
<tf.Tensor: shape=(3,), dtype=float32, numpy=array([0.37254903, 0.5529412 , 0.854902  ], dtype=float32)>
我是python新手,所以我希望这些只是主题上的等效变体,但无论如何,当我将所有内容传递到程序中的
model.fit()
时,我最终会得到:

 ValueError: Cannot take the length of shape with unknown rank.
任何主题的变化都没有超出这一点。我已从数据集中删除了所有管道操作(例如,no
.shuffle()
、no
.repeat()
、no
.batch()
),因此我只使用
.map()
函数,并得到相同的错误结果。我能看到的唯一错误是在上面的
load\u image()
函数中,或者在调用代码时:

dataset = tf.data.Dataset.from_tensor_slices( ( images, labels ) )   # tf.constant() does not change error
dataset = dataset.map( load_map )
model.fit( dataset, epochs=100 )

导致错误的原因是什么?

已知的
解码\u图像
有一个问题-它没有正确设置形状信息(请参阅。您可以使用更具体的调用-例如
解码\u jpeg
解码\u png

此外……您将遇到的下一个问题是,您无法直接使用“Tiger”这样的标签。如果“Tiger”位于[“Lion”、“Tiger”、“Zebra”、“Ape”…]等类别的列表中,则您需要在这样的列表中使用“Tiger”的索引(即
1
)或一个热门表示(即
[假、真、假、假、…])

请查看此信息

您可以首先使用结束列中的标签和像素作为功能构建csv文件。然后按照如下方式进行操作:

titanic_csv_ds = tf.data.experimental.make_csv_dataset(
    titanic_file_path,
    batch_size=5, # Artificially small to make examples easier to show.
    label_name='survived',
    num_epochs=1,
    ignore_errors=True,)

您是否尝试过使用Keras的
图像生成器
目录中的
flow\u
函数?它在一个小函数中做了很多事情,非常适合新手。如果您有错误,请更新您的问题……您可以尝试在图像张量上设置
形状
吗?也就是说,在
加载图像
函数中,执行
imag吗e、 设置形状(图像形状)
(在返回之前执行此操作,函数本身已就位!!)。问题可能是TF不“知道”加载图像时图像会是什么样子,因此您必须明确地告诉它。似乎大多数问题都在于
load\u image
-请参阅@neelg我的图像列表是从多个带标签的文件夹中组合而成的。我想了解从简单python列表到model.fit()的程序流程通过TF2.0+中的dataset。它真的不应该如此晦涩难懂!@omatai正如我之前指出的那样,
图像生成器
函数非常适合您。但要使用它,您必须坚持特定的文件夹结构。您可以在名为
cars
的文件夹中弹出汽车图像,该函数将确定所有这些图片都是真实的汽车和饲料他们在正确的方式。因此,它是非常容易使用多个文件夹…虽然这个链接可以回答问题,但最好包括在这里的答案的基本部分,并提供参考链接。链接的答案可能会变得无效,如果链接页面的变化-
titanic_csv_ds = tf.data.experimental.make_csv_dataset(
    titanic_file_path,
    batch_size=5, # Artificially small to make examples easier to show.
    label_name='survived',
    num_epochs=1,
    ignore_errors=True,)