擅长:python、mysql、java
<p>是的,Keras是线程安全的,如果你稍微注意一下的话。</p>
<p>事实上,在强化学习中,有一种称为<a href="https://arxiv.org/pdf/1602.01783.pdf" rel="noreferrer">Asynchronous Advantage Actor Critics (A3C)</a>的算法,其中每个代理依赖同一个神经网络来告诉他们在给定状态下应该做什么。换句话说,每个线程都像在问题中一样同时调用<code>model.predict</code>。一个带有Keras的示例实现是<a href="https://github.com/jaara/AI-blog/blob/master/CartPole-A3C.py" rel="noreferrer">here</a>。</p>
<p>但是,如果查看代码,则应特别注意这一行:
<code>model._make_predict_function() # have to initialize before threading</code></p>
<p>这在Keras文档中从来没有提到过,但是要使它同时工作是必要的。简而言之,<code>_make_predict_function</code>是编译<code>predict</code>函数的函数。在多线程设置中,您必须提前手动调用此函数来编译<code>predict</code>,否则<code>predict</code>函数在第一次运行之前将不会被编译,这将在许多线程同时调用它时出现问题。你可以看到详细的解释<a href="https://github.com/fchollet/keras/issues/6124" rel="noreferrer">here</a>。</p>
<p>到目前为止,我在Keras中还没有遇到过多线程的任何其他问题。</p>