gpt4 book ai didi

process - Keras "pickle_safe": What does it mean to be "pickle safe", 或者 Python 中的 "non picklable"?

转载 作者:行者123 更新时间:2023-12-04 10:34:59 24 4
gpt4 key购买 nike

凯拉斯 fit_generator()有一个参数pickle_safe默认为 False .
如果是pickle_safe,训练可以运行得更快,并相应地将标志设置为True ?

根据Kera's docs :

pickle_safe: If True, use process based threading. Note that because this implementation relies on multiprocessing, you should not pass non picklable arguments to the generator as they can't be passed easily to children processes.



我不明白这是在说什么。
如何确定我的论点是否为 pickle_safe与否 ??

如果相关:
- 我传入一个自定义生成器
- 生成器函数接受参数:X_train、y_train、batch_size、p_keep;
它们的类型为 np.array、int、float)
- 我没有使用 GPU
- 另外,我使用的是 Keras 1.2.1,尽管我相信这个参数的行为与 keras 2 中的相同

最佳答案

我不熟悉 keras ,但从文档一目了然,pickle_safe只是意味着您的生成器生成的元组必须是“可 pickle 的”。
pickle是一个标准的python模块,用于序列化和反序列化对象。标准multiprocessing实现使用 pickle在不同进程之间共享对象的机制——由于两个进程不共享相同的地址空间,它们不能直接看到相同的 python 对象。因此,为了将对象从进程 A 发送到进程 B,它们在 A 中被 pickle (这会产生特定众所周知格式的字节序列),然后通过进程间通信机制将 pickle 格式发送到 B,然后在 B 中解压,在 B 的地址空间中生成 A 的原始对象的副本。

因此,要发现您的对象是否可 pickle ,只需调用 pickle.dumps在他们。

>>> import pickle
>>> class MyObject:
... def __init__(self, a, b, c):
... self.a = a
... self.b = b
... self.c = c
...
>>> foo = MyObject(1, 2, 3)
>>> pickle.dumps(foo)
b'\x80\x03c__main__\nMyObject\nq\x00)\x81q\x01}q\x02(X\x01\x00\x00\x00cq\x03K\x03X\x01\x00\x00\x00aq\x04K\x01X\x01\x00\x00\x00bq\x05K\x02ub.'
>>>
dumps产生一个字节串。我们现在可以重构 foo来自字节字符串的对象为 bar使用 loads :
>>> foo_pick = pickle.dumps(foo)
>>> bar = pickle.loads(foo_pick)
>>> bar
<__main__.MyObject object at 0x7f5e262ece48>
>>> bar.a, bar.b, bar.c
(1, 2, 3)

如果某些东西不可 pickle ,你会得到一个异常(exception)。例如,不能 pickle lambda:
>>> class MyOther:
... def __init__(self, a, b, c):
... self.a = a
... self.b = b
... self.c = c
... self.printer = lambda: print(self.a, self.b, self.c)
...
>>> other = MyOther(1, 2, 3)
>>> other_pick = pickle.dumps(other)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Can't pickle local object 'MyOther.__init__.<locals>.<lambda>'

有关更多信息,请参阅文档:
https://docs.python.org/3.5/library/pickle.html?highlight=pickle#what-can-be-pickled-and-unpickled

关于process - Keras "pickle_safe": What does it mean to be "pickle safe", 或者 Python 中的 "non picklable"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43730275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com