运行连续或多线程的model.fit会导致keras中的ValueError

时间:2019-01-02 11:32:16

标签: python multithreading keras hyperopt

我正在使用hyperopt和keras自动构建神经网络,并且在异步任务中针对要使用同一数据集进行回归的每个值进行此操作。 (我知道您可以训练网络以输出多个回归变量,但这就是我现在的做法)

假设我正在使用1个线程。每个任务完成后,下一个任务将提高

Traceback (most recent call last):
File "C:\Program Files\Python36\lib\threading.py", line 916, in _bootstrap_inner
self.run()
File "C:\Program Files\Python36\lib\threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "C:\Program Files\Python36\lib\multiprocessing\pool.py", line 489, in _handle_results
task = get()
File "C:\Program Files\Python36\lib\multiprocessing\connection.py", line 251, in recv
return _ForkingPickler.loads(buf.getbuffer())
File "C:\Program Files\Python36\lib\site-packages\keras\engine\network.py", line 1266, in __setstate__
model = saving.unpickle_model(state)
File "C:\Program Files\Python36\lib\site-packages\keras\engine\saving.py", line 435, in unpickle_model
return _deserialize_model(f)
File "C:\Program Files\Python36\lib\site-packages\keras\engine\saving.py", line 258, in _deserialize_model
.format(len(layer_names), len(filtered_layers))
ValueError: You are trying to load a weight file containing 21 layers into a model with 0 layers

我在某处读到这可能是由于未指定正确的input_size引起的,但是,在向模型添加任何图层之前,我总是向模型添加InputLayer(X)

回溯不会追溯到我的代码,所以我在这里有些困惑。

最终我发现这是由return在所调用函数中的apply_sync动作引起的。 .wait().get()似乎都产生相同的错误。

因此,我的问题是:当使用apply_sync和Keras合并时,返回语句是否可行(遵循pydocs .get()确实适用于简单函数),或者我应该这样做吗?通过枚举将结果放在全局变量中,还是我这样做本质上是错的?

0 个答案:

没有答案