複数のスレッド(およびtensorflow
バックエンド)を使用して、異なるパラメータ値を持つ複数のkeras
モデルをトレーニングしようとしています。私は複数のスレッドで同じモデルを使用する例をいくつか見てきましたが、この特定のケースでは、矛盾するグラフなどに関するさまざまなエラーが発生しました。ここでは、できることを簡単に示します: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).
です。私はまた、同様の失敗をもたらすスレッド内でモデルを初期化しようとしました。
この問題を解決するにはどうすればよいですか?私はこの正確な構造には全く関わっていませんが、プロセスではなく複数のスレッドを使用できるようにするため、すべてのモデルが同じGPUメモリ割り当て内で訓練されます。
これは私の問題を解決し、私は1つのプロセスで2つのモデルを実行している、それは常に私にValueErrorをを示しています:引数を取得する。ここ
が作成され、並行して使用可能な各GPU上でモデルをフィットするいくつかのコードがありますテンソルとして解釈することはできません。 (Tensor Tensor( "input:0"、shape =(2,2)、dtype = float32_ref)はこのグラフの要素ではありません。 – forqzy