Запуск последовательного или многопоточного model.fit вызывает ValueError в keras
Я использую 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()
похоже выдают ту же ошибку.
Поэтому мой вопрос: жизнеспособен ли оператор return при использовании apply_sync и Pooling with Keras (после pydocs .get()
у меня работает с простыми функциями), или я должен, например, поместить результаты путем перечисления в глобальную переменную, или я делаю это по своей сути неправильно?