我正在运行教程中的以下代码:https://keras.io/examples/vision/image_classification_from_scratch/
使用自定义数据集,如教程中所示分为2个数据集。然而,我得到了以下错误:
TypeError: Input 'filename' of 'ReadFile' Op has type float32 that does not match expected type of string.
我选了这个角色。我试了这个:
is_jfif = str(tf.compat.as_bytes("JFIF")) in fobj.peek(10)
但是就我一整天都在想怎么解决这个错误来说,什么都没有改变,没有任何成功。有人能帮我吗?谢谢...
7条答案
按热度按时间s8vozzvw1#
我发现最简单的方法是创建一个子文件夹,并将文件复制到该子文件夹。即,假设您的文件是0.jpg,1.jpg,2.jpg ...2000.jpg,并在名为“patterns”的目录中。
似乎Keras API不接受它,因为文件是用数字命名的,对于Keras,它是在float32中。
要解决这个问题,您可以按照建议重命名文件,或者您可以简单地在“patterns”下创建一个子文件夹(即“patterndir”)。
Keras(内部)可能使用子目录名称,并可能将其附加在图像文件前面,从而使其成为字符串(sth like patterndir_01.jpg,patterndir_02.jpg)[注意,这是我的解释,并不意味着它是真的]
当您这次编译它时,您将看到它工作了,并且您将得到如下编译器消息:
我的代码如下所示
0md85ypi2#
在我的例子中,我只是在训练目录中没有足够的样本。每个类别都有一个,我得到了错误。
pdtvr36n3#
只需创建一个子目录并将文件移到那里。
如果文件在这里:
请将它们放在此处:
然后执行以下操作:
b1payxdu4#
文件名采用float32格式。
重命名数据集中的所有图像可解决此问题。
使用
os.rename()
循环所有文件。5vf7fwbs5#
我刚刚用
tensorflow==2.4.4
也遇到了这个TypeError: Input 'filename' of 'ReadFile' Op has type float32 that does not match expected type of string.
错误。我用
validation_split
进行了试验:validation_split=0.001
validation_split=0.2
结论:该错误的已知根本原因是确认集中没有图像。
修复失败
根据this answer,我通过
os.rename
将文件重命名为1.jpg
、2.jpg
、3.jpg
......不起作用:/根据this answer,谈论一个图像/类别是错误的,一个类别中只有一个图像是可以的。
14ifxucb6#
其中一个问题与图像下载有关。如果指定的图像文件没有下载,也会显示相同的错误。
bwleehnv7#
出现此异常后,您必须检查以下几项内容:
1.您是否有足够的数据用于培训?
如果您的训练集中只有有限的数据,就会出现这个例外。我猜如果您要分割数据,数据量应该可以被10整除(例如validation_split=0.1)。
1.您的图像格式是否有效?
此方法只允许格式为('. bmp','. gif','. jpeg','. jpg','. png').无效得格式将出现此异常.
老实说,这个异常并没有给予很多关于发生了什么的信息。希望在不久的将来会更新。