python - 为什么对 tensorflow 张量进行 pickle 会失败?

标签 python tensorflow serialization pickle dill

下面的代码片段可以使用 dill 成功序列化,但使用 pickle 序列化失败。令人惊讶的是,Tensor 对象本身不可pickle。这是线程感知张量的基本限制,还是只是没有实现?

import dill
import pickle
import tensorflow as tf

dill.dumps(tf.zeros((1,1)))
print("Dill succeeded")
pickle.dumps(tf.zeros((1,1)))
print("Pickle succeeded")

输出:

$ python foo.py
Dill succeeded
Traceback (most recent call last):
  File "foo.py", line 7, in <module>
    pickle.dumps(tf.zeros((1,1)))
TypeError: can't pickle _thread.lock objects

最佳答案

为什么dill可以序列化这些对象,而pickle却不能?简单的答案是 pickle 无法序列化 python 中的大多数对象,包括 thread.lock 对象。如果您想序列化这些对象之一,请使用高级序列化库,例如 dill。至于为什么 pickle 不能,我认为最初它源于 GIL 的实现和 frame 对象渲染一些对象不可序列化,因此没有驱动用语言序列化所有内容。一直以来,人们都在谈论所有 Python 对象的序列化所引发的安全问题,但我认为这是转移注意力的话题。没有完整的语言序列化限制了并行计算的能力,因此希望 pickle 能够向 dill 学习如何序列化更多对象。

关于python - 为什么对 tensorflow 张量进行 pickle 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43769390/

相关文章:

python - 如何获取函数输出的多个值

python - 在 Python 中使用 BeautifulSoup 查找 html 标签

python - Pandas 查找匹配值的行号

python - as_list() 未在未知 TensorShape 上定义

c# - 在解析完成之前遇到流结束?

.net - 在构造函数中将 Json 反序列化为 Object

python - Windows 没有将命令行参数传递给从 shell 执行的 Python 程序

python - 如何缓存和迭代未知大小的数据集?

python - Tensorflow:为什么在涉及应用渐变的步骤中使用 zip() 函数?

java - HashSet 没有序列化的 java spring roo