【问题标题】:Can I pickle a Zip object?我可以腌制一个 Zip 对象吗?
【发布时间】:2020-12-08 01:30:44
【问题描述】:

我有一个主要包含文本和 json 文件的目录,以及一个二进制文件(MXNet.Block.save_parameters 神经网络的输出)。

我想压缩这个文件夹然后腌制它。假设我有一个 zip 文件对象:

from zipfile import ZipFile
import os, pickle, itertools


files = list(itertools.chain(*[
    map(lambda x: os.path.join(root, x), files)
    for root, directories, files in os.walk('model-artifacts/')
]))

zfile = ZipFile('mymode.l.zip', 'w')

for file in file_paths:
   zfile.write(file)

我真的不能腌制它:

pickle.dumps(zfile)

# TypeError: cannot serialize '_io.BufferedRandom' object

我想知道是否有办法腌制 zip 文件或腌制目录的内容。

为什么?

我不是自己做酸洗,而是使用一个库Metaflow 来酸洗其中的对象,所以我想找到一种方法来用Metaflow 存储我的模型

【问题讨论】:

  • 您正在将压缩数据写入磁盘上的路径。你想让泡菜代表什么?它应该代表文件路径吗?它应该代表压缩数据吗?如果是第二种选择,为什么要写入磁盘?
  • 是的,你是对的 :( 我不认为我知道我在这里做什么,我可能需要尝试更好地理解泡菜......问题是我不能泡菜我的@987654326直接@对象,它给出一个错误:AttributeError: Can't pickle local object 'SimpleFeedForwardNetworkBase.__init__.<locals>.<lambda>' 。我想如果我只加载模型工件(json文件和二进制文件),那么我正在使用的框架将知道如何腌制它,然后我知道如何处理下游...
  • 作为另一个旁注:我使用的框架 (Metaflow) 腌制对象并将它们上传到云端。我可以自己做,但我更喜欢使用框架访问所有内容。
  • 你的模型类是你自己写的吗?如果是这样,请查看 __init__ 方法并将 lambdas 转换为模块级辅助函数。
  • 否 :(。这是来自MXNet 的课程,无法真正更改。

标签: python deep-learning pickle mxnet netflix-metaflow


【解决方案1】:

简短回答:您不能腌制 Zip 对象。

解释:Zip 文件是经过压缩的文件。酸洗的目的是我们试图序列化一些(python)对象。但是,在文件压缩之后,您实际上不再有 (python) 对象,只是一堆 0 和 1 准备解压缩。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    相关资源
    最近更新 更多