def tf_worker(dqn: DQN, s_queue): """ A single process that removes evaluation tasks from a queue. It constructs the NN in TensorFlow and uses it to evaluate board states sent to it. Args: dqn, an uninitialized TensorFlow object representing the DQN s_queue, the queue of board states. Returns: self """ #Perform TensorFlow initialization with tf.Graph().as_default() as dqn.tf_graph: dqn.build_model() with tf.Session() as dqn.tf_session: dqn._init_tf() try: index, state = s_queue.get(True, 5) while index != -1: #Reshape to align with network input. state = state.reshape(1, 263) #Pass to Tensorflow here to evaluate s_val = dqn.get_q_value(state, "dqn") # (global) Update root action with evaluation; average child values if not isclose(q_vals[index], 0.0, rel_tol=1e-6): q_vals[index] = (q_vals[index] + s_val)/2 else: q_vals[index] = s_val index, state = s_queue.get(True, 5) except Empty as e: raise GameTreeFailure except: raise
def q_par(dqn, g1): print(dqn.get_q_value(g1, "dqn")) def par(a): print(a) features = 20 h1 = 10 h2 = 5 g1 = np.arange(40).reshape(2, 20) dqn = DQN(features, h1, h2, "models/tf_multi_1") with dqn.tf_graph.as_default(): dqn.build_model() with tf.Session() as dqn.tf_session: dqn._init_tf() print(dqn.tf_session.run(dqn.model, feed_dict={dqn.s_: g1})) processes = [] for p in range(4): processes.append(mp.Process(target=q_par, args=(dqn, g1))) processes[p].start() for p in range(4): processes[p].join()
import multiprocessing as mp import sys def q_par(dqn, g1): print(dqn.get_q_value(g1, "dqn")) def par(a): print(a) features = 20 h1 = 10 h2 = 5 g1 = np.arange(40).reshape(2, 20) dqn = DQN(features, h1, h2, "models/tf_multi_1") with dqn.tf_graph.as_default(): dqn.build_model() with tf.Session() as dqn.tf_session: dqn._init_tf() print(dqn.tf_session.run(dqn.model, feed_dict={dqn.s_: g1})) processes = [] for p in range(4): processes.append(mp.Process(target=q_par, args=(dqn,g1))) processes[p].start() for p in range(4): processes[p].join()