tf.keras.utils.image_dataset_from_directory出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9c in position 30: invalid start byte错误

import pathlib
import warnings

import matplotlib.pyplot as plt
import tensorflow as tf

# import keras

# 设置GPU
gpus = tf.config.list_physical_devices("GPU")

if gpus:
    gpu0 = gpus[0]  # 如果有多个GPU,仅使用第0个GPU
    tf.config.experimental.set_memory_growth(gpu0, True)  # 设置GPU显存用量按需使用
    tf.config.set_visible_devices([gpu0], "GPU")

warnings.filterwarnings("ignore")  # 忽略警告信息

plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
# gpus

# "./dataset/"
# 加载处理数据
data_dir = "C:/modelProject/dataset"
data_dir = pathlib.Path(data_dir)
image_count = len(list(data_dir.glob('*/*')))
print("图片总数为:", image_count)

batch_size = 16
img_height = 224
img_width = 224

train_ds = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    labels='inferred',
    validation_split=0.2,
    subset="training",
    seed=12,
    image_size=(img_height, img_width),
    batch_size=batch_size)

val_ds = tf.keras.utils.image_dataset_from_directory(
    data_dir,
    validation_split=0.2,
    subset="validation",
    seed=12,
    image_size=(img_height, img_width),
    batch_size=batch_size)

class_names = train_ds.class_names
print("数据类别有:", class_names)

出现了以下错误:
Traceback (most recent call last):
File “C:\modelProject\model.py”, line 33, in
train_ds = tf.keras.utils.image_dataset_from_directory(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “D:\Python311\Lib\site-packages\keras\utils\image_dataset.py”, line 210, in image_dataset_from_directory
image_paths, labels, class_names = dataset_utils.index_directory(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “D:\Python311\Lib\site-packages\keras\utils\dataset_utils.py”, line 543, in index_directory
if tf.io.gfile.isdir(tf.io.gfile.join(directory, subdir)):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “D:\Python311\Lib\site-packages\tensorflow\python\lib\io\file_io.py”, line 703, in is_directory_v2
return _pywrap_file_io.IsDirectory(compat.path_to_bytes(path))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x9c in position 30: invalid start byte

请问有人了解怎么解决吗

错误提示 UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x9c in position 30: invalid start byte 表明 Python 在处理文件路径时遇到了无法使用 UTF-8 编码解码的字节。这通常是因为文件路径包含了非标准的字符,尤其是在非英语环境中较为常见。

要解决这个问题,你可以尝试以下几种方法:

  1. 确保路径中不包含特殊字符:检查你的文件路径是否包含了非 UTF-8 字符,如中文或其他特殊字符。尽量使用纯英文路径名。

  2. 使用原始字符串:在 Python 中,你可以通过在字符串前加 r 来创建一个原始字符串,这样可以确保字符串内的所有特殊字符被正确理解。例如:

    data_dir = r"C:/modelProject/dataset"
    
  3. 修改环境的默认编码:尽管这不是推荐的做法,但有时可以通过改变 Python 环境的默认编码来解决问题。这可以通过以下代码实现:

    import sys
    sys.setdefaultencoding('utf-8')
    

    注意:setdefaultencoding 在 Python 3.x 中默认是不可用的,你需要先解锁它。这个方法可能会引起其他问题,因为它改变了全局环境的默认编码。

  4. 检查 TensorFlow 和依赖库的版本:确保你安装的 TensorFlow 和相关依赖库是最新的,因为老版本的库在处理路径和文件时可能存在兼容性问题。

  5. 使用绝对路径:尽可能使用完整的绝对路径,并检查路径中是否有错误或遗漏的部分。

尝试上述方法后,再次运行你的代码看看问题是否得到解决。如果还有问题,可以考虑将数据移动到不包含特殊字符的路径下。