使用Keras结合symlinks时遇FileNotFoundError错误求助
问题排查与解决方法
针对你遇到的FileNotFoundError,结合Colab环境和符号链接的特性,可能的原因和解决方式如下:
1. 本地生成的符号链接使用了绝对路径
本地创建符号链接时如果用了绝对路径,上传到Colab后,路径指向的是本地设备的文件系统,而Colab的环境中不存在该路径,导致follow链接时找不到原始文件。
解决:
在Colab环境内重新生成相对路径的符号链接,而不是在本地生成后上传。示例代码:
import os # 假设原始数据集在Colab的/content/original_data下,训练集结构在/content/train下 original_path = "/content/original_data" train_path = "/content/train" # 创建类别文件夹 os.makedirs(os.path.join(train_path, "class0"), exist_ok=True) os.makedirs(os.path.join(train_path, "class1"), exist_ok=True) # 为class0生成相对路径符号链接 for img_name in os.listdir(os.path.join(original_path, "class0")): # 计算原始文件相对于符号链接所在目录的相对路径 src = os.path.relpath(os.path.join(original_path, "class0", img_name), os.path.join(train_path, "class0")) dst = os.path.join(train_path, "class0", img_name) os.symlink(src, dst) # 同理处理class1
2. 符号链接与原始文件不在同一文件系统
如果原始文件存储在Google Drive,而你把本地生成的符号链接上传到Colab的临时目录(/content/),两者属于不同的挂载文件系统,符号链接会直接失效。
解决:
确保符号链接和原始文件在同一文件系统内:
- 将原始数据集放在Google Drive中,挂载Drive后直接在Drive目录下生成符号链接;
- 或把原始数据集复制到Colab本地临时目录(
/content/),再生成符号链接。
3. 文件权限问题
Colab中符号链接指向的原始文件可能没有读取权限,导致无法访问。
解决:
用命令行检查符号链接的指向和权限:
!ls -l /content/train/class0/
如果输出显示目标文件不存在或权限不足,可修改原始文件的权限:
!chmod -R 644 /content/original_data/
4. flow_from_directory的路径配置问题
确认flow_from_directory的directory参数指向符号链接所在的文件夹,且路径正确。示例代码:
from tensorflow.keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator(rescale=1./255) train_generator = datagen.flow_from_directory( '/content/train', # 确保是符号链接文件夹的正确绝对路径 target_size=(224, 224), batch_size=32, class_mode='binary', follow_links=True )
内容的提问来源于stack exchange,提问作者Teresa
相关产品推荐
相关产品推荐

