首页 > 解决方案 > 在 databricks 中安装的 s3 存储桶上使用 keras 的 .flow_from_directory()

问题描述

我正在尝试使用 Spark 2.4.4 和 Python 中的 Scala 2.11 后端在数据块中构建卷积神经网络。我以前构建过 CNN,但这是我第一次使用 Spark(databricks)和 AWS s3。AWS 中的文件是这样排序的:

然后是每个目录中与其类别相对应的图像列表(0,1,2,3)

为了访问存储在 s3 存储桶中的文件,我将存储桶安装到数据块上,如下所示:

# load in the image files
WS_BUCKET_NAME = "sensored_bucket_name/video_topic_modelling/data/train_test_small"
MOUNT_NAME = "train_test_small"
dbutils.fs.mount("s3a://%s" % AWS_BUCKET_NAME, "/mnt/%s" % MOUNT_NAME)
display(dbutils.fs.ls("/mnt/%s" % MOUNT_NAME))

使用时:display(dbutils.fs.mounts())我可以看到桶安装到:

MountInfo(mountPoint='/mnt/train_test_small', source='sensored_bucket_name/video_topic_modelling/data/train_test_small', encryptionType='')

然后我尝试使用以下代码通过 keras 的 flow_from_directory() 模块访问这个挂载的目录:

# create extra partition of the training data as a validation set
train_datagen=ImageDataGenerator(preprocessing_function=preprocess_input, validation_split=0) #included in our dependencies

# set scaling to most common shapes
train_generator=train_datagen.flow_from_directory('/mnt/train_test_small',
                                                 target_size=(320, 240),
                                                 color_mode='rgb',
                                                 batch_size=96,
                                                 class_mode='categorical',
                                                 subset='training')
                                                 #shuffle=True)
validation_generator=train_datagen.flow_from_directory('/mnt/train_test_small',
                                                 target_size=(320, 240),
                                                 color_mode='rgb',
                                                 batch_size=96,
                                                 class_mode='categorical',
                                                 subset='validation')

但是,这给了我以下错误:

FileNotFoundError: [Errno 2] No such file or directory: '/mnt/train_test_small/train/'

我试图使用 keras 和 databricks 文档来解决这个问题,但没有进一步。目前我最好的猜测是 keras flow_from_directory() 无法检测到挂载的目录,但我不确定。

有谁知道如何将 .flow_from_directory() 模块应用到 databricks 中的 s3 挂载目录上,或者谁知道一个好的替代方案?帮助将不胜感激!

标签: apache-sparktensorflowamazon-s3kerasconv-neural-network

解决方案


我认为您可能缺少对 flow_from_directory 的另一个目录级别指示。来自 Keras文档

directory:字符串,目标目录的路径。每个类应该包含一个子目录。每个子目录目录树内的任何 PNG、JPG、BMP、PPM 或 TIF 图像都将包含在生成器中。

# set scaling to most common shapes
train_generator=train_datagen.flow_from_directory(
    '/mnt/train_test_small/train', # <== add "train" folder
    target_size=(320, 240),
    ...

validation_generator=train_datagen.flow_from_directory(
    '/mnt/train_test_small/test', # <== add "test" folder
    target_size=(320, 240),
    ....

推荐阅读