我们可以使用 python 生成器读取 pickle 文件中的数据吗
Can we read the data in a pickle file with python generators
我有一个很大的 pickle 文件,我想从 pickle 文件中加载数据来训练深度学习模型。如果我可以使用生成器为每个键加载数据,有什么办法吗?数据在 pickle 文件中以字典的形式存在。我正在使用 pickle.load(filename)
,但我担心它会在 运行 模型时占用太多内存。我最初使用 pickle.HIGHEST_PROTOCOL
将数据转储到 pickle 文件中。
没有。 pickle 文件格式不像 JSON 或其他您可以只读取其中一部分并逐步解码的格式。 pickle 文件是构建 Python 对象的指令列表,就像遵循一半指令烤蛋糕不会烤半个蛋糕一样,阅读半个 pickle 不会给你一半的腌制对象.
(如果对 SO 社区的这个问题 unhelpful/unrelated/indirect-related 我会考虑删除这个答案。)
简单回答:不可能已回复。但是您仍然可以通过以下替代方法解决此问题,因为您的目标是在任何时刻将少量数据加载到有限内存中以获取已知的基于文件的数据:
将 dict 分解成小的 dicts 并重新 pickle 它们。并一个一个加载较小的 pickle 文件。
- 专业:实施起来不费力
- 缺点:加载顺序问题
中间存储,按需加载数据。这可以通过将 pickle 对象分解为仅包含键的 pickle 对象,并将 dict 放入中间存储来完成。您将需要一个额外的代码来按需从存储中加载中间数据。
- 亲:一些努力来实现
- 缺点:没有加载顺序问题
+------------------------+ +------+
| Original Pickle Object | -----> | Dict |
+------------------------+ +------+
| |
+-----+ +---------+
| Key | | storage | (K/V pair)
+-----+ +---------+
↓ ↓
+-------------------+ +-------------+
| Your Data Trainer | <---- | Data Loader |
+-------------------+ +-------------+
我有一个很大的 pickle 文件,我想从 pickle 文件中加载数据来训练深度学习模型。如果我可以使用生成器为每个键加载数据,有什么办法吗?数据在 pickle 文件中以字典的形式存在。我正在使用 pickle.load(filename)
,但我担心它会在 运行 模型时占用太多内存。我最初使用 pickle.HIGHEST_PROTOCOL
将数据转储到 pickle 文件中。
没有。 pickle 文件格式不像 JSON 或其他您可以只读取其中一部分并逐步解码的格式。 pickle 文件是构建 Python 对象的指令列表,就像遵循一半指令烤蛋糕不会烤半个蛋糕一样,阅读半个 pickle 不会给你一半的腌制对象.
(如果对 SO 社区的这个问题 unhelpful/unrelated/indirect-related 我会考虑删除这个答案。)
简单回答:不可能已回复。但是您仍然可以通过以下替代方法解决此问题,因为您的目标是在任何时刻将少量数据加载到有限内存中以获取已知的基于文件的数据:
将 dict 分解成小的 dicts 并重新 pickle 它们。并一个一个加载较小的 pickle 文件。
- 专业:实施起来不费力
- 缺点:加载顺序问题
中间存储,按需加载数据。这可以通过将 pickle 对象分解为仅包含键的 pickle 对象,并将 dict 放入中间存储来完成。您将需要一个额外的代码来按需从存储中加载中间数据。
- 亲:一些努力来实现
- 缺点:没有加载顺序问题
+------------------------+ +------+
| Original Pickle Object | -----> | Dict |
+------------------------+ +------+
| |
+-----+ +---------+
| Key | | storage | (K/V pair)
+-----+ +---------+
↓ ↓
+-------------------+ +-------------+
| Your Data Trainer | <---- | Data Loader |
+-------------------+ +-------------+