Многопроцессорная обработка с Keras - Tensor не является элементом этого графа - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь использовать функцию предсказания, и я сталкиваюсь с некоторыми проблемами.Моя модель keras компилируется в другом скрипте (nnGenerator) внутри одного пакета.Функция, которая компилирует модель, затем возвращает модель в основной скрипт, где она обрабатывается.

Ниже приведена упрощенная версия моего кода:

from pathos.multiprocessing import ProcessingPool
from pathos.helpers import freeze_support

from GeneticAlgorithm import genotype
from GeneticAlgorithm import nnGenerator
import h5py
import numpy as np
import json
import dill
import tensorflow as tf


###############################

with open('parameter_ga.json') as json_data:
    params = json.load(json_data)

params_l = params["layers"]

input_dims_actor = [(params_l["input_dims_actor"][0], params_l["input_dims_actor"][1])]
output_dims_actor = [(params_l["output_dims_actor"][0],)]

geno = genotype.Genotype('actor', 1, 1, input_dims_actor, output_dims_actor)

model = nnGenerator.create_models(geno, input_dims_actor, 'actor')
#####################################

#retrieve data
with h5py.File(r"C:\Users\Lennart\Masterarbeit\data.h5", 'r') as f:
    states = (f['states'][:]+1)/2

experience_buffer = range(states.shape[0])

experience = np.random.choice(experience_buffer, size=32)

batch_states = np.array([states[i] for i in experience])  # bx(sxs)

data = batch_states.copy()

print("shape:", data.shape)
print("type:", type(data))

def predict(model, data):
    result = model.predict(data)
    return result

def main():
    with ProcessingPool() as pool:
        M = pool.map(predict, [model], [data])
    print(M)

if __name__=="__main__":
    freeze_support()
    main()

Когда я передаю этомодель в пафосный мультипроцессорный пул.Я получаю ошибки, такие как ValueError: Tensor Tensor ("concatenate_1 / concat: 0", shape = (?, 3), dtype = float32) не является элементом этого графа.:

    multiprocess.pool.RemoteTraceback: 
"""
Traceback (most recent call last):
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\multiprocess\pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\multiprocess\pool.py", line 44, in mapstar
    return list(map(*args))
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\pathos\helpers\mp_helper.py", line 15, in <lambda>
    func = lambda args: f(*args)
  File "C:/Users/Lennart/PycharmProjects/demonstrator_RLAlgorithm/GeneticAlgorithm/test.py", line 55, in predict
    result = model.predict(data)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\keras\engine\training.py", line 1710, in predict
    self._make_predict_function()
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\keras\engine\training.py", line 999, in _make_predict_function
    **kwargs)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\keras\backend\tensorflow_backend.py", line 2297, in function
    return Function(inputs, outputs, updates=updates, **kwargs)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\keras\backend\tensorflow_backend.py", line 2246, in __init__
    with tf.control_dependencies(self.outputs):
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\tensorflow\python\framework\ops.py", line 3782, in control_dependencies
    return get_default_graph().control_dependencies(control_inputs)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\tensorflow\python\framework\ops.py", line 3511, in control_dependencies
    c = self.as_graph_element(c)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\tensorflow\python\framework\ops.py", line 2584, in as_graph_element
    return self._as_graph_element_locked(obj, allow_tensor, allow_operation)
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\tensorflow\python\framework\ops.py", line 2663, in _as_graph_element_locked
    raise ValueError("Tensor %s is not an element of this graph." % obj)
ValueError: Tensor Tensor("concatenate_1/concat:0", shape=(?, 3), dtype=float32) is not an element of this graph.
"""

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:/Users/Lennart/PycharmProjects/demonstrator_RLAlgorithm/GeneticAlgorithm/test.py", line 66, in <module>
    main()
  File "C:/Users/Lennart/PycharmProjects/demonstrator_RLAlgorithm/GeneticAlgorithm/test.py", line 61, in main
    M = pool.map(predict, [model], [data])
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\pathos\multiprocessing.py", line 137, in map
    return _pool.map(star(f), zip(*args)) # chunksize
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\multiprocess\pool.py", line 260, in map
    return self._map_async(func, iterable, mapstar, chunksize).get()
  File "C:\Users\Lennart\AppData\Local\Continuum\anaconda3\envs\Cense5\lib\site-packages\multiprocess\pool.py", line 608, in get
    raise self._value
ValueError: Tensor Tensor("concatenate_1/concat:0", shape=(?, 3), dtype=float32) is not an element of this graph.

Сводка модели выглядит следующим образом:

    ____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to                     
====================================================================================================
input_1 (InputLayer)             (None, 40, 40, 3)     0                                            
____________________________________________________________________________________________________
flatten_1 (Flatten)              (None, 4800)          0           input_1[0][0]                    
____________________________________________________________________________________________________
dropout_1 (Dropout)              (None, 4800)          0           flatten_1[0][0]                  
____________________________________________________________________________________________________
forward_1_actor_ (Dense)         (None, 1)             4801        dropout_1[0][0]                  
____________________________________________________________________________________________________
sideways_1_actor_ (Dense)        (None, 1)             4801        dropout_1[0][0]                  
____________________________________________________________________________________________________
rotation_1_actor_ (Dense)        (None, 1)             4801        dropout_1[0][0]                  
____________________________________________________________________________________________________
concatenate_1 (Concatenate)      (None, 3)             0           forward_1_actor_[0][0]           
                                                                   sideways_1_actor_[0][0]          
                                                                   rotation_1_actor_[0][0]          
====================================================================================================
Total params: 14,403
Trainable params: 14,403
Non-trainable params: 0
____________________________________________________________________________________________________

Так что, в конце концов, я понятия не имею, почему этот код не работает.Я перебрал все связанные вопросы.Но из-за моего статуса новичка я, возможно, не понял его правильно.

Любая помощь приветствуется, заранее спасибо, Леннарт

...