类型错误:“ReadFile”操作的输入“文件名”的类型为 float32,与预期的字符串类型不匹配

jus*_*ing 8 python keras

我从这里的教程中运行此代码: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.
Run Code Online (Sandbox Code Playgroud)

我做了这个铸件。我试过这个:

is_jfif = str(tf.compat.as_bytes("JFIF")) in fobj.peek(10)
Run Code Online (Sandbox Code Playgroud)

但就我整天试图找出解决方法的错误而言,没有任何改变,但没有任何成功。有人能帮我吗?谢谢...

Mat*_*len 17

我发现的最简单的方法是创建一个子文件夹并将文件复制到该子文件夹。即让我们假设您的文件是 0.jpg、1.jpg、2.jpg....2000.jpg 并且在名为“patterns”的目录中。

似乎 Keras API 不接受它,因为文件以数字命名,而对于 Keras,它在 float32 中。

为了解决这个问题,您可以按照一个答案的建议重命名文件,或者您可以简单地在“patterns”(即“patterndir”)下创建一个子文件夹。所以现在你的图像文件在 ...\patterns\patterndir 下

Keras(内部)可能使用子目录名称,并且可能将其附加在图像文件的前面,从而使其成为一个字符串(例如 patterndir_01.jpg、patterndir_02.jpg)[注意这是我的解释,并不意味着它是真的]

当你这次编译它时,你会看到它可以工作,你会得到一条编译器消息:

Found 2001 files belonging to 1 classes.
Using 1601 files for training.
Found 2001 files belonging to 1 classes.
Using 400 files for validation.
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

#Generate a dataset

image_size = (28, 28)
batch_size = 32

train_ds = tf.keras.preprocessing.image_dataset_from_directory(
    "patterns",
    validation_split=0.2,
    subset="training",
    seed=1337,
    image_size=image_size,
    batch_size=batch_size,
)
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
    "patterns",
    validation_split=0.2,
    subset="validation",
    seed=1337,
    image_size=image_size,
    batch_size=batch_size,
)
Run Code Online (Sandbox Code Playgroud)