keras Tensorflow中www.example.com出现InvalidArgumentErrormodel.fit

r6vfmomb  于 2023-04-21  发布在  其他
关注(0)|答案(3)|浏览(155)

使用CNN进行图像分类。当调用model.fit()时,它开始训练模型一段时间,并在执行过程中中断并返回错误消息。

错误信息如下

InvalidArgumentError: 2 root error(s) found.
  (0) Invalid argument:  Input size should match (header_size + row_size * abs_height) but they differ by 2
     [[{{node decode_image/DecodeImage}}]]
     [[IteratorGetNext]]
     [[IteratorGetNext/_4]]
  (1) Invalid argument:  Input size should match (header_size + row_size * abs_height) but they differ by 2
     [[{{node decode_image/DecodeImage}}]]
     [[IteratorGetNext]]
0 successful operations.
0 derived errors ignored. [Op:__inference_train_function_8873]

Function call stack:
train_function -> train_function

**更新:**我的建议是检查数据集的元数据,这有助于修复我的问题。

fdbelqdn

fdbelqdn1#

当我尝试 * 从另一台相机 * 添加新照片到我的训练数据集时,我偶然发现了这个错误。
在阅读了评论和对“元数据”的大惊小怪之后,我想到了实际检查数据集中每一张照片的元数据。
在我的例子中,我必须确保我的照片的元数据是一致的,没有额外或更少的字段
通常情况下,我在训练之前BulkResize(在线工具)我的图像,似乎我忘记了调整新图像的大小。这个在线工具似乎覆盖了图像的元数据,从而使每个调整大小的照片的元数据统一。
在确保所有照片的元数据一致后,错误消失了。
PS:这只是在我的情况下.但这是一个标志,你可以开始与你的元数据.我只是有以下:

  • 尺寸
  • 颜色配置文件
  • 色彩空间

希望你们都能找到这个。训练愉快!

dpiehjr4

dpiehjr42#

你不必指定参数label_mode。为了使用SparseCategoricalCrossentropy作为损失函数,你需要将其设置为int。如果你不指定它,那么它将按照文档设置为None
您还需要根据从中读取图像的目录的结构将参数labels指定为inferred

train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  labels="inferred",
  label_mode="int",
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)
  
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  labels="inferred",
  label_mode="int",
  validation_split=0.2,
  subset="validation",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)
l0oc07j2

l0oc07j23#

我刚刚在另一个帖子中回答了一个非常相似的问题。事实上,潜在的问题可能是完全相同的。它包含了一个详细的解释,至少在我的情况下是怎么回事。长话短说,我被证明是正确的一个可能的原因是损坏的JPEG文件

相关问题