Próbuję przeprowadzić wiele modeli keras
z różnymi wartościami parametrów przy użyciu wielu wątków (i zaplecza tensorflow
). Widziałem kilka przykładów używania tego samego modelu w wielu wątkach, ale w tym konkretnym przypadku napotykam różne błędy dotyczące sprzecznych wykresów itp. Oto prosty przykład tego, co chciałbym móc zrobić:Wielowątkowe modelowanie TensorFlow/Keras
from concurrent.futures import ThreadPoolExecutor
import numpy as np
import tensorflow as tf
from keras import backend as K
from keras.layers import Dense
from keras.models import Sequential
sess = tf.Session()
def example_model(size):
model = Sequential()
model.add(Dense(size, input_shape=(5,)))
model.add(Dense(1))
model.compile(optimizer='sgd', loss='mse')
return model
if __name__ == '__main__':
K.set_session(sess)
X = np.random.random((10, 5))
y = np.random.random((10, 1))
models = [example_model(i) for i in range(5, 10)]
e = ThreadPoolExecutor(4)
res_list = [e.submit(model.fit, X, y) for model in models]
for res in res_list:
print(res.result())
Wynikowy błąd to ValueError: Tensor("Variable:0", shape=(5, 5), dtype=float32_ref) must be from the same graph as Tensor("Variable_2/read:0", shape=(), dtype=float32).
. Próbowałem również zainicjować modele w wątkach, co daje podobne niepowodzenie.
Jakieś przemyślenia na temat najlepszego sposobu rozwiązania tego problemu? Nie jestem w żaden sposób związany z tą dokładną strukturą, ale wolałbym móc używać wielu wątków zamiast procesów, więc wszystkie modele są szkolone w ramach tego samego przydziału pamięci GPU.
to rozwiązać mój problem, mam dwa Model pracuje w jednym procesie, zawsze pokazać mi ValueError: Fetch argumentu nie można interpretować jako Tensora. (Tensor Tensor ("input: 0", shape = (2, 2), dtype = float32_ref) nie jest elementem tego wykresu.) – forqzy