我的训练数据集中的隐藏文件使 tensorflow 返回“未知的图像文件格式。需要 JPEG、PNG、GIF、BMP 之一。”

Posted

技术标签:

【中文标题】我的训练数据集中的隐藏文件使 tensorflow 返回“未知的图像文件格式。需要 JPEG、PNG、GIF、BMP 之一。”【英文标题】:Hidden file in my training dataset which makes tensorflow return "Unknown image file format. One of JPEG, PNG, GIF, BMP required." 【发布时间】:2021-09-17 04:36:07 【问题描述】:

我有 tensorflow 模型,在第一个 epoch 训练的第一部分,它一直工作到大约中点(735/2201 [=========>.......... ..........]) 然后它返回标题中的错误。

首先我编写了一个脚本来删除该目录中所有不以 .jpg 结尾但没有任何改变的文件。

import os
for file in os.listdir(path):
    if not file.endswith('.jpg'):
        os.remove(os.path.join(path,file))

然后我打开了我的 macs bash 并列出了目录中的所有文件以查看任何隐藏文件,但都只是 jpgs。

编辑:

Nessuno 的回答是正确的,但你必须遍历绝对路径而不仅仅是文件名,这样的东西应该可以工作

import os
import imghdr
#define your path
path = '' 

files = os.listdir(path)


for file in files:
    format = imghdr.what(os.path.join(path, file))
    if format != 'jpeg':
        os.remove(os.path.join(path, file))

我最终删除了 5 个不是 jpeg 的文件

【问题讨论】:

【参考方案1】:

您的path 中有一些文件具有.jpg 扩展名,但它包含不同的文件格式。

您可以使用imghdr 库(Python 本身附带的:https://docs.python.org/3/library/imghdr.html)并检查标头是否等于jpeg,并在这种情况下删除图像。

简而言之,您可以将脚本更改为:

import os
import imghdr

for file in os.listdir(path):
    if imghdr.what(file) != 'jpeg':
        os.remove(os.path.join(path, file))

【讨论】:

以上是关于我的训练数据集中的隐藏文件使 tensorflow 返回“未知的图像文件格式。需要 JPEG、PNG、GIF、BMP 之一。”的主要内容,如果未能解决你的问题,请参考以下文章

如何将多文件(b、t、f)形状的数据流式传输到 TensorFlow 数据集中

训练和测试模型时指标值相等

如何提供分类器以在 Tensorflow 上进行训练

tensorflow用dropout解决over fitting-老鱼学tensorflow

Tensorflow 密集标签形状

训练准确性增加,然后偶尔突然下降。使固定? [Keras] [TensorFlow 后端]