मैं एकाधिक थ्रेड (और 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())
परिणामी त्रुटि 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).
है। मैंने धागे के भीतर मॉडल को शुरू करने का भी प्रयास किया है जो समान विफलता देता है।
इस बारे में जाने के सर्वोत्तम तरीके पर कोई विचार? मैं इस सटीक संरचना से बिल्कुल जुड़ा हुआ नहीं हूं, लेकिन मैं प्रक्रियाओं के बजाय कई धागे का उपयोग करने में सक्षम होना पसंद करूंगा ताकि सभी मॉडलों को एक ही जीपीयू स्मृति आवंटन के भीतर प्रशिक्षित किया जा सके।
यह मेरी समस्या हल, मैं दो मॉडल एक प्रक्रिया में चल रहे, यह मुझे हमेशा ValueError दिखाने: तर्क लायें एक टेंसर के रूप में व्याख्या नहीं किया जा सकता है। (टेंसर टेंसर ("इनपुट: 0", आकार = (2, 2), dtype = float32_ref) इस ग्राफ का तत्व नहीं है।) – forqzy