Я пытаюсь использовать функцию предсказания, и я сталкиваюсь с некоторыми проблемами.Моя модель 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
____________________________________________________________________________________________________
Так что, в конце концов, я понятия не имею, почему этот код не работает.Я перебрал все связанные вопросы.Но из-за моего статуса новичка я, возможно, не понял его правильно.
Любая помощь приветствуется, заранее спасибо, Леннарт