【发布时间】:2020-09-05 18:26:01
【问题描述】:
我正在训练一个神经网络。因此,我使用下面的代码读取了 182335 个图像(png 文件)。
folders = glob.glob(r'path\to\images\*')
imagenames_list = []
for folder in folders:
for f in glob.glob(folder+'/*.png'):
imagenames_list.append(f)
read_images = []
for image in imagenames_list:
read_images.append(cv2.imread(image))
在对数据进行一些预处理后,我创建了一个 pandas 数据框并将其保存为一个 pickle 文件:
df.to_pickle(r'data\data_as_pddataframe.pkl')
df.head()
由于图像数量巨大,我有一个相对较大的 pickle 文件 (3GB)。正因为如此,读取该文件需要一些时间,并且还需要大量内存。另外,我准备在 Google Colab 中训练网络时,碰巧 Colab 因为数据量太大而崩溃。
因此,有没有更有效的方法 1. 读取数据和 2. 存储数据帧?
谢谢!
【问题讨论】:
-
数据是如何存储在DataFrame中的?
-
如果没有别的,你不应该使用 Pickle 作为你的数据格式。考虑使用 Parquet 或 HDF5。见realpython.com/storing-images-in-python
-
感谢您的回答!我编辑了我的问题。数据框中还存储了更多数据。变量是 image、image_path、track_id、lp 和 train。
-
好的。至于崩溃的 Colab,您肯定是在使用 SGD 或批量 SGD 运行模型,对吧?然后,您所要做的就是将数据存储在磁盘上的某个位置,并一次(或分批)加载一个记录以进行训练。
-
好的,谢谢!我正在训练批量 SGD。