- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
凯拉斯 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
与否 ??
最佳答案
我不熟悉 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)
>>> 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>'
关于process - Keras "pickle_safe": What does it mean to be "pickle safe", 或者 Python 中的 "non picklable"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43730275/
我是一名优秀的程序员,十分优秀!