首页 > 解决方案 > pickle.load() 和 pickle.dump() 不一致

问题描述

我正在构建神经网络,应该在修改后的 CIFAR-10 上进行测试。我已用于keras.datasets.cifar10.load_data()检索数据集,然后使用 dict 在 dict 中对其进行解析pickle.load(datafile, encoding='bytes')。经过一些修改后,我使用pickle.dump().

我注意到生成的文件pickle.dump()比源文件大 53 个字节。即使我没有进行任何修改并dump()load()生成的文件有额外的 53 个字节后立即使用。看起来结果文件的结构没有被违反,因为我能够从中恢复图像、标签、文件名并且它们是正确的。但是,如果我正在学习和测试神经网络(即使是示例中最简单的 NN !),我的分数也会很差(~0.5)。

  1. 如果结构一般不改变,请帮助我弄清楚加载倾倒如何影响 NN 的结果?
  2. 如何加载和转储以保持文件的结构和大小不变?如何避免 load-dump 操作的不一致?

PS看起来像dump()向文件写入了一些头文件并且如果头文件已经存在则不写入(我尝试两次应用加载转储,但大小仅在第一次应用时发生变化)。但是我怎样才能避免写这个标题呢?

标签: image-processingneural-networkkeraspickle

解决方案


如果结构一般不改变,请帮助我弄清楚加载倾倒如何影响 NN 的结果?

如果结构不改变,则对网络没有影响。您可以使用人类可读的输出进行简单转储并比较文件。首先阅读这里的协议。

如何加载和转储以保持文件的结构和大小不变?如何避免 load-dump 操作的不一致?

没有真正的不一致,它可能只是使用另一个协议或附加标头。您不应该处理这些内部问题。如果您想让您的模型具有人类可读性或将其置于版本控制之下,您可以使用 json 或其他人类 readbale 协议。(例如simplejson)


推荐阅读