gpt4 book ai didi

python - 如何在训练多类 CNN 模型时存储和加载包含 5000 万个 25x25 numpy 数组的训练数据?

转载 作者:行者123 更新时间:2023-12-01 10:52:15 27 4
gpt4 key购买 nike

我有一个图像处理问题,其中有五个类,每个类有大约 1000 万个示例作为训练数据,其中图像是 z 得分的 25x25 numpy 数组。

显然,我无法将所有训练数据加载到内存中,所以我必须使用 fit_generator .

我也是生成和扩充这些训练数据矩阵的人,但我无法在 fit_generator 内实时完成。因为训练模型会太慢。

首先,如何在磁盘上存储 5000 万个 25x25 .npy 数组?最好的做法是什么?

其次,我应该使用数据库来存储这些矩阵并在训练期间从中查询吗?我觉得SQLite不支持多线程,SQL数据集支持还是experimental在 tensorflow 中。

我很想知道是否有一种巧妙的方法来存储这 5000 万个矩阵,以便在训练期间进行检索是最佳的。

三、如何使用HDF5格式?我应该切换到 pytorch反而?

最佳答案

如何将 np.arrays() 存储在磁盘上?

将它们存储在 HDF5 文件中是个好主意。基本的 HDF5 类型是 Datasets ,其中包含同构类型的多维数组。 HDF5 Datasets文件可以组合成 HDF5 Groups文件,这些文件也可以包含其他组,以创建更复杂的结构。另一种方法是直接从磁盘中腌制您的 numpy 数组或更抽象的数据集对象,但是您的文件将只能由 Python 读取。也不鼓励 security reasons .最后,如果你想为 TensorFlow 读/写操作优化你的数据格式,你可以使用 TFRecord文件格式。以 TFRecord 格式保存 numpy 数组可能会很棘手,但值得庆幸的是有人 created a script to do that .

我应该使用数据库来存储这些矩阵并在训练期间从它们中查询吗?

你可以,但你会重新发明轮子。您需要的是一个或多个与训练过程并行的独立过程,读取下一批训练观察(预取),并在训练过程处理上一批时对其应用一些转换。这样您就可以避免任何 IO 和预处理延迟,并且可以获得一些显着的性能提升。人工智能框架为这个问题开发了自己的工具。 In Pytorch ,有类(class)torch.utils.data.DataLoader . Here是一个教程,展示了如何使用 Dataloader 有效地加载 HDF5 文件。在 TensorFlow 中,您可以创建一个 input pipeline使用类 tf.data.Dataset .一种基本方法是首先打开一个文件 (1),将文件中的数据读入内存 (2),然后使用内存中的内容训练模型 (3)。让我们模拟一个 TF 数据集和训练循环:

import tf, time

class MyDataset(tf.data.Dataset):
def __new__(self, filename="image_dataset.proto"):
time.sleep(0.01) # mock step (1) delay
return tf.data.TFRecordDataset([filename])

def train(dataset, nb_epoch=10):
start_time = time.perf_counter()
for epoch_num in range(nb_epoch):
for sample in dataset: # where step (2) delay takes place
time.sleep(0.01) # mock step (3) delay
tf.print("Execution time:", time.perf_counter() - start_time)

您可以按顺序应用步骤(1、2、3):
train(MyDataset())

更好的方法是在训练过程仍在训练前一批数据的同时读取下一批数据,这样步骤 (2, 3) 可以并行发生。也可以将转换应用到下一批,同时仍然对上一批进行训练。预取:
train(MyDataset().prefetch(tf.data.experimental.AUTOTUNE))

此外,您可以有多个进程来读取您的文件,并并行运行一系列步骤 (1, 2):
train( tf.data.Dataset.range(2).interleave(\
MyDataset().prefetch(tf.data.experimental.AUTOTUNE),\
num_parallel_calls=tf.data.experimental.AUTOTUNE))

documentation 中了解更多信息.

我应该改用 Pytorch 吗?

Pytorch 能做的几乎所有事情,TensorFlow 也能做。一段时间以来,TensorFlow 一直是最适合生产的 AI 框架,谷歌将其用于其 TPU。不过,Pytorch 正在迎头 catch 。我会说 Pytorch 更面向研究/开发,而 TensorFlow 更面向生产。另一个不同之处在于您设计神经网络的方式:Pytorch 通过在彼此之上添加层来工作,而在 TensorFlow 中,您首先设计一个计算图,您在某个时间点对某些输入数据运行。人们经常在 Pytorch 中开发他们的模型,然后将它们导出为 TensorFlow 格式以用于生产。

关于python - 如何在训练多类 CNN 模型时存储和加载包含 5000 万个 25x25 numpy 数组的训练数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59836100/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com