首页 > 解决方案 > 从多个 Jupiter notebook 访问内存中的数据

问题描述

我有多个 GPU,可以并行训练不同的神经网络,但不幸的是,由于数据量大,我受到 CPU 内存的限制,并且无法在不同的笔记本电脑上运行多个模型,因为我必须加载数据对于每个笔记本。

有没有办法从一个笔记本加载数据并通过另一个笔记本访问它?

我正在使用 TensorFlow/Keras

标签: tensorflowmemorydeep-learninggpucpu

解决方案


与其尝试将所有内容加载到内存中,不如使用生成器函数。这会将数据分批读入内存,然后将这些批次推送到神经网络。Keras 具有内置的生成器功能,专门用于从磁盘批量读取图像数据。

请参考https://keras.io/preprocessing/image/

这是一个小示例脚本:

from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        'data/train',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
        'data/validation',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

model.fit_generator(
        train_generator,
        steps_per_epoch=2000,
        epochs=50,
        validation_data=validation_generator,
        validation_steps=800)

以上假设您正在执行二进制分类(在“class_mode”下设置),但您也可以执行“分类”、“稀疏”、“输入”等。如果您需要其他内容,您也可以创建自己的生成器,或调整喀拉斯一。


推荐阅读