tensorflow - 从多个 Jupiter notebook 访问内存中的数据
问题描述
我有多个 GPU,可以并行训练不同的神经网络,但不幸的是,由于数据量大,我受到 CPU 内存的限制,并且无法在不同的笔记本电脑上运行多个模型,因为我必须加载数据对于每个笔记本。
有没有办法从一个笔记本加载数据并通过另一个笔记本访问它?
我正在使用 TensorFlow/Keras
解决方案
与其尝试将所有内容加载到内存中,不如使用生成器函数。这会将数据分批读入内存,然后将这些批次推送到神经网络。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”下设置),但您也可以执行“分类”、“稀疏”、“输入”等。如果您需要其他内容,您也可以创建自己的生成器,或调整喀拉斯一。
推荐阅读
- node.js - 如何使用 nodejs child_process exec 捕获 ENOENT
- arm - 使用 Neon aarch64 优化 gemm(矩阵乘法)
- javascript - 使用 insertHTML (contenteditable) 为 execCommand 撤消/重做 iframe
- jquery - 将两个成功函数附加到 AJAX 调用(用于排队)
- asp.net - 字节转换成流
- java - 杰克逊自定义反序列化器仅获取列表 xml 中的最后一个值
- python - 如何挑选出每 n 个刻度标签以显示在图上?
- javascript - Firefox 和 Safari 下 HTML/CSS/JS 元球的性能问题
- scala - 在 Spark 中访问数据集中的每一行时未找到适用的构造函数/方法
- user-interface - 从用户输入变量开始一个 for 循环